On Thu, Jun 27, 2013 at 4:14 PM, Jesse Gross <je...@nicira.com> wrote: > I thought about that but I don't think that it's really the right > thing to do as we converge the out of tree and in-tree modules. I > think it's pretty clear that if you are running with the latest > upstream kernel then we shouldn't be using any backports, which in > turn means that GRE support is controlled by that config options. On > the other hand, it's also pretty clear that we want to support GRE on > kernels < 2.6.37 using backports so it's just a matter of what to do > in the middle. It could go either way, so I would lean towards having > behavior more consistent with the future. > ok. GRE config controls OVS GRE support across kernels. your patch looks good.
Acked-by: Pravin B Shelar <pshe...@nicira.com> > On Thu, Jun 27, 2013 at 3:49 PM, Pravin Shelar <pshe...@nicira.com> wrote: >> 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 >>>> _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev