AC_DEFINE(HAVE_STRLCAT,1,[Have strlcat]),
AM_CONDITIONAL(HAVE_STRLCAT, false))
+# HAVE_STRUCT_RTNL_LINK_STATS64={0,1}
+AC_CHECK_TYPES([struct rtnl_link_stats64], [], [], [[#include <linux/if_link.h>]])
+
# Check for some libraries
AX_PTHREAD
AC_SEARCH_LIBS(clock_gettime, [rt])
#pragma GCC diagnostic ignored "-Wcast-align"
for (rta = __NLMSG_RTA(h, sizeof(*ifi)); __NLMSG_RTAOK(rta, h);
rta = __RTA_NEXT(rta)) {
+#if HAVE_STRUCT_RTNL_LINK_STATS64
+ if (rta->rta_type != IFLA_STATS64)
+#else
if (rta->rta_type != IFLA_STATS)
+#endif
continue;
stats_len = __RTA_DATALEN(rta);
__RTA_DATA(rta), __RTA_DATALEN(rta),
ifi->ifi_index, ifi->ifi_type);
break;
+#if HAVE_STRUCT_RTNL_LINK_STATS64
+ case IFLA_STATS64:
+ ifs->ifa.ifa_stats_type = IFLA_STATS64;
+ memcpy(&ifs->ifa.ifa_stats64, __RTA_DATA(rta),
+ __RTA_DATALEN(rta));
+ break;
+#else
case IFLA_STATS:
- ifs->ifa.ifa_data = (void *)(ifs + 1);
- memcpy(ifs->ifa.ifa_data, __RTA_DATA(rta),
+ ifs->ifa.ifa_stats_type = IFLA_STATS;
+ memcpy(&ifs->ifa.ifa_stats32, __RTA_DATA(rta),
__RTA_DATALEN(rta));
break;
+#endif
case IFLA_MTU:
memcpy(&ifs->ifa.ifa_mtu, __RTA_DATA(rta),
sizeof(int));
#endif
#include <features.h>
+#include <linux/if_link.h>
#include <linux/types.h>
#include <netinet/in.h>
#include <stdbool.h>
struct sockaddr *ifu_dstaddr;
} ifa_ifu;
- /* If you don't know what this is for don't touch it. */
- void *ifa_data;
+ /* These fields are not present struct ifaddrs. */
+ int ifa_stats_type;
+ struct rtnl_link_stats ifa_stats32;
+ struct rtnl_link_stats64 ifa_stats64;
};
#define __ifa_broadaddr ifa_ifu.ifu_broadaddr