Skip to content

Commit

Permalink
netdev-linux: Avoid depending on kernel definition of rtnl_link_stats64.
Browse files Browse the repository at this point in the history
We have to define our own with some kernel headers, so we might as well do
it everywhere, especially since there seems to be a problem with detecting
the presence of the definition with at least some kernels.

Reported-by: Wang Sheng-Hui <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
Acked-by: Joe Stringer <[email protected]>
  • Loading branch information
blp committed Oct 30, 2014
1 parent 423ede1 commit fa373af
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
2 changes: 0 additions & 2 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,6 @@ AC_CHECK_DECLS([sys_siglist], [], [], [[#include <signal.h>]])
AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec, struct stat.st_mtimensec],
[], [], [[#include <sys/stat.h>]])
AC_CHECK_MEMBERS([struct ifreq.ifr_flagshigh], [], [], [[#include <net/if.h>]])
AC_CHECK_TYPES([struct rtnl_link_stats64], [], [],
[[#include <linux/if_link.h>]])
AC_CHECK_FUNCS([mlockall strnlen getloadavg statvfs getmntent_r])
AC_CHECK_HEADERS([mntent.h sys/statvfs.h linux/types.h linux/if_ether.h stdatomic.h])
AC_CHECK_HEADERS([net/if_mib.h], [], [], [[#include <sys/types.h>
Expand Down
13 changes: 10 additions & 3 deletions lib/netdev-linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,17 @@ struct tpacket_auxdata {
uint16_t tp_vlan_tpid;
};

/* Linux 2.6.35 introduced IFLA_STATS64 and rtnl_link_stats64. */
#ifndef HAVE_STRUCT_RTNL_LINK_STATS64
/* Linux 2.6.35 introduced IFLA_STATS64 and rtnl_link_stats64.
*
* Tests for rtnl_link_stats64 don't seem to consistently work, e.g. on
* 2.6.32-431.29.2.el6.x86_64 (see report at
* http://openvswitch.org/pipermail/dev/2014-October/047978.html). Maybe
* if_link.h is not self-contained on those kernels. It is easiest to
* unconditionally define a replacement. */
#ifndef IFLA_STATS64
#define IFLA_STATS64 23
#endif
#define rtnl_link_stats64 rpl_rtnl_link_stats64
struct rtnl_link_stats64 {
uint64_t rx_packets;
uint64_t tx_packets;
Expand Down Expand Up @@ -169,7 +177,6 @@ struct rtnl_link_stats64 {
uint64_t rx_compressed;
uint64_t tx_compressed;
};
#endif /* !HAVE_STRUCT_RTNL_LINK_STATS64 */

enum {
VALID_IFINDEX = 1 << 0,
Expand Down

0 comments on commit fa373af

Please sign in to comment.