datapath: Add configure test for skb_warn_if_lro().
authorJesse Gross <jesse@nicira.com>
Thu, 6 May 2010 19:31:43 +0000 (12:31 -0700)
committerJesse Gross <jesse@nicira.com>
Thu, 6 May 2010 20:15:21 +0000 (13:15 -0700)
Some distributions backport this function, so use a configure
test instead of a version check.

CC: Alexey I. Froloff <raorn@altlinux.org>
acinclude.m4
datapath/linux-2.6/compat-2.6/dev-openvswitch.c
datapath/linux-2.6/compat-2.6/include/linux/skbuff.h
datapath/linux-2.6/compat-2.6/skbuff-openvswitch.c

index 64384d90fb4ba69234a7c5727b6e66e15c5e4abe..e52a884de00a99811c3a010c326daf5dedb630a4 100644 (file)
@@ -164,6 +164,8 @@ AC_DEFUN([OVS_CHECK_LINUX26_COMPAT], [
                   [OVS_DEFINE([HAVE_IPV4_IS_MULTICAST])])
   OVS_GREP_IFELSE([$KSRC26/include/linux/string.h $KSRC26/include/linux/slab.h],
                   [kmemdup], [OVS_DEFINE([HAVE_KMEMDUP])])
+  OVS_GREP_IFELSE([$KSRC26/include/linux/skbuff.h], [skb_warn_if_lro],
+                  [OVS_DEFINE([HAVE_SKB_WARN_LRO])])
   # Check for the proto_data_valid member in struct sk_buff.  The [^@]
   # is necessary because some versions of this header remove the
   # member but retain the kerneldoc comment that describes it (which
index 7be33f6e7eae70d9032c7271cfbc27f0710f420c..180b72a47be6f6d87a121651abd26cfa6d7ccadd 100644 (file)
@@ -1,12 +1,8 @@
-#include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+#ifndef HAVE_SKB_WARN_LRO
 
 #include <linux/netdevice.h>
 
 #ifndef NETIF_F_LRO
-void dev_disable_lro(struct net_device *dev) { }
-#else
-
 #include <linux/ethtool.h>
 
 /**
@@ -32,4 +28,4 @@ void dev_disable_lro(struct net_device *dev)
 
 #endif /* NETIF_F_LRO */
 
-#endif /* kernel < 2.6.27 */
+#endif /* HAVE_SKB_WARN_LRO */
index 6a6b0950be27c3283cb3c3fe59ac7fdcd6acc083..e8dc72ecd557ca35f51a01d65a84d4818a5972bb 100644 (file)
@@ -205,16 +205,15 @@ static inline struct sk_buff *skb_gso_segment(struct sk_buff *skb,
 }
 #endif /* before 2.6.18 */
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
-
-extern void __skb_warn_lro_forwarding(const struct sk_buff *skb);
-
+#ifndef HAVE_SKB_WARN_LRO
 #ifndef NETIF_F_LRO
 static inline bool skb_warn_if_lro(const struct sk_buff *skb)
 {
        return false;
 }
 #else
+extern void __skb_warn_lro_forwarding(const struct sk_buff *skb);
+
 static inline bool skb_warn_if_lro(const struct sk_buff *skb)
 {
        /* LRO sets gso_size but not gso_type, whereas if GSO is really
@@ -227,7 +226,7 @@ static inline bool skb_warn_if_lro(const struct sk_buff *skb)
        return false;
 }
 #endif /* NETIF_F_LRO */
-#endif /* kernel < 2.6.27 */
+#endif /* HAVE_SKB_WARN_LRO */
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
 static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,
index a9743adc51702c27e86010b0c65deafc88a7008a..7991706531ee962f6f7e4f5484b0c00ad07ccefc 100644 (file)
@@ -1,5 +1,4 @@
-#include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
+#ifndef HAVE_SKB_WARN_LRO
 
 #include <linux/netdevice.h>
 
@@ -10,4 +9,4 @@ void __skb_warn_lro_forwarding(const struct sk_buff *skb)
                                    " while LRO is enabled\n", skb->dev->name);
 }
 
-#endif /* kernel < 2.6.27 */
+#endif /* HAVE_SKB_WARN_LRO */