diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/netdevice.h | 14 | ||||
| -rw-r--r-- | include/linux/skbuff.h | 12 | ||||
| -rw-r--r-- | include/net/tcp.h | 4 |
3 files changed, 23 insertions, 7 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index cead6be467ed..fa5671307b90 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -308,9 +308,12 @@ struct net_device | |||
| 308 | #define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */ | 308 | #define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */ |
| 309 | #define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */ | 309 | #define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */ |
| 310 | #define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ | 310 | #define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ |
| 311 | #define NETIF_F_TSO 2048 /* Can offload TCP/IP segmentation */ | ||
| 312 | #define NETIF_F_LLTX 4096 /* LockLess TX */ | 311 | #define NETIF_F_LLTX 4096 /* LockLess TX */ |
| 313 | #define NETIF_F_UFO 8192 /* Can offload UDP Large Send*/ | 312 | |
| 313 | /* Segmentation offload features */ | ||
| 314 | #define NETIF_F_GSO_SHIFT 16 | ||
| 315 | #define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT) | ||
| 316 | #define NETIF_F_UFO (SKB_GSO_UDPV4 << NETIF_F_GSO_SHIFT) | ||
| 314 | 317 | ||
| 315 | #define NETIF_F_GEN_CSUM (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM) | 318 | #define NETIF_F_GEN_CSUM (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM) |
| 316 | #define NETIF_F_ALL_CSUM (NETIF_F_IP_CSUM | NETIF_F_GEN_CSUM) | 319 | #define NETIF_F_ALL_CSUM (NETIF_F_IP_CSUM | NETIF_F_GEN_CSUM) |
| @@ -979,6 +982,13 @@ extern void dev_seq_stop(struct seq_file *seq, void *v); | |||
| 979 | 982 | ||
| 980 | extern void linkwatch_run_queue(void); | 983 | extern void linkwatch_run_queue(void); |
| 981 | 984 | ||
| 985 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) | ||
| 986 | { | ||
| 987 | int feature = skb_shinfo(skb)->gso_type << NETIF_F_GSO_SHIFT; | ||
| 988 | return skb_shinfo(skb)->gso_size && | ||
| 989 | (dev->features & feature) != feature; | ||
| 990 | } | ||
| 991 | |||
| 982 | #endif /* __KERNEL__ */ | 992 | #endif /* __KERNEL__ */ |
| 983 | 993 | ||
| 984 | #endif /* _LINUX_DEV_H */ | 994 | #endif /* _LINUX_DEV_H */ |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index f8c7eb79a27f..97b0d2d1a6b0 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -134,9 +134,10 @@ struct skb_frag_struct { | |||
| 134 | struct skb_shared_info { | 134 | struct skb_shared_info { |
| 135 | atomic_t dataref; | 135 | atomic_t dataref; |
| 136 | unsigned short nr_frags; | 136 | unsigned short nr_frags; |
| 137 | unsigned short tso_size; | 137 | unsigned short gso_size; |
| 138 | unsigned short tso_segs; | 138 | /* Warning: this field is not always filled in (UFO)! */ |
| 139 | unsigned short ufo_size; | 139 | unsigned short gso_segs; |
| 140 | unsigned short gso_type; | ||
| 140 | unsigned int ip6_frag_id; | 141 | unsigned int ip6_frag_id; |
| 141 | struct sk_buff *frag_list; | 142 | struct sk_buff *frag_list; |
| 142 | skb_frag_t frags[MAX_SKB_FRAGS]; | 143 | skb_frag_t frags[MAX_SKB_FRAGS]; |
| @@ -168,6 +169,11 @@ enum { | |||
| 168 | SKB_FCLONE_CLONE, | 169 | SKB_FCLONE_CLONE, |
| 169 | }; | 170 | }; |
| 170 | 171 | ||
| 172 | enum { | ||
| 173 | SKB_GSO_TCPV4 = 1 << 0, | ||
| 174 | SKB_GSO_UDPV4 = 1 << 1, | ||
| 175 | }; | ||
| 176 | |||
| 171 | /** | 177 | /** |
| 172 | * struct sk_buff - socket buffer | 178 | * struct sk_buff - socket buffer |
| 173 | * @next: Next buffer in list | 179 | * @next: Next buffer in list |
diff --git a/include/net/tcp.h b/include/net/tcp.h index 5f4eb5c79689..b197a9e615c1 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
| @@ -569,13 +569,13 @@ struct tcp_skb_cb { | |||
| 569 | */ | 569 | */ |
| 570 | static inline int tcp_skb_pcount(const struct sk_buff *skb) | 570 | static inline int tcp_skb_pcount(const struct sk_buff *skb) |
| 571 | { | 571 | { |
| 572 | return skb_shinfo(skb)->tso_segs; | 572 | return skb_shinfo(skb)->gso_segs; |
| 573 | } | 573 | } |
| 574 | 574 | ||
| 575 | /* This is valid iff tcp_skb_pcount() > 1. */ | 575 | /* This is valid iff tcp_skb_pcount() > 1. */ |
| 576 | static inline int tcp_skb_mss(const struct sk_buff *skb) | 576 | static inline int tcp_skb_mss(const struct sk_buff *skb) |
| 577 | { | 577 | { |
| 578 | return skb_shinfo(skb)->tso_size; | 578 | return skb_shinfo(skb)->gso_size; |
| 579 | } | 579 | } |
| 580 | 580 | ||
| 581 | static inline void tcp_dec_pcount_approx(__u32 *count, | 581 | static inline void tcp_dec_pcount_approx(__u32 *count, |
