diff options
| author | Robin Jarry <[email protected]> | 2024-10-18 16:05:42 +0200 |
|---|---|---|
| committer | David Marchand <[email protected]> | 2024-10-18 17:47:01 +0200 |
| commit | 6cb10a9bdb6d2d0253e4d022f230371d703d8ac2 (patch) | |
| tree | 1e099b1f21d6666f0e5dca9ff3e6be0653a24cba /examples | |
| parent | e1a06e391ba74f9c4d46a6ecef6d8ee084f4229e (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.c | 39 |
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, |
