- struct ifinfomsg ifinfo __attribute__ ((aligned(NLMSG_ALIGNTO)));
- struct rtattr txqlen_rta __attribute__ ((aligned(RTA_ALIGNTO)));
- uint32_t txqlen;
- struct rtattr mtu_rta __attribute__ ((aligned(RTA_ALIGNTO)));
- uint32_t mtu;
-
- // IPv4 address
- struct nlmsghdr addr_nh __attribute__ ((aligned(NLMSG_ALIGNTO)));
- struct ifaddrmsg ifaddr __attribute__ ((aligned(NLMSG_ALIGNTO)));
- struct rtattr addr_rta __attribute__ ((aligned(RTA_ALIGNTO)));
- struct in_addr addr;
-
- // IPv6 LL address
- struct nlmsghdr lladdr6_nh __attribute__ ((aligned(NLMSG_ALIGNTO)));
- struct ifaddrmsg llifaddr6 __attribute__ ((aligned(NLMSG_ALIGNTO)));
- struct rtattr lladdr6_rta __attribute__ ((aligned(RTA_ALIGNTO)));
- struct in6_addr lladdr6;
-
- // IPv6 global address
- struct nlmsghdr addr6_nh __attribute__ ((aligned(NLMSG_ALIGNTO)));
- struct ifaddrmsg ifaddr6 __attribute__ ((aligned(NLMSG_ALIGNTO)));
- struct rtattr addr6_rta __attribute__ ((aligned(RTA_ALIGNTO)));
- struct in6_addr addr6;
-
- // end header
- struct nlmsghdr end_nh __attribute__ ((aligned(NLMSG_ALIGNTO)));
+ union {
+ struct ifinfomsg ifinfo;
+ struct ifaddrmsg ifaddr;
+ } ifmsg __attribute__ ((aligned(NLMSG_ALIGNTO)));
+ char rtdata[32]; // 32 should be enough