X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Fcompat.h;h=71fa06c1b7b183019967f2c374bd97029937e0e8;hb=9b80f761bed9a32c1b0eb22ee3361966057ea973;hp=c484a5d72a6c991586916c6b64bef70b9cb6b869;hpb=9cb8d24da006b562fecd17d34971822e3f6d1a78;p=sliver-openvswitch.git diff --git a/datapath/compat.h b/datapath/compat.h index c484a5d72..71fa06c1b 100644 --- a/datapath/compat.h +++ b/datapath/compat.h @@ -1,9 +1,19 @@ /* - * Copyright (c) 2011 Nicira Networks. - * Distributed under the terms of the GNU GPL version 2. + * Copyright (c) 2007-2012 Nicira Networks. * - * Significant portions of this file may be copied from parts of the Linux - * kernel, by Linus Torvalds and others. + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA */ #ifndef COMPAT_H @@ -36,4 +46,39 @@ static inline int CHECK_NUL_STRING(struct nlattr *attr, int maxlen) } #endif /* !HAVE_NLA_NUL_STRING */ +static inline void skb_clear_rxhash(struct sk_buff *skb) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) + skb->rxhash = 0; +#endif +} + +/* + * Enforces, mutual exclusion with the Linux bridge module, by declaring and + * exporting br_should_route_hook. Because the bridge module also exports the + * same symbol, the module loader will refuse to load both modules at the same + * time (e.g. "bridge: exports duplicate symbol br_should_route_hook (owned by + * openvswitch)"). + * + * Before Linux 2.6.36, Open vSwitch cannot safely coexist with the Linux + * bridge module, so openvswitch uses this macro in those versions. In + * Linux 2.6.36 and later, Open vSwitch can coexist with the bridge module, + * but it makes no sense to load both bridge and brcompat, so brcompat uses + * this macro in those versions. + * + * The use of "typeof" here avoids the need to track changes in the type of + * br_should_route_hook over various kernel versions. + */ +#define BRIDGE_MUTUAL_EXCLUSION \ + typeof(br_should_route_hook) br_should_route_hook; \ + EXPORT_SYMBOL(br_should_route_hook) + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32) +#define GENL_SOCK(net) (genl_sock) +#define SET_NETNSOK +#else +#define GENL_SOCK(net) ((net)->genl_sock) +#define SET_NETNSOK .netnsok = true, +#endif + #endif /* compat.h */