Index: sys/net/if.h =================================================================== --- sys/net/if.h +++ sys/net/if.h @@ -421,6 +421,13 @@ #define ifr_lan_pcp ifr_ifru.ifru_vlan_pcp /* VLAN priority */ }; +/* + * Consumers such as tcpdump assume no pad between ifr_name and ifr_ifru + * when struct ifreq is used in SIOCGIFCONF. + */ +CTASSERT(sizeof(((struct ifreq *)NULL)->ifr_name) == + offsetof(struct ifreq, ifr_ifru)); + #define _SIZEOF_ADDR_IFREQ(ifr) \ ((ifr).ifr_addr.sa_len > sizeof(struct sockaddr) ? \ (sizeof(struct ifreq) - sizeof(struct sockaddr) + \ Index: sys/netinet6/in6_var.h =================================================================== --- sys/netinet6/in6_var.h +++ sys/netinet6/in6_var.h @@ -289,6 +289,12 @@ } ifr_ifru; }; +/* + * struct in6_ifreq and struct ifreq must be type-punnable for common members + * of ifr_ifru to allow accessors to be shared. + */ +CTASSERT(offsetof(struct in6_ifreq, ifr_ifru) == offsetof(struct ifreq)); + struct in6_aliasreq { char ifra_name[IFNAMSIZ]; struct sockaddr_in6 ifra_addr;