X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Flinux%2Fcompat%2Finclude%2Flinux%2Fskbuff.h;h=461e07cfb0a0d2ecd065c20e301054e9ca6675ad;hb=dc0d542d5254c1e6b749df4c34aeb549e5599df4;hp=311bfdbc60dc7a66bd6ce5d8881ffaf77bb63f18;hpb=ceb176fdb72bb7ce90debc66e1eeb1d25823d30a;p=sliver-openvswitch.git diff --git a/datapath/linux/compat/include/linux/skbuff.h b/datapath/linux/compat/include/linux/skbuff.h index 311bfdbc6..461e07cfb 100644 --- a/datapath/linux/compat/include/linux/skbuff.h +++ b/datapath/linux/compat/include/linux/skbuff.h @@ -34,6 +34,12 @@ static inline void skb_copy_to_linear_data_offset(struct sk_buff *skb, #endif /* !HAVE_SKB_COPY_FROM_LINEAR_DATA_OFFSET */ +#ifndef HAVE_SKB_RESET_TAIL_POINTER +static inline void skb_reset_tail_pointer(struct sk_buff *skb) +{ + skb->tail = skb->data; +} +#endif /* * The networking layer reserves some headroom in skb data (via * dev_alloc_skb). This is used to avoid having to reallocate skb data when @@ -232,17 +238,41 @@ static inline bool skb_warn_if_lro(const struct sk_buff *skb) #define consume_skb kfree_skb #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0) +#ifndef HAVE_SKB_FRAG_PAGE static inline struct page *skb_frag_page(const skb_frag_t *frag) { return frag->page; } #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0) +#ifndef HAVE_SKB_RESET_MAC_LEN 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