????????????°汾????з???????仯??????????????????????汾????union???????????????mac_header????巽????£?


union{
    struct ethhdr *ethernet;
    unsigned char *raw;
}mac;


?????????????????????????


#ifdef NET_SKBUFF_DATA_USES_OFFSET
typedef unsigned int sk_buff_data_t;
#else
typedef unsigned char *sk_buff_data_t;
#endif


???????????????o??漸??????????????????head??data??tail??end

????head?????????????data???????????????tail???????????????end?????????????????

????char cb[48] __aligned(8);?е?48????????????Σ???????Э?鶴????????洢?????????????

????2??sk_buff_head????


struct sk_buff_head {
 /* These two members must be first. */
 struct sk_buff *next;
 struct sk_buff *prev;

 __u32  qlen;
 spinlock_t lock;
};
 


?????????????????????????????????sk_buff?????????????????????sk_buff??????qlen??????????????sk_buff???????lock??????????