aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/netdevice.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r--include/linux/netdevice.h18
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
1909static 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
1903static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, 1917static 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);
2440void napi_gro_flush(struct napi_struct *napi, bool flush_old); 2454void napi_gro_flush(struct napi_struct *napi, bool flush_old);
2441struct sk_buff *napi_get_frags(struct napi_struct *napi); 2455struct sk_buff *napi_get_frags(struct napi_struct *napi);
2442gro_result_t napi_gro_frags(struct napi_struct *napi); 2456gro_result_t napi_gro_frags(struct napi_struct *napi);
2457struct packet_offload *gro_find_receive_by_type(__be16 type);
2458struct packet_offload *gro_find_complete_by_type(__be16 type);
2443 2459
2444static inline void napi_free_frags(struct napi_struct *napi) 2460static inline void napi_free_frags(struct napi_struct *napi)
2445{ 2461{