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
>
X-CudaMail-Whitelist-To: dev@openvswitch.org
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev