I think we can use gre compat code if gre-demux not available. Attached is incremental, what do you think?
On Thu, Jun 27, 2013 at 10:02 AM, Jesse Gross <je...@nicira.com> wrote: > Pravin, can you take a look at this patch while we figure out the > Debian issues on the other one? > > On Tue, Jun 25, 2013 at 12:31 PM, Jesse Gross <je...@nicira.com> wrote: >> Now that GRE support has been upstreamed into Linux, OVS is >> using the components in the native kernel when available. However, >> this means that it is now dependent on the appropriate kernel >> config, which is CONFIG_NET_IPGRE_DEMUX on 2.6.37 and later. >> >> Reported-by: Ben Pfaff <b...@nicira.com> >> Signed-off-by: Jesse Gross <je...@nicira.com> >> --- >> INSTALL | 6 +-- >> datapath/linux/Modules.mk | 1 + >> datapath/linux/compat/gre.c | 5 +++ >> datapath/linux/compat/include/linux/kconfig.h | 57 >> +++++++++++++++++++++++++++ >> datapath/vport-gre.c | 3 ++ >> datapath/vport.c | 3 ++ >> 6 files changed, 72 insertions(+), 3 deletions(-) >> create mode 100644 datapath/linux/compat/include/linux/kconfig.h >> >> diff --git a/INSTALL b/INSTALL >> index 28bc1a0..45d75ef 100644 >> --- a/INSTALL >> +++ b/INSTALL >> @@ -49,9 +49,9 @@ INSTALL.userspace for more information. >> NET_ACT_POLICE, either built-in or as modules. (NET_CLS_POLICE is >> obsolete and not needed.) >> >> - If GRE tunneling is being used it is recommended that the kernel >> - be compiled with IPv6 support (CONFIG_IPV6). This allows for >> - special handling (such as path MTU discovery) of IPv6 packets. >> + To use GRE tunneling on Linux 2.6.37 or newer, kernel support >> + for GRE must be compiled in or available as a module >> + (CONFIG_NET_IPGRE_DEMUX). >> >> To configure HTB or HFSC quality of service with Open vSwitch, >> you must enable the respective configuration options. >> diff --git a/datapath/linux/Modules.mk b/datapath/linux/Modules.mk >> index a62d444..dcacc79 100644 >> --- a/datapath/linux/Modules.mk >> +++ b/datapath/linux/Modules.mk >> @@ -37,6 +37,7 @@ openvswitch_headers += \ >> linux/compat/include/linux/ip.h \ >> linux/compat/include/linux/ipv6.h \ >> linux/compat/include/linux/jiffies.h \ >> + linux/compat/include/linux/kconfig.h \ >> linux/compat/include/linux/kernel.h \ >> linux/compat/include/linux/kobject.h \ >> linux/compat/include/linux/list.h \ >> diff --git a/datapath/linux/compat/gre.c b/datapath/linux/compat/gre.c >> index fbb9fb9..582bd94 100644 >> --- a/datapath/linux/compat/gre.c >> +++ b/datapath/linux/compat/gre.c >> @@ -16,6 +16,9 @@ >> * 02110-1301, USA >> */ >> >> +#include <linux/kconfig.h> >> +#if IS_ENABLED(CONFIG_NET_IPGRE_DEMUX) >> + >> #include <linux/module.h> >> #include <linux/if.h> >> #include <linux/if_tunnel.h> >> @@ -350,3 +353,5 @@ int gre_cisco_unregister(struct gre_cisco_protocol >> *proto) >> ret = gre_compat_exit(); >> return ret; >> } >> + >> +#endif /* CONFIG_NET_IPGRE_DEMUX */ >> diff --git a/datapath/linux/compat/include/linux/kconfig.h >> b/datapath/linux/compat/include/linux/kconfig.h >> new file mode 100644 >> index 0000000..5717a26 >> --- /dev/null >> +++ b/datapath/linux/compat/include/linux/kconfig.h >> @@ -0,0 +1,57 @@ >> +#ifndef __LINUX_KCONFIG_WRAPPER_H >> +#define __LINUX_KCONFIG_WRAPPER_H >> + >> +#include <linux/version.h> >> + >> +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) >> +#define CONFIG_NET_IPGRE_DEMUX 1 >> +#endif >> + >> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0) >> +#include_next <linux/kconfig.h> >> +#endif >> + >> +#ifndef IS_ENABLED >> + >> +/* >> + * Helper macros to use CONFIG_ options in C/CPP expressions. Note that >> + * these only work with boolean and tristate options. >> + */ >> + >> +/* >> + * Getting something that works in C and CPP for an arg that may or may >> + * not be defined is tricky. Here, if we have "#define CONFIG_BOOGER 1" >> + * we match on the placeholder define, insert the "0," for arg1 and generate >> + * the triplet (0, 1, 0). Then the last step cherry picks the 2nd arg (a >> one). >> + * When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and >> when >> + * the last step cherry picks the 2nd arg, we get a zero. >> + */ >> +#define __ARG_PLACEHOLDER_1 0, >> +#define config_enabled(cfg) _config_enabled(cfg) >> +#define _config_enabled(value) __config_enabled(__ARG_PLACEHOLDER_##value) >> +#define __config_enabled(arg1_or_junk) ___config_enabled(arg1_or_junk 1, 0) >> +#define ___config_enabled(__ignored, val, ...) val >> + >> +/* >> + * IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm', >> + * 0 otherwise. >> + * >> + */ >> +#define IS_ENABLED(option) \ >> + (config_enabled(option) || config_enabled(option##_MODULE)) >> + >> +/* >> + * IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0 >> + * otherwise. For boolean options, this is equivalent to >> + * IS_ENABLED(CONFIG_FOO). >> + */ >> +#define IS_BUILTIN(option) config_enabled(option) >> + >> +/* >> + * IS_MODULE(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'm', 0 >> + * otherwise. >> + */ >> +#define IS_MODULE(option) config_enabled(option##_MODULE) >> + >> +#endif /* IS_ENABLED */ >> +#endif /* __LINUX_KCONFIG_WRAPER_H */ >> diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c >> index 4f7be00..c74f5fc 100644 >> --- a/datapath/vport-gre.c >> +++ b/datapath/vport-gre.c >> @@ -16,6 +16,8 @@ >> * 02110-1301, USA >> */ >> >> +#include <linux/kconfig.h> >> +#if IS_ENABLED(CONFIG_NET_IPGRE_DEMUX) >> #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt >> >> #include <linux/if.h> >> @@ -353,3 +355,4 @@ const struct vport_ops ovs_gre64_vport_ops = { >> .get_name = gre_get_name, >> .send = gre64_send, >> }; >> +#endif >> diff --git a/datapath/vport.c b/datapath/vport.c >> index dcb7616..03b775d 100644 >> --- a/datapath/vport.c >> +++ b/datapath/vport.c >> @@ -20,6 +20,7 @@ >> #include <linux/if.h> >> #include <linux/if_vlan.h> >> #include <linux/jhash.h> >> +#include <linux/kconfig.h> >> #include <linux/kernel.h> >> #include <linux/list.h> >> #include <linux/mutex.h> >> @@ -39,8 +40,10 @@ >> static const struct vport_ops *vport_ops_list[] = { >> &ovs_netdev_vport_ops, >> &ovs_internal_vport_ops, >> +#if IS_ENABLED(CONFIG_NET_IPGRE_DEMUX) >> &ovs_gre_vport_ops, >> &ovs_gre64_vport_ops, >> +#endif >> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26) >> &ovs_vxlan_vport_ops, >> &ovs_lisp_vport_ops, >> -- >> 1.8.1.2 >>
0002-datapath-Use-gre-compat-code-if-CONFIG_NET_IPGRE_DEM.patch
Description: Binary data
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev