mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-06-05 11:38:52 +00:00
netns_ifaddrs: handle IFLA_STATS{64} correctly
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
2a2d77c356
commit
da5efb6f76
@ -676,6 +676,9 @@ AC_CHECK_FUNCS([strlcat],
|
||||
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])
|
||||
|
@ -177,7 +177,11 @@ static int nl_msg_to_ifaddr(void *pctx, bool *netnsid_aware, struct nlmsghdr *h)
|
||||
#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);
|
||||
@ -226,11 +230,19 @@ static int nl_msg_to_ifaddr(void *pctx, bool *netnsid_aware, struct nlmsghdr *h)
|
||||
__RTA_DATA(rta), __RTA_DATALEN(rta),
|
||||
ifi->ifi_index, ifi->ifi_type);
|
||||
break;
|
||||
case IFLA_STATS:
|
||||
ifs->ifa.ifa_data = (void *)(ifs + 1);
|
||||
memcpy(ifs->ifa.ifa_data, __RTA_DATA(rta),
|
||||
#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_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));
|
||||
|
@ -6,6 +6,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#include <features.h>
|
||||
#include <linux/if_link.h>
|
||||
#include <linux/types.h>
|
||||
#include <netinet/in.h>
|
||||
#include <stdbool.h>
|
||||
@ -37,8 +38,10 @@ struct netns_ifaddrs {
|
||||
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
|
||||
|
@ -283,6 +283,13 @@ extern int __build_bug_on_failed;
|
||||
#define IFA_TARGET_NETNSID 10
|
||||
#endif
|
||||
|
||||
#ifndef IFLA_STATS
|
||||
#define IFLA_STATS 7
|
||||
#endif
|
||||
|
||||
#ifndef IFLA_STATS64
|
||||
#define IFLA_STATS64 23
|
||||
#endif
|
||||
|
||||
#ifndef RTM_NEWNSID
|
||||
#define RTM_NEWNSID 88
|
||||
|
Loading…
Reference in New Issue
Block a user