[ovs-dev] [PATCH 1/2] datapath: Make GRE support conditional on CONFIG_NET_IPGRE_DEMUX.

Pravin Shelar pshelar at nicira.com
Fri Jun 28 00:06:16 UTC 2013


On Thu, Jun 27, 2013 at 4:14 PM, Jesse Gross <jesse at 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 <pshelar at nicira.com>


> On Thu, Jun 27, 2013 at 3:49 PM, Pravin Shelar <pshelar at 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 <jesse at 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 <jesse at 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 <blp at nicira.com>
>>>> Signed-off-by: Jesse Gross <jesse at 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
>>>>



More information about the dev mailing list