[ovs-dev] [PATCH] datapath: Tolerate backporting of rtnl_link_stats64 (as done on RHEL 6).
Ben Pfaff
blp at nicira.com
Fri Feb 4 00:04:09 UTC 2011
Red Hat Enterprise Linux 6 has a 2.6.32 kernel but it backports the
rtnl_link_stats64 structure that was introduced in 2.6.35, so we need to
check whether it was defined instead of just guessing based on the kernel
version number.
Build-tested only, on 2.6.32-71.14.1.el6 (RHEL 6),
linux-2.6.18-128.1.6.el5.xs5.5.0.496.101 (XenServer 5.5.0),
2.6.18-128.1.6.el5.xs5.5.0.505.1024xen (XenServer 5.5.0 update 1),
and upstream 2.6.18, 2.6.26, 2.6.29, 2.6.33, 2.6.34, 2.6.36, all for i386,
plus 2.6.36 for x86-64.
My machine's userspace headers have <linux/if_link.h> but not
rtnl_link_stats64. I didn't test with other userspace headers.
Reported-by: Geoff White <gwhite at nicira.com>
---
acinclude.m4 | 2 ++
configure.ac | 3 ++-
include/linux/if_link.h | 9 ++++++---
m4/openvswitch.m4 | 20 +++++++++++++++++++-
4 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/acinclude.m4 b/acinclude.m4
index 0cd1427..fed950b 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -204,6 +204,8 @@ AC_DEFUN([OVS_CHECK_LINUX26_COMPAT], [
OVS_GREP_IFELSE([$KSRC26/include/net/netlink.h], [nla_get_be16])
OVS_GREP_IFELSE([$KSRC26/include/net/netlink.h], [nla_find_nested])
+ OVS_GREP_IFELSE([$KSRC26/include/linux/if_link.h], [rtnl_link_stats64])
+
OVS_CHECK_LOG2_H
if cmp -s datapath/linux-2.6/kcompat.h.new \
diff --git a/configure.ac b/configure.ac
index adeb956..28af2fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-# Copyright (c) 2008, 2009, 2010 Nicira Networks
+# Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -47,6 +47,7 @@ OVS_CHECK_NDEBUG
OVS_CHECK_NETLINK
OVS_CHECK_OPENSSL
OVS_CHECK_LOGDIR
+OVS_CHECK_RTNL_LINK_STATS64
OVS_CHECK_PYTHON
OVS_CHECK_PYUIC4
OVS_CHECK_OVSDBMONITOR
diff --git a/include/linux/if_link.h b/include/linux/if_link.h
index 4afc22b..55d99e4 100644
--- a/include/linux/if_link.h
+++ b/include/linux/if_link.h
@@ -3,6 +3,10 @@
#include <linux/version.h>
+#ifdef HAVE_RTNL_LINK_STATS64
+#include_next <linux/if_link.h>
+#else /* !HAVE_RTNL_LINK_STATS64 */
+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
#include_next <linux/if_link.h>
#else
@@ -13,9 +17,8 @@
* turn only really needs __u64. */
#include <linux/types.h>
#include <linux/netlink.h>
-#endif
+#endif /* kernel < 2.6.19 */
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
/* The main device statistics structure */
struct rtnl_link_stats64 {
__u64 rx_packets; /* total packets received */
@@ -48,6 +51,6 @@ struct rtnl_link_stats64 {
__u64 rx_compressed;
__u64 tx_compressed;
};
-#endif /* linux kernel < 2.6.35 */
+#endif /* !HAVE_RTNL_LINK_STATS64 */
#endif
diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4
index 077c29b..b992888 100644
--- a/m4/openvswitch.m4
+++ b/m4/openvswitch.m4
@@ -1,6 +1,6 @@
# -*- autoconf -*-
-# Copyright (c) 2008, 2009, 2010 Nicira Networks.
+# Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -46,6 +46,24 @@ AC_DEFUN([OVS_CHECK_NDEBUG],
[ndebug=false])
AM_CONDITIONAL([NDEBUG], [test x$ndebug = xtrue])])
+dnl Checks for struct rtnl_link_stats64.
+dnl
+dnl (OVS checks for this structure in both kernel and userspace headers. This
+dnl is not redundant, because the kernel and userspace builds have completely
+dnl different include paths. It is possible for the kernel to have this
+dnl structure but not userspace, and vice versa.)
+AC_DEFUN([OVS_CHECK_RTNL_LINK_STATS64],
+ [AC_REQUIRE([OVS_CHECK_NETLINK])
+ if test $HAVE_NETLINK = yes; then
+ AC_CHECK_MEMBER(
+ [struct rtnl_link_stats64.tx_packets],
+ [AC_DEFINE([HAVE_RTNL_LINK_STATS64], [1],
+ [Define to 1 if <linux/if_link.h> defines
+ struct rtnl_link_stats64.])],
+ [], [#include <linux/if_link.h>
+])
+ fi])
+
dnl Checks for Netlink support.
AC_DEFUN([OVS_CHECK_NETLINK],
[AC_CHECK_HEADER([linux/netlink.h],
--
1.7.1
More information about the dev
mailing list