datapath: Add support for kernel 4.5
authorPravin B Shelar <pshelar@ovn.org>
Mon, 18 Jul 2016 02:24:07 +0000 (19:24 -0700)
committerPravin B Shelar <pshelar@ovn.org>
Tue, 19 Jul 2016 21:07:12 +0000 (14:07 -0700)
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
acinclude.m4
datapath/linux/compat/include/linux/netdevice.h
datapath/vport-netdev.c

index 6b608ef..5f38539 100644 (file)
@@ -134,10 +134,10 @@ AC_DEFUN([OVS_CHECK_LINUX], [
     AC_MSG_RESULT([$kversion])
 
     if test "$version" -ge 4; then
-       if test "$version" = 4 && test "$patchlevel" -le 4; then
+       if test "$version" = 4 && test "$patchlevel" -le 5; then
           : # Linux 4.x
        else
-          AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.4.x is not supported (please refer to the FAQ for advice)])
+          AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.5.x is not supported (please refer to the FAQ for advice)])
        fi
     elif test "$version" = 3 && test "$patchlevel" -ge 10; then
        : # Linux 3.x
@@ -475,6 +475,9 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
                   [OVS_DEFINE([HAVE_UDP_OFFLOAD_ARG_UOFF])])
   OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [gro_remcsum])
   OVS_GREP_IFELSE([$KSRC/include/linux/netdevice.h], [IFF_PHONY_HEADROOM])
+  OVS_FIND_PARAM_IFELSE([$KSRC/include/linux/netdevice.h],
+                        [netdev_master_upper_dev_link], [upper_priv],
+                        [OVS_DEFINE([HAVE_NETDEV_MASTER_UPPER_DEV_LINK_PRIV])])
 
   OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_hook_state])
   OVS_GREP_IFELSE([$KSRC/include/linux/netfilter.h], [nf_register_net_hook])
index 00eaa21..dd028f6 100644 (file)
@@ -105,28 +105,15 @@ static inline bool netif_needs_gso(struct sk_buff *skb,
 }
 #endif
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
-
-/* XEN dom0 networking assumes dev->master is bond device
- * and it tries to access bond private structure from dev->master
- * ptr on receive path. This causes panic. Therefore it is better
- * not to backport this API.
- **/
-static inline int netdev_master_upper_dev_link(struct net_device *dev,
-                                              struct net_device *upper_dev)
-{
-       return 0;
-}
-
-static inline void netdev_upper_dev_unlink(struct net_device *dev,
-                                          struct net_device *upper_dev)
+#ifndef HAVE_NETDEV_MASTER_UPPER_DEV_LINK_PRIV
+static inline int rpl_netdev_master_upper_dev_link(struct net_device *dev,
+                                              struct net_device *upper_dev,
+                                              void *upper_priv, void *upper_info)
 {
+       return netdev_master_upper_dev_link(dev, upper_dev);
 }
+#define netdev_master_upper_dev_link rpl_netdev_master_upper_dev_link
 
-static inline struct net_device *netdev_master_upper_dev_get(struct net_device *dev)
-{
-       return NULL;
-}
 #endif
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)
index 905b125..970f7d3 100644 (file)
@@ -110,7 +110,7 @@ struct vport *ovs_netdev_link(struct vport *vport, const char *name)
 
        rtnl_lock();
        err = netdev_master_upper_dev_link(vport->dev,
-                                          get_dpdev(vport->dp));
+                                          get_dpdev(vport->dp), NULL, NULL);
        if (err)
                goto error_unlock;