diff options
Diffstat (limited to 'include/linux/skbuff.h')
| -rw-r--r-- | include/linux/skbuff.h | 38 | 
1 files changed, 38 insertions, 0 deletions
| diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index ee38a4127475..6f0b3e0adc73 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -37,6 +37,7 @@  #include <net/flow_dissector.h>  #include <linux/splice.h>  #include <linux/in6.h> +#include <linux/if_packet.h>  #include <net/flow.h>  /* The interface for checksum offload between the stack and networking drivers @@ -301,6 +302,11 @@ struct sk_buff;  #endif  extern int sysctl_max_skb_frags; +/* Set skb_shinfo(skb)->gso_size to this in case you want skb_segment to + * segment using its current segmentation instead. + */ +#define GSO_BY_FRAGS	0xFFFF +  typedef struct skb_frag_struct skb_frag_t;  struct skb_frag_struct { @@ -482,6 +488,8 @@ enum {  	SKB_GSO_PARTIAL = 1 << 13,  	SKB_GSO_TUNNEL_REMCSUM = 1 << 14, + +	SKB_GSO_SCTP = 1 << 15,  };  #if BITS_PER_LONG > 32 @@ -874,6 +882,15 @@ static inline struct rtable *skb_rtable(const struct sk_buff *skb)  	return (struct rtable *)skb_dst(skb);  } +/* For mangling skb->pkt_type from user space side from applications + * such as nft, tc, etc, we only allow a conservative subset of + * possible pkt_types to be set. +*/ +static inline bool skb_pkt_type_ok(u32 ptype) +{ +	return ptype <= PACKET_OTHERHOST; +} +  void kfree_skb(struct sk_buff *skb);  void kfree_skb_list(struct sk_buff *segs);  void skb_tx_error(struct sk_buff *skb); @@ -1062,6 +1079,7 @@ __skb_set_sw_hash(struct sk_buff *skb, __u32 hash, bool is_l4)  }  void __skb_get_hash(struct sk_buff *skb); +u32 __skb_get_hash_symmetric(struct sk_buff *skb);  u32 skb_get_poff(const struct sk_buff *skb);  u32 __skb_get_poff(const struct sk_buff *skb, void *data,  		   const struct flow_keys *keys, int hlen); @@ -2870,6 +2888,25 @@ static inline void skb_postpush_rcsum(struct sk_buff *skb,  }  /** + *	skb_push_rcsum - push skb and update receive checksum + *	@skb: buffer to update + *	@len: length of data pulled + * + *	This function performs an skb_push on the packet and updates + *	the CHECKSUM_COMPLETE checksum.  It should be used on + *	receive path processing instead of skb_push unless you know + *	that the checksum difference is zero (e.g., a valid IP header) + *	or you are setting ip_summed to CHECKSUM_NONE. + */ +static inline unsigned char *skb_push_rcsum(struct sk_buff *skb, +					    unsigned int len) +{ +	skb_push(skb, len); +	skb_postpush_rcsum(skb, skb->data, len); +	return skb->data; +} + +/**   *	pskb_trim_rcsum - trim received skb and update checksum   *	@skb: buffer to trim   *	@len: new length @@ -2987,6 +3024,7 @@ void skb_split(struct sk_buff *skb, struct sk_buff *skb1, const u32 len);  int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen);  void skb_scrub_packet(struct sk_buff *skb, bool xnet);  unsigned int skb_gso_transport_seglen(const struct sk_buff *skb); +bool skb_gso_validate_mtu(const struct sk_buff *skb, unsigned int mtu);  struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features);  struct sk_buff *skb_vlan_untag(struct sk_buff *skb);  int skb_ensure_writable(struct sk_buff *skb, int write_len); |