diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/netdevice.h | 14 | ||||
| -rw-r--r-- | include/linux/skbuff.h | 12 |
2 files changed, 21 insertions, 5 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index cead6be467..fa5671307b 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 f8c7eb79a2..97b0d2d1a6 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 |
