diff options
Diffstat (limited to 'include/linux/skbuff.h')
| -rw-r--r-- | include/linux/skbuff.h | 137 | 
1 files changed, 20 insertions, 117 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index dec1748cd002..3b71a4e83642 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -319,6 +319,8 @@ enum {  	SKB_GSO_GRE = 1 << 6,  	SKB_GSO_UDP_TUNNEL = 1 << 7, + +	SKB_GSO_MPLS = 1 << 8,  };  #if BITS_PER_LONG > 32 @@ -384,11 +386,13 @@ typedef unsigned char *sk_buff_data_t;   *	@no_fcs:  Request NIC to treat last 4 bytes as Ethernet FCS   *	@dma_cookie: a cookie to one of several possible DMA operations   *		done by skb DMA functions +  *	@napi_id: id of the NAPI struct this skb came from   *	@secmark: security marking   *	@mark: Generic packet mark   *	@dropcount: total number of sk_receive_queue overflows   *	@vlan_proto: vlan encapsulation protocol   *	@vlan_tci: vlan tag control information + *	@inner_protocol: Protocol (encapsulation)   *	@inner_transport_header: Inner transport layer header (encapsulation)   *	@inner_network_header: Network layer header (encapsulation)   *	@inner_mac_header: Link layer header (encapsulation) @@ -497,8 +501,11 @@ struct sk_buff {  	/* 7/9 bit hole (depending on ndisc_nodetype presence) */  	kmemcheck_bitfield_end(flags2); -#ifdef CONFIG_NET_DMA -	dma_cookie_t		dma_cookie; +#if defined CONFIG_NET_DMA || defined CONFIG_NET_RX_BUSY_POLL +	union { +		unsigned int	napi_id; +		dma_cookie_t	dma_cookie; +	};  #endif  #ifdef CONFIG_NETWORK_SECMARK  	__u32			secmark; @@ -509,12 +516,13 @@ struct sk_buff {  		__u32		reserved_tailroom;  	}; -	sk_buff_data_t		inner_transport_header; -	sk_buff_data_t		inner_network_header; -	sk_buff_data_t		inner_mac_header; -	sk_buff_data_t		transport_header; -	sk_buff_data_t		network_header; -	sk_buff_data_t		mac_header; +	__be16			inner_protocol; +	__u16			inner_transport_header; +	__u16			inner_network_header; +	__u16			inner_mac_header; +	__u16			transport_header; +	__u16			network_header; +	__u16			mac_header;  	/* These elements must be at the end, see alloc_skb() for details.  */  	sk_buff_data_t		tail;  	sk_buff_data_t		end; @@ -1388,6 +1396,7 @@ static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset)  	skb_reset_tail_pointer(skb);  	skb->tail += offset;  } +  #else /* NET_SKBUFF_DATA_USES_OFFSET */  static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb)  { @@ -1528,7 +1537,6 @@ static inline void skb_reset_mac_len(struct sk_buff *skb)  	skb->mac_len = skb->network_header - skb->mac_header;  } -#ifdef NET_SKBUFF_DATA_USES_OFFSET  static inline unsigned char *skb_inner_transport_header(const struct sk_buff  							*skb)  { @@ -1582,7 +1590,7 @@ static inline void skb_set_inner_mac_header(struct sk_buff *skb,  }  static inline bool skb_transport_header_was_set(const struct sk_buff *skb)  { -	return skb->transport_header != ~0U; +	return skb->transport_header != (typeof(skb->transport_header))~0U;  }  static inline unsigned char *skb_transport_header(const struct sk_buff *skb) @@ -1625,7 +1633,7 @@ static inline unsigned char *skb_mac_header(const struct sk_buff *skb)  static inline int skb_mac_header_was_set(const struct sk_buff *skb)  { -	return skb->mac_header != ~0U; +	return skb->mac_header != (typeof(skb->mac_header))~0U;  }  static inline void skb_reset_mac_header(struct sk_buff *skb) @@ -1639,112 +1647,6 @@ static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)  	skb->mac_header += offset;  } -#else /* NET_SKBUFF_DATA_USES_OFFSET */ -static inline unsigned char *skb_inner_transport_header(const struct sk_buff -							*skb) -{ -	return skb->inner_transport_header; -} - -static inline void skb_reset_inner_transport_header(struct sk_buff *skb) -{ -	skb->inner_transport_header = skb->data; -} - -static inline void skb_set_inner_transport_header(struct sk_buff *skb, -						   const int offset) -{ -	skb->inner_transport_header = skb->data + offset; -} - -static inline unsigned char *skb_inner_network_header(const struct sk_buff *skb) -{ -	return skb->inner_network_header; -} - -static inline void skb_reset_inner_network_header(struct sk_buff *skb) -{ -	skb->inner_network_header = skb->data; -} - -static inline void skb_set_inner_network_header(struct sk_buff *skb, -						const int offset) -{ -	skb->inner_network_header = skb->data + offset; -} - -static inline unsigned char *skb_inner_mac_header(const struct sk_buff *skb) -{ -	return skb->inner_mac_header; -} - -static inline void skb_reset_inner_mac_header(struct sk_buff *skb) -{ -	skb->inner_mac_header = skb->data; -} - -static inline void skb_set_inner_mac_header(struct sk_buff *skb, -						const int offset) -{ -	skb->inner_mac_header = skb->data + offset; -} -static inline bool skb_transport_header_was_set(const struct sk_buff *skb) -{ -	return skb->transport_header != NULL; -} - -static inline unsigned char *skb_transport_header(const struct sk_buff *skb) -{ -	return skb->transport_header; -} - -static inline void skb_reset_transport_header(struct sk_buff *skb) -{ -	skb->transport_header = skb->data; -} - -static inline void skb_set_transport_header(struct sk_buff *skb, -					    const int offset) -{ -	skb->transport_header = skb->data + offset; -} - -static inline unsigned char *skb_network_header(const struct sk_buff *skb) -{ -	return skb->network_header; -} - -static inline void skb_reset_network_header(struct sk_buff *skb) -{ -	skb->network_header = skb->data; -} - -static inline void skb_set_network_header(struct sk_buff *skb, const int offset) -{ -	skb->network_header = skb->data + offset; -} - -static inline unsigned char *skb_mac_header(const struct sk_buff *skb) -{ -	return skb->mac_header; -} - -static inline int skb_mac_header_was_set(const struct sk_buff *skb) -{ -	return skb->mac_header != NULL; -} - -static inline void skb_reset_mac_header(struct sk_buff *skb) -{ -	skb->mac_header = skb->data; -} - -static inline void skb_set_mac_header(struct sk_buff *skb, const int offset) -{ -	skb->mac_header = skb->data + offset; -} -#endif /* NET_SKBUFF_DATA_USES_OFFSET */ -  static inline void skb_probe_transport_header(struct sk_buff *skb,  					      const int offset_hint)  { @@ -2483,6 +2385,7 @@ extern void	       skb_split(struct sk_buff *skb,  				 struct sk_buff *skb1, const u32 len);  extern int	       skb_shift(struct sk_buff *tgt, struct sk_buff *skb,  				 int shiftlen); +extern void	       skb_scrub_packet(struct sk_buff *skb);  extern struct sk_buff *skb_segment(struct sk_buff *skb,  				   netdev_features_t features);  | 
