struct sk_buff — socket buffer
struct sk_buff { struct sk_buff * next; struct sk_buff * prev; struct sock * sk; struct skb_timeval tstamp; struct net_device * dev; struct net_device * input_dev; union h; union nh; union mac; struct dst_entry * dst; struct sec_path * sp; char cb[40]; unsigned int len; unsigned int data_len; unsigned int mac_len; unsigned int csum; __u32 priority; __u8 local_df:1; __u8 cloned:1; __u8 ip_summed:2; __u8 nohdr:1; __u8 nfctinfo:3; __u8 pkt_type:3; __u8 fclone:2; __u8 ipvs_property:1; __be16 protocol; void (* destructor) (struct sk_buff *skb); #ifdef CONFIG_NETFILTER __u32 nfmark; struct nf_conntrack * nfct; #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) struct sk_buff * nfct_reasm; #endif #ifdef CONFIG_BRIDGE_NETFILTER struct nf_bridge_info * nf_bridge; #endif #endif #ifdef CONFIG_NET_SCHED __u16 tc_index; #ifdef CONFIG_NET_CLS_ACT __u16 tc_verd; #endif #endif unsigned int truesize; atomic_t users; unsigned char * head; unsigned char * data; unsigned char * tail; unsigned char * end; };
Next buffer in list
Previous buffer in list
Socket we are owned by
Time we arrived
Device we arrived on/are leaving by
Device we arrived on
Transport layer header
Network layer header
Link layer header
destination entry
the security path, used for xfrm
Control buffer. Free for use by every layer. Put private vars here
Length of actual data
Data length
Length of link layer header
Checksum
Packet queueing priority
allow local fragmentation
Head may be cloned (check refcnt to be sure)
Driver fed us an IP checksum
Payload reference only, must not modify header
Relationship of this skb to the connection
Packet class
skbuff clone status
skbuff is owned by ipvs
Packet protocol from driver
Destruct function
Can be used for communication between hooks
Associated connection, if any
netfilter conntrack re-assembly pointer
Saved data about a bridged frame - see br_netfilter.c
Traffic control index
traffic control verdict
Buffer size
User count - see {datagram,tcp}.c
Head of buffer
Data head pointer
Tail pointer
End pointer