[PATCH dpdk v2 03/16] net: add structure for ipv6 addresses
Robin Jarry
rjarry at redhat.com
Thu Oct 10 22:08:05 CEST 2024
Morten Brørup, Oct 06, 2024 at 10:18:
> This has been discussed before, but I want to double check...
>
> If - sometime in the future - we want to add a union to offer a 2-byte
> access variant and make the structure to 2-byte aligned (which is the
> common case in Ethernet packets), it will break both API and ABI. This
> seems unlikely to get accepted at a later time, so I think we are
> - right now - in a situation where it's now or never:
>
> struct rte_ipv6_addr {
> __extension__
> union {
> unsigned char a[RTE_IPV6_ADDR_SIZE];
> uint16_t w[RTE_IPV6_ADDR_SIZE / 2];
> };
> };
>
> Unless some of the CPU folks want the 2-byte aligned variant, stick
> with what you offered.
I was also thinking the same. I could have added an unnamed union which
only contains one field.
However, it does not make much sense if we never want to change the
default alignment.
Important note: DPDK is compiled with the following C flags:
-Wno-address-of-packed-member
Added in 2017 https://git.dpdk.org/dpdk/commit/?id=95cd37070af44
If we had struct rte_ipv6_addr aligned on 2 bytes (or more),
applications that do not silence that warning would have a hard time.
Example in grout:
../modules/ip6/datapath/ip6_input.c:99:54: error: taking address of packed member of ‘struct rte_ipv6_hdr’ may result in an unaligned pointer value [-Werror=address-of-packed-member]
99 | nh = ip6_route_lookup(iface->vrf_id, &ip->dst_addr);
| ^~~~~~~~~~~~~
I'd say that it is better to keep it simple :)
More information about the dev
mailing list