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?

Reply via email to