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 <[email protected]> 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 <[email protected]> > Signed-off-by: Jesse Gross <[email protected]> > --- > 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: [email protected] _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
