X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Flinux%2Fcompat%2Finclude%2Flinux%2Fskbuff.h;h=a48609641d6a0f0a1df09fea93d8e638a7f449af;hb=3442636d01d2a73a557952ad9140de07418c28c2;hp=d485b39a5655dda576c7458fbf16d29358ca8ad0;hpb=780325b5b8d4c0552b4b7719e0a38200d99f6b08;p=sliver-openvswitch.git diff --git a/datapath/linux/compat/include/linux/skbuff.h b/datapath/linux/compat/include/linux/skbuff.h index d485b39a5..a48609641 100644 --- a/datapath/linux/compat/include/linux/skbuff.h +++ b/datapath/linux/compat/include/linux/skbuff.h @@ -5,17 +5,6 @@ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) -/* In version 2.6.24 the return type of skb_headroom() changed from 'int' to - * 'unsigned int'. We use skb_headroom() as one arm of a min(a,b) invocation - * in make_writable() in actions.c, so we need the correct type. */ -#define skb_headroom rpl_skb_headroom -static inline unsigned int rpl_skb_headroom(const struct sk_buff *skb) -{ - return skb->data - skb->head; -} -#endif - #ifndef HAVE_SKB_COPY_FROM_LINEAR_DATA_OFFSET static inline void skb_copy_from_linear_data_offset(const struct sk_buff *skb, const int offset, void *to, @@ -82,13 +71,6 @@ static inline int skb_cow_head(struct sk_buff *skb, unsigned int headroom) } #endif /* !HAVE_SKB_COW_HEAD */ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23) -static inline int skb_clone_writable(struct sk_buff *skb, int len) -{ - return false; -} -#endif - #ifndef HAVE_SKB_DST_ACCESSOR_FUNCS static inline struct dst_entry *skb_dst(const struct sk_buff *skb) { @@ -106,18 +88,6 @@ static inline struct rtable *skb_rtable(const struct sk_buff *skb) } #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17) -/* Emulate Linux 2.6.17 and later behavior, in which kfree_skb silently ignores - * null pointer arguments. */ -#define kfree_skb(skb) kfree_skb_maybe_null(skb) -static inline void kfree_skb_maybe_null(struct sk_buff *skb) -{ - if (likely(skb != NULL)) - (kfree_skb)(skb); -} -#endif - - #ifndef CHECKSUM_PARTIAL #define CHECKSUM_PARTIAL CHECKSUM_HW #endif @@ -196,21 +166,6 @@ static inline void skb_copy_to_linear_data(struct sk_buff *skb, } #endif /* !HAVE_SKBUFF_HEADER_HELPERS */ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) -#warning "TSO/UFO not supported on kernels earlier than 2.6.18" - -static inline int skb_is_gso(const struct sk_buff *skb) -{ - return 0; -} - -static inline struct sk_buff *skb_gso_segment(struct sk_buff *skb, - int features) -{ - return NULL; -} -#endif /* before 2.6.18 */ - #ifndef HAVE_SKB_WARN_LRO #ifndef NETIF_F_LRO static inline bool skb_warn_if_lro(const struct sk_buff *skb) @@ -251,4 +206,28 @@ static inline void skb_reset_mac_len(struct sk_buff *skb) skb->mac_len = skb->network_header - skb->mac_header; } #endif + +#ifndef HAVE_SKB_UNCLONE +static inline int skb_unclone(struct sk_buff *skb, gfp_t pri) +{ + might_sleep_if(pri & __GFP_WAIT); + + if (skb_cloned(skb)) + return pskb_expand_head(skb, 0, 0, pri); + + return 0; +} +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) +extern u32 __skb_get_rxhash(struct sk_buff *skb); +static inline __u32 skb_get_rxhash(struct sk_buff *skb) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,34) + if (!skb->rxhash) +#endif + return __skb_get_rxhash(skb); +} +#endif + #endif