As we trim the SKB, this page will keep track of the size and layout of this structure. This is done for a 64-bit architecture, structure offsets are in the first column.
struct sk_buff { 0x00 struct sk_buff *next; 0x08 struct sk_buff *prev; 0x10 struct sock *sk; 0x18 struct timeval stamp; 0x28 struct net_device *dev; 0x30 struct net_device *input_dev; union { struct tcphdr *th; struct udphdr *uh; struct icmphdr *icmph; struct igmphdr *igmph; struct iphdr *ipiph; struct ipv6hdr *ipv6h; unsigned char *raw; 0x38 } h; union { struct iphdr *iph; struct ipv6hdr *ipv6h; struct arphdr *arph; unsigned char *raw; 0x40 } nh; union { unsigned char *raw; 0x48 } mac; 0x50 struct dst_entry *dst; 0x58 struct sec_path *sp; 0x60 char cb[40]; 0x88 unsigned int len, 0x8c data_len, 0x90 mac_len, 0x94 csum; 0x98 __u32 priority; 0x9c __u8 local_df:1, cloned:1, ip_summed:2, nohdr:1, nfctinfo:3; 0x9d __u8 pkt_type; 0x9e __u16 protocol; 0xa0 void (*destructor)(struct sk_buff *skb); 0xa8 __u32 nfmark; 0xb0 struct nf_conntrack *nfct; 0xb8 __u8 ipvs_property:1; 0xc0 struct nf_bridge_info *nf_bridge; 0xc8 __u16 tc_index; 0xca __u16 tc_verd; 0xcc unsigned int truesize; 0xd0 atomic_t users; 0xd8 unsigned char *head, 0xe0 *data, 0xe8 *tail, 0xf0 *end; };