6de0ea50e9
l3fwd-acl contains duplicate functions to l3fwd. For this reason we merge l3fwd-acl code into l3fwd with '--lookup acl' cmdline option to run ACL. Signed-off-by: Sean Morrissey <sean.morrissey@intel.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
123 lines
2.5 KiB
C
123 lines
2.5 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(c) 2021 Intel Corporation
|
|
*/
|
|
|
|
/* Log file related character defs. */
|
|
#define COMMENT_LEAD_CHAR ('#')
|
|
#define ROUTE_LEAD_CHAR ('R')
|
|
#define ACL_LEAD_CHAR ('@')
|
|
|
|
#define IPV6_ADDR_LEN 16
|
|
#define IPV6_ADDR_U16 (IPV6_ADDR_LEN / sizeof(uint16_t))
|
|
#define IPV6_ADDR_U32 (IPV6_ADDR_LEN / sizeof(uint32_t))
|
|
|
|
#define GET_CB_FIELD(in, fd, base, lim, dlm) do { \
|
|
unsigned long val; \
|
|
char *end; \
|
|
errno = 0; \
|
|
val = strtoul((in), &end, (base)); \
|
|
if (errno != 0 || end[0] != (dlm) || val > (lim)) \
|
|
return -EINVAL; \
|
|
(fd) = (typeof(fd))val; \
|
|
(in) = end + 1; \
|
|
} while (0)
|
|
|
|
struct ipv4_l3fwd_route {
|
|
uint32_t ip;
|
|
uint8_t depth;
|
|
uint8_t if_out;
|
|
};
|
|
|
|
struct ipv6_l3fwd_route {
|
|
uint8_t ip[16];
|
|
uint8_t depth;
|
|
uint8_t if_out;
|
|
};
|
|
|
|
struct ipv4_5tuple {
|
|
uint32_t ip_dst;
|
|
uint32_t ip_src;
|
|
uint16_t port_dst;
|
|
uint16_t port_src;
|
|
uint8_t proto;
|
|
} __rte_packed;
|
|
|
|
struct ipv6_5tuple {
|
|
uint8_t ip_dst[IPV6_ADDR_LEN];
|
|
uint8_t ip_src[IPV6_ADDR_LEN];
|
|
uint16_t port_dst;
|
|
uint16_t port_src;
|
|
uint8_t proto;
|
|
} __rte_packed;
|
|
|
|
struct lpm_route_rule {
|
|
union {
|
|
uint32_t ip;
|
|
union {
|
|
uint32_t ip_32[IPV6_ADDR_U32];
|
|
uint8_t ip_8[IPV6_ADDR_LEN];
|
|
};
|
|
};
|
|
uint8_t depth;
|
|
uint8_t if_out;
|
|
};
|
|
|
|
struct ipv4_l3fwd_em_route {
|
|
struct ipv4_5tuple key;
|
|
uint8_t if_out;
|
|
};
|
|
|
|
struct ipv6_l3fwd_em_route {
|
|
struct ipv6_5tuple key;
|
|
uint8_t if_out;
|
|
};
|
|
|
|
struct em_rule {
|
|
union {
|
|
struct ipv4_5tuple v4_key;
|
|
struct ipv6_5tuple v6_key;
|
|
};
|
|
uint8_t if_out;
|
|
};
|
|
|
|
extern struct lpm_route_rule *route_base_v4;
|
|
extern struct lpm_route_rule *route_base_v6;
|
|
extern int route_num_v4;
|
|
extern int route_num_v6;
|
|
|
|
extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[16];
|
|
extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[16];
|
|
|
|
extern const struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[16];
|
|
extern const struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[16];
|
|
|
|
void
|
|
read_config_files_lpm(void);
|
|
|
|
void
|
|
read_config_files_em(void);
|
|
|
|
void
|
|
read_config_files_acl(void);
|
|
|
|
void
|
|
em_free_routes(void);
|
|
|
|
void
|
|
lpm_free_routes(void);
|
|
|
|
void
|
|
acl_free_routes(void);
|
|
|
|
void
|
|
l3fwd_set_alg(const char *optarg);
|
|
|
|
void
|
|
l3fwd_set_rule_ipv6_name(const char *optarg);
|
|
|
|
void
|
|
l3fwd_set_rule_ipv4_name(const char *optarg);
|
|
|
|
int
|
|
is_bypass_line(const char *buff);
|