diff options
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r-- | include/linux/netdevice.h | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index d9c961aa6a7f..a2a70cc70e7b 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -1632,7 +1632,10 @@ struct napi_gro_cb { | |||
1632 | int data_offset; | 1632 | int data_offset; |
1633 | 1633 | ||
1634 | /* This is non-zero if the packet cannot be merged with the new skb. */ | 1634 | /* This is non-zero if the packet cannot be merged with the new skb. */ |
1635 | int flush; | 1635 | u16 flush; |
1636 | |||
1637 | /* Save the IP ID here and check when we get to the transport layer */ | ||
1638 | u16 flush_id; | ||
1636 | 1639 | ||
1637 | /* Number of segments aggregated. */ | 1640 | /* Number of segments aggregated. */ |
1638 | u16 count; | 1641 | u16 count; |
@@ -1651,6 +1654,9 @@ struct napi_gro_cb { | |||
1651 | /* Used in ipv6_gro_receive() */ | 1654 | /* Used in ipv6_gro_receive() */ |
1652 | int proto; | 1655 | int proto; |
1653 | 1656 | ||
1657 | /* used to support CHECKSUM_COMPLETE for tunneling protocols */ | ||
1658 | __wsum csum; | ||
1659 | |||
1654 | /* used in skb_gro_receive() slow path */ | 1660 | /* used in skb_gro_receive() slow path */ |
1655 | struct sk_buff *last; | 1661 | struct sk_buff *last; |
1656 | }; | 1662 | }; |
@@ -1900,6 +1906,14 @@ static inline void *skb_gro_network_header(struct sk_buff *skb) | |||
1900 | skb_network_offset(skb); | 1906 | skb_network_offset(skb); |
1901 | } | 1907 | } |
1902 | 1908 | ||
1909 | static inline void skb_gro_postpull_rcsum(struct sk_buff *skb, | ||
1910 | const void *start, unsigned int len) | ||
1911 | { | ||
1912 | if (skb->ip_summed == CHECKSUM_COMPLETE) | ||
1913 | NAPI_GRO_CB(skb)->csum = csum_sub(NAPI_GRO_CB(skb)->csum, | ||
1914 | csum_partial(start, len, 0)); | ||
1915 | } | ||
1916 | |||
1903 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, | 1917 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, |
1904 | unsigned short type, | 1918 | unsigned short type, |
1905 | const void *daddr, const void *saddr, | 1919 | const void *daddr, const void *saddr, |
@@ -2440,6 +2454,8 @@ gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb); | |||
2440 | void napi_gro_flush(struct napi_struct *napi, bool flush_old); | 2454 | void napi_gro_flush(struct napi_struct *napi, bool flush_old); |
2441 | struct sk_buff *napi_get_frags(struct napi_struct *napi); | 2455 | struct sk_buff *napi_get_frags(struct napi_struct *napi); |
2442 | gro_result_t napi_gro_frags(struct napi_struct *napi); | 2456 | gro_result_t napi_gro_frags(struct napi_struct *napi); |
2457 | struct packet_offload *gro_find_receive_by_type(__be16 type); | ||
2458 | struct packet_offload *gro_find_complete_by_type(__be16 type); | ||
2443 | 2459 | ||
2444 | static inline void napi_free_frags(struct napi_struct *napi) | 2460 | static inline void napi_free_frags(struct napi_struct *napi) |
2445 | { | 2461 | { |