avoid AltiVec keyword vector
[dpdk.git] / examples / l3fwd / l3fwd_route.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2021 Intel Corporation
3  */
4
5 /* Log file related character defs. */
6 #define COMMENT_LEAD_CHAR       ('#')
7 #define ROUTE_LEAD_CHAR         ('R')
8
9 #define IPV6_ADDR_LEN   16
10 #define IPV6_ADDR_U16   (IPV6_ADDR_LEN / sizeof(uint16_t))
11 #define IPV6_ADDR_U32   (IPV6_ADDR_LEN / sizeof(uint32_t))
12
13 #define GET_CB_FIELD(in, fd, base, lim, dlm)    do {            \
14         unsigned long val;                                      \
15         char *end;                                              \
16         errno = 0;                                              \
17         val = strtoul((in), &end, (base));                      \
18         if (errno != 0 || end[0] != (dlm) || val > (lim))       \
19                 return -EINVAL;                                 \
20         (fd) = (typeof(fd))val;                                 \
21         (in) = end + 1;                                         \
22 } while (0)
23
24 struct ipv4_l3fwd_route {
25         uint32_t ip;
26         uint8_t  depth;
27         uint8_t  if_out;
28 };
29
30 struct ipv6_l3fwd_route {
31         uint8_t ip[16];
32         uint8_t depth;
33         uint8_t if_out;
34 };
35
36 struct ipv4_5tuple {
37         uint32_t ip_dst;
38         uint32_t ip_src;
39         uint16_t port_dst;
40         uint16_t port_src;
41         uint8_t  proto;
42 } __rte_packed;
43
44 struct ipv6_5tuple {
45         uint8_t  ip_dst[IPV6_ADDR_LEN];
46         uint8_t  ip_src[IPV6_ADDR_LEN];
47         uint16_t port_dst;
48         uint16_t port_src;
49         uint8_t  proto;
50 } __rte_packed;
51
52 struct lpm_route_rule {
53         union {
54                 uint32_t ip;
55                 union {
56                         uint32_t ip_32[IPV6_ADDR_U32];
57                         uint8_t ip_8[IPV6_ADDR_LEN];
58                 };
59         };
60         uint8_t depth;
61         uint8_t if_out;
62 };
63
64 struct ipv4_l3fwd_em_route {
65         struct ipv4_5tuple key;
66         uint8_t if_out;
67 };
68
69 struct ipv6_l3fwd_em_route {
70         struct ipv6_5tuple key;
71         uint8_t if_out;
72 };
73
74 struct em_rule {
75                 union {
76                 struct ipv4_5tuple v4_key;
77                 struct ipv6_5tuple v6_key;
78         };
79         uint8_t if_out;
80 };
81
82 extern struct lpm_route_rule *route_base_v4;
83 extern struct lpm_route_rule *route_base_v6;
84 extern int route_num_v4;
85 extern int route_num_v6;
86
87 extern const struct ipv4_l3fwd_route ipv4_l3fwd_route_array[16];
88 extern const struct ipv6_l3fwd_route ipv6_l3fwd_route_array[16];
89
90 extern const struct ipv4_l3fwd_em_route ipv4_l3fwd_em_route_array[16];
91 extern const struct ipv6_l3fwd_em_route ipv6_l3fwd_em_route_array[16];
92
93 void
94 read_config_files_lpm(void);
95
96 void
97 read_config_files_em(void);
98
99 void
100 em_free_routes(void);
101
102 void
103 lpm_free_routes(void);
104
105 int
106 is_bypass_line(const char *buff);