X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=datapath%2Fcompat.h;h=0e19051fb0949cdde7407feddd3b63cb016c5fca;hb=968eec593cc61690c9e0ed97450c4889258381af;hp=c484a5d72a6c991586916c6b64bef70b9cb6b869;hpb=9cb8d24da006b562fecd17d34971822e3f6d1a78;p=cascardo%2Fovs.git diff --git a/datapath/compat.h b/datapath/compat.h index c484a5d72..0e19051fb 100644 --- a/datapath/compat.h +++ b/datapath/compat.h @@ -1,39 +1,101 @@ /* - * Copyright (c) 2011 Nicira Networks. - * Distributed under the terms of the GNU GPL version 2. + * Copyright (c) 2007-2015 Nicira, Inc. * - * 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 #define COMPAT_H 1 +#include +#include #include +#include +#include +#include +#include -#ifndef HAVE_NLA_NUL_STRING -static inline int CHECK_NUL_STRING(struct nlattr *attr, int maxlen) -{ - char *s; - int len; - if (!attr) - return 0; +#ifdef HAVE_GENL_MULTICAST_GROUP_WITH_ID +#define GROUP_ID(grp) ((grp)->id) +#else +#define GROUP_ID(grp) 0 +#endif - len = nla_len(attr); - if (len >= maxlen) - return -EINVAL; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) +#define rt_dst(rt) (rt->dst) +#else +#define rt_dst(rt) (rt->u.dst) +#endif - s = nla_data(attr); - if (s[len - 1] != '\0') - return -EINVAL; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33) +#define inet_sport(sk) (inet_sk(sk)->sport) +#else +#define inet_sport(sk) (inet_sk(sk)->inet_sport) +#endif - return 0; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0) +static inline bool skb_encapsulation(struct sk_buff *skb) +{ + return skb->encapsulation; } #else -static inline int CHECK_NUL_STRING(struct nlattr *attr, int maxlen) +#define skb_encapsulation(skb) false +#endif + +#ifdef OVS_FRAGMENT_BACKPORT +#ifdef HAVE_NF_IPV6_OPS_FRAGMENT +static inline int __init ip6_output_init(void) { return 0; } +static inline void ip6_output_exit(void) { } +#else +int __init ip6_output_init(void); +void ip6_output_exit(void); +#endif + +static inline int __init compat_init(void) { + int err; + + err = ipfrag_init(); + if (err) + return err; + + err = nf_ct_frag6_init(); + if (err) + goto error_ipfrag_exit; + + err = ip6_output_init(); + if (err) + goto error_frag6_exit; + return 0; + +error_frag6_exit: + nf_ct_frag6_cleanup(); +error_ipfrag_exit: + rpl_ipfrag_fini(); + return err; +} +static inline void compat_exit(void) +{ + ip6_output_exit(); + nf_ct_frag6_cleanup(); + rpl_ipfrag_fini(); } -#endif /* !HAVE_NLA_NUL_STRING */ +#else +static inline int __init compat_init(void) { return 0; } +static inline void compat_exit(void) { } +#endif #endif /* compat.h */