From 54af97ad7ba7e103b91c48b9498edeef2fde1960 Mon Sep 17 00:00:00 2001 From: Pravin B Shelar Date: Mon, 14 Oct 2013 15:26:40 -0700 Subject: [PATCH] datapath: Add support for Linux 3.11 Kernel 3.11 has support for extended GRE API required for OVS datapath, But vxlan still needs out of tree tunneling compatibility. Therefore to simplify, all tunneling modules are forced to use compat tunneling. CC: James Page Signed-off-by: Pravin B Shelar Acked-by: Jesse Gross --- FAQ | 1 + NEWS | 1 + acinclude.m4 | 4 ++-- datapath/dp_notify.c | 2 +- datapath/linux/compat/include/linux/netdevice.h | 7 +++++++ datapath/linux/compat/include/net/gre.h | 6 ++++++ 6 files changed, 18 insertions(+), 3 deletions(-) diff --git a/FAQ b/FAQ index d36495c8a..99e6107eb 100644 --- a/FAQ +++ b/FAQ @@ -149,6 +149,7 @@ A: The following table lists the Linux kernel versions against which the 1.10.x 2.6.18 to 3.8 1.11.x 2.6.18 to 3.8 2.0.x 2.6.32 to 3.10 + 2.1.x 2.6.32 to 3.11 Open vSwitch userspace should also work with the Linux kernel module built into Linux 3.3 and later. diff --git a/NEWS b/NEWS index 36546f438..f6e2dafdf 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ Post-v2.0.0 * The OpenFlow 1.1+ "Write-Actions" instruction is now supported. - ovs-vswitchd.conf.db.5 man page will contain graphviz/dot diagram only if graphviz package was installed at the build time. + - Support for Linux kernels up to 3.11 v2.0.0 - 15 Oct 2013 diff --git a/acinclude.m4 b/acinclude.m4 index c293d337b..f987fa0bd 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -134,10 +134,10 @@ AC_DEFUN([OVS_CHECK_LINUX], [ AC_MSG_RESULT([$kversion]) if test "$version" -ge 3; then - if test "$version" = 3 && test "$patchlevel" -le 10; then + if test "$version" = 3 && test "$patchlevel" -le 11; then : # Linux 3.x else - AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 3.10.x is not supported]) + AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 3.11.x is not supported]) fi else if test "$version" -le 1 || test "$patchlevel" -le 5 || test "$sublevel" -le 31; then diff --git a/datapath/dp_notify.c b/datapath/dp_notify.c index b7aac4e40..0b22d0c19 100644 --- a/datapath/dp_notify.c +++ b/datapath/dp_notify.c @@ -78,7 +78,7 @@ static int dp_device_event(struct notifier_block *unused, unsigned long event, void *ptr) { struct ovs_net *ovs_net; - struct net_device *dev = ptr; + struct net_device *dev = netdev_notifier_info_to_dev(ptr); struct vport *vport = NULL; if (!ovs_is_internal_dev(dev)) diff --git a/datapath/linux/compat/include/linux/netdevice.h b/datapath/linux/compat/include/linux/netdevice.h index d2822017f..c5c366bd7 100644 --- a/datapath/linux/compat/include/linux/netdevice.h +++ b/datapath/linux/compat/include/linux/netdevice.h @@ -130,4 +130,11 @@ static inline struct net_device *netdev_master_upper_dev_get(struct net_device * int dev_queue_xmit(struct sk_buff *skb); #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0) +static inline struct net_device *netdev_notifier_info_to_dev(void *info) +{ + return info; +} +#endif + #endif diff --git a/datapath/linux/compat/include/net/gre.h b/datapath/linux/compat/include/net/gre.h index 5f46aed68..5b17dcc53 100644 --- a/datapath/linux/compat/include/net/gre.h +++ b/datapath/linux/compat/include/net/gre.h @@ -74,12 +74,17 @@ static inline __be16 tnl_flags_to_gre_flags(__be16 tflags) #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) */ #define MAX_GRE_PROTO_PRIORITY 255 +#define gre_cisco_protocol rpl_gre_cisco_protocol + struct gre_cisco_protocol { int (*handler)(struct sk_buff *skb, const struct tnl_ptk_info *tpi); u8 priority; }; +#define gre_cisco_register rpl_gre_cisco_register int gre_cisco_register(struct gre_cisco_protocol *proto); + +#define gre_cisco_unregister rpl_gre_cisco_unregister int gre_cisco_unregister(struct gre_cisco_protocol *proto); #define gre_build_header rpl_gre_build_header @@ -89,6 +94,7 @@ void gre_build_header(struct sk_buff *skb, const struct tnl_ptk_info *tpi, #define gre_handle_offloads rpl_gre_handle_offloads struct sk_buff *gre_handle_offloads(struct sk_buff *skb, bool gre_csum); +#define ip_gre_calc_hlen rpl_ip_gre_calc_hlen static inline int ip_gre_calc_hlen(__be16 o_flags) { int addend = 4; -- 2.43.0