X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Flinux-2.6%2Fcompat-2.6%2Finclude%2Flinux%2Fskbuff.h;h=9cd7e1d5d67a89dcf979d42dc23f14e583c79b55;hb=d295e8e97acae13552a5b220d3fbcff8201064a2;hp=d8205c6a24408383bee5b8833879e8bfd1197ce8;hpb=8f3a29be917cad5bcb389ab510d918ae21fea0c5;p=openvswitch diff --git a/datapath/linux-2.6/compat-2.6/include/linux/skbuff.h b/datapath/linux-2.6/compat-2.6/include/linux/skbuff.h index d8205c6a..9cd7e1d5 100644 --- a/datapath/linux-2.6/compat-2.6/include/linux/skbuff.h +++ b/datapath/linux-2.6/compat-2.6/include/linux/skbuff.h @@ -53,7 +53,7 @@ static inline void skb_copy_to_linear_data_offset(struct sk_buff *skb, #define NET_SKB_PAD 16 #endif -#ifndef HAVE_SKB_COW +#ifndef HAVE_SKB_COW_HEAD static inline int __skb_cow(struct sk_buff *skb, unsigned int headroom, int cloned) { @@ -74,7 +74,7 @@ static inline int skb_cow_head(struct sk_buff *skb, unsigned int headroom) { return __skb_cow(skb, headroom, skb_header_cloned(skb)); } -#endif /* !HAVE_SKB_COW */ +#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) @@ -83,7 +83,7 @@ static inline int skb_clone_writable(struct sk_buff *skb, int len) } #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31) +#ifndef HAVE_SKB_DST_ACCESSOR_FUNCS static inline struct dst_entry *skb_dst(const struct sk_buff *skb) { return (struct dst_entry *)skb->dst; @@ -101,7 +101,7 @@ 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 +/* 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) @@ -113,9 +113,7 @@ static inline void kfree_skb_maybe_null(struct sk_buff *skb) #ifndef CHECKSUM_PARTIAL -/* Note that CHECKSUM_PARTIAL is not implemented, but this allows us to at - * least test against it: see update_csum() in forward.c. */ -#define CHECKSUM_PARTIAL 3 +#define CHECKSUM_PARTIAL CHECKSUM_HW #endif #ifndef CHECKSUM_COMPLETE #define CHECKSUM_COMPLETE CHECKSUM_HW @@ -207,4 +205,27 @@ static inline struct sk_buff *skb_gso_segment(struct sk_buff *skb, } #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) +{ + return false; +} +#else +extern void __skb_warn_lro_forwarding(const struct sk_buff *skb); + +static inline bool skb_warn_if_lro(const struct sk_buff *skb) +{ + /* LRO sets gso_size but not gso_type, whereas if GSO is really + * wanted then gso_type will be set. */ + struct skb_shared_info *shinfo = skb_shinfo(skb); + if (shinfo->gso_size != 0 && unlikely(shinfo->gso_type == 0)) { + __skb_warn_lro_forwarding(skb); + return true; + } + return false; +} +#endif /* NETIF_F_LRO */ +#endif /* HAVE_SKB_WARN_LRO */ + #endif