Stephen Hemminger, Jul 18, 2024 at 23:15:
If you look at the standard netinet/in.h the storage of IPv6 addresses
is in in6_addr. DPDK has always wanted to do its own thing...
The in6_addr is a union with no explicit alignment.
struct in6_addr
{
union
{
uint8_t __u6_addr8[16];
uint16_t __u6_addr16[8];
uint32_t __u6_addr32[4];
} __in6_u;
Better to not have explicit alignment and not have 64 bit value.
The main reason why I didn't use the standard POSIX type is that it has
an alignment of 4 which means it cannot always be mapped directly to
packets in memory depending on the encapsulating protocol.
Also, ip->__in6_u.__u6_addr8 is really ugly as a field name, even if
the "helper" macros (ip->s6_addr8) make them a bit better :)
What do you have against adding a 64 bit value in the union?