summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorRobin Jarry <[email protected]>2024-10-18 16:05:42 +0200
committerDavid Marchand <[email protected]>2024-10-18 17:47:01 +0200
commit6cb10a9bdb6d2d0253e4d022f230371d703d8ac2 (patch)
tree1e099b1f21d6666f0e5dca9ff3e6be0653a24cba /examples
parente1a06e391ba74f9c4d46a6ecef6d8ee084f4229e (diff)
fib6: use IPv6 address structure and utils
Replace ad-hoc uint8_t[16] array types in the API of rte_fib6 with rte_ipv6_addr structures. Replace duplicate functions and macros with common ones from rte_ip6.h. Update all code accordingly. Signed-off-by: Robin Jarry <[email protected]>
Diffstat (limited to 'examples')
-rw-r--r--examples/l3fwd/l3fwd_fib.c39
1 files changed, 18 insertions, 21 deletions
diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c
index 339cd58116..a0eef05a5d 100644
--- a/examples/l3fwd/l3fwd_fib.c
+++ b/examples/l3fwd/l3fwd_fib.c
@@ -46,7 +46,7 @@ static struct rte_fib6 *ipv6_l3fwd_fib_lookup_struct[NB_SOCKETS];
static inline void
fib_parse_packet(struct rte_mbuf *mbuf,
uint32_t *ipv4, uint32_t *ipv4_cnt,
- uint8_t ipv6[RTE_FIB6_IPV6_ADDR_SIZE],
+ struct rte_ipv6_addr *ipv6,
uint32_t *ipv6_cnt, uint8_t *ip_type)
{
struct rte_ether_hdr *eth_hdr;
@@ -65,7 +65,7 @@ fib_parse_packet(struct rte_mbuf *mbuf,
/* IPv6 */
else {
ipv6_hdr = (struct rte_ipv6_hdr *)(eth_hdr + 1);
- rte_mov16(ipv6, ipv6_hdr->dst_addr.a);
+ *ipv6 = ipv6_hdr->dst_addr;
*ip_type = 0;
(*ipv6_cnt)++;
}
@@ -120,7 +120,7 @@ fib_send_packets(int nb_rx, struct rte_mbuf **pkts_burst,
uint16_t portid, struct lcore_conf *qconf)
{
uint32_t ipv4_arr[nb_rx];
- uint8_t ipv6_arr[nb_rx][RTE_FIB6_IPV6_ADDR_SIZE];
+ struct rte_ipv6_addr ipv6_arr[nb_rx];
uint16_t hops[nb_rx];
uint64_t hopsv4[nb_rx], hopsv6[nb_rx];
uint8_t type_arr[nb_rx];
@@ -140,7 +140,7 @@ fib_send_packets(int nb_rx, struct rte_mbuf **pkts_burst,
i + FIB_PREFETCH_OFFSET], void *));
fib_parse_packet(pkts_burst[i],
&ipv4_arr[ipv4_cnt], &ipv4_cnt,
- ipv6_arr[ipv6_cnt], &ipv6_cnt,
+ &ipv6_arr[ipv6_cnt], &ipv6_cnt,
&type_arr[i]);
}
@@ -148,7 +148,7 @@ fib_send_packets(int nb_rx, struct rte_mbuf **pkts_burst,
for (; i < nb_rx; i++)
fib_parse_packet(pkts_burst[i],
&ipv4_arr[ipv4_cnt], &ipv4_cnt,
- ipv6_arr[ipv6_cnt], &ipv6_cnt,
+ &ipv6_arr[ipv6_cnt], &ipv6_cnt,
&type_arr[i]);
/* Lookup IPv4 hops if IPv4 packets are present. */
@@ -270,7 +270,7 @@ fib_event_loop(struct l3fwd_event_resources *evt_rsrc,
unsigned int lcore_id;
uint32_t ipv4_arr[MAX_PKT_BURST];
- uint8_t ipv6_arr[MAX_PKT_BURST][RTE_FIB6_IPV6_ADDR_SIZE];
+ struct rte_ipv6_addr ipv6_arr[MAX_PKT_BURST];
uint64_t hopsv4[MAX_PKT_BURST], hopsv6[MAX_PKT_BURST];
uint16_t nh, hops[MAX_PKT_BURST];
uint8_t type_arr[MAX_PKT_BURST];
@@ -323,7 +323,7 @@ fib_event_loop(struct l3fwd_event_resources *evt_rsrc,
fib_parse_packet(events[i].mbuf,
&ipv4_arr[ipv4_cnt], &ipv4_cnt,
- ipv6_arr[ipv6_cnt], &ipv6_cnt,
+ &ipv6_arr[ipv6_cnt], &ipv6_cnt,
&type_arr[i]);
}
@@ -340,7 +340,7 @@ fib_event_loop(struct l3fwd_event_resources *evt_rsrc,
fib_parse_packet(events[i].mbuf,
&ipv4_arr[ipv4_cnt], &ipv4_cnt,
- ipv6_arr[ipv6_cnt], &ipv6_cnt,
+ &ipv6_arr[ipv6_cnt], &ipv6_cnt,
&type_arr[i]);
}
@@ -436,7 +436,7 @@ fib_event_main_loop_tx_q_burst(__rte_unused void *dummy)
static __rte_always_inline void
fib_process_event_vector(struct rte_event_vector *vec, uint8_t *type_arr,
- uint8_t **ipv6_arr, uint64_t *hopsv4, uint64_t *hopsv6,
+ struct rte_ipv6_addr *ipv6_arr, uint64_t *hopsv4, uint64_t *hopsv6,
uint32_t *ipv4_arr, uint16_t *hops)
{
uint32_t ipv4_arr_assem, ipv6_arr_assem;
@@ -463,13 +463,13 @@ fib_process_event_vector(struct rte_event_vector *vec, uint8_t *type_arr,
rte_prefetch0(rte_pktmbuf_mtod(mbufs[i + FIB_PREFETCH_OFFSET],
void *));
fib_parse_packet(mbufs[i], &ipv4_arr[ipv4_cnt], &ipv4_cnt,
- ipv6_arr[ipv6_cnt], &ipv6_cnt, &type_arr[i]);
+ &ipv6_arr[ipv6_cnt], &ipv6_cnt, &type_arr[i]);
}
/* Parse remaining packet info. */
for (; i < vec->nb_elem; i++)
fib_parse_packet(mbufs[i], &ipv4_arr[ipv4_cnt], &ipv4_cnt,
- ipv6_arr[ipv6_cnt], &ipv6_cnt, &type_arr[i]);
+ &ipv6_arr[ipv6_cnt], &ipv6_cnt, &type_arr[i]);
/* Lookup IPv4 hops if IPv4 packets are present. */
if (likely(ipv4_cnt > 0))
@@ -480,7 +480,7 @@ fib_process_event_vector(struct rte_event_vector *vec, uint8_t *type_arr,
if (ipv6_cnt > 0)
rte_fib6_lookup_bulk(
lconf->ipv6_lookup_struct,
- (uint8_t(*)[RTE_FIB6_IPV6_ADDR_SIZE])ipv6_arr, hopsv6,
+ ipv6_arr, hopsv6,
ipv6_cnt);
/* Assign ports looked up in fib depending on IPv4 or IPv6 */
@@ -522,7 +522,8 @@ fib_event_loop_vector(struct l3fwd_event_resources *evt_rsrc,
const uint8_t event_d_id = evt_rsrc->event_d_id;
const uint16_t deq_len = evt_rsrc->deq_depth;
struct rte_event events[MAX_PKT_BURST];
- uint8_t *type_arr, **ipv6_arr, *ptr;
+ uint8_t *type_arr;
+ struct rte_ipv6_addr *ipv6_arr;
int nb_enq = 0, nb_deq = 0, i;
uint64_t *hopsv4, *hopsv6;
uint32_t *ipv4_arr;
@@ -533,7 +534,7 @@ fib_event_loop_vector(struct l3fwd_event_resources *evt_rsrc,
"vector_fib",
(sizeof(uint32_t) + sizeof(uint8_t) + sizeof(uint64_t) +
sizeof(uint64_t) + sizeof(uint16_t) + sizeof(uint8_t *) +
- (sizeof(uint8_t) * RTE_FIB6_IPV6_ADDR_SIZE)) *
+ sizeof(struct rte_ipv6_addr)) *
evt_rsrc->vector_size,
RTE_CACHE_LINE_SIZE);
if (mem == 0)
@@ -543,11 +544,7 @@ fib_event_loop_vector(struct l3fwd_event_resources *evt_rsrc,
hopsv4 = (uint64_t *)&type_arr[evt_rsrc->vector_size];
hopsv6 = (uint64_t *)&hopsv4[evt_rsrc->vector_size];
hops = (uint16_t *)&hopsv6[evt_rsrc->vector_size];
- ipv6_arr = (uint8_t **)&hops[evt_rsrc->vector_size];
-
- ptr = (uint8_t *)&ipv6_arr[evt_rsrc->vector_size];
- for (i = 0; i < evt_rsrc->vector_size; i++)
- ipv6_arr[i] = &ptr[RTE_FIB6_IPV6_ADDR_SIZE + i];
+ ipv6_arr = (struct rte_ipv6_addr *)&hops[evt_rsrc->vector_size];
if (event_p_id < 0) {
rte_free((void *)mem);
@@ -732,7 +729,7 @@ setup_fib(const int socketid)
rte_eth_dev_info_get(route_base_v6[i].if_out,
&dev_info);
ret = rte_fib6_add(ipv6_l3fwd_fib_lookup_struct[socketid],
- route_base_v6[i].ip6.a,
+ &route_base_v6[i].ip6,
route_base_v6[i].depth,
route_base_v6[i].if_out);
@@ -744,7 +741,7 @@ setup_fib(const int socketid)
i, socketid);
}
- if (inet_ntop(AF_INET6, route_base_v6[i].ip6.a,
+ if (inet_ntop(AF_INET6, &route_base_v6[i].ip6,
abuf, sizeof(abuf)) != NULL) {
printf("FIB: Adding route %s / %d (%d) [%s]\n", abuf,
route_base_v6[i].depth,