当接收一个包时,处理n层协议头的函数从n-1层收到一个缓冲区,它的skb->data指向n层协议的头。处理n层协议的函数把本层的指针(例如,L3对应的是skb->nh指针)初始化为skb->data,因为这个指针的值会在处理下一层协议时改变(skb->data将被初始化成缓冲区里的其他地址)。在处理n层协议的函数结束时,在把包传...
找到NET_SKBUFF_DATA_USES_OFFSET定义的地方,文件include/linux/skbuff.h #if BITS_PER_LONG > 32 #define NET_SKBUFF_DATA_USES_OFFSET 1 #endif 出现使用NET_SKBUFF_DATA_USES_OFFSET 的地方,如: #ifdef NET_SKBUFF_DATA_USES_OFFSET //如果使用了offset来表示偏移的话,就是说是一个相对偏移的情况: static...
当接收一个包时,处理n层协议头的函数从其下层(n-1层)收到一个缓冲区,它的skb->data指向n层协议的头。处理n层协议的函数把本层的指针(例如,L3对应的是skb->nh指针)初始化为skb->data,因为这个指针(data指针)的值会在处理下一层协议时改变(skb->data将被初始化成缓冲区里的其他地址)。在处理n层协议的...
sk_buff->data_len 和len不同,data_len只计算分片中数据的长度 sk_buff->mac_len 这是mac头的长度 sk_buff->users 这是一个引用计数,用于计算有多少实体引用了这个sk_buff缓冲区。它的主要用途是防止释放sk_buff后,还有其他实体引用这个sk_buff。因此,每个引用这个缓冲区的实体都必须在适当的时候增加或减小这...
if(!data) gotonodata; /* * offsetof是一个编译器宏或者是自定义的宏,用于计算member在struct中的偏移量。 * 把在truesize前面的field全部清零。 */ memset(skb,0,offsetof(structsk_buff,truesize)); /* truesize是广义SKB的大小,包含了4个部分的长度:skb自身,header,page frags,frag list */ ...
data_len, mac_len, csum; __u32 priority; __u8 local_df:1, cloned:1, ip_summed:2, nohdr:1, nfctinfo:3; __u8 pkt_type:3, fclone:2, ipvs_property:1; __be16 protocol; void (*destructor)(struct sk_buff *skb); #ifdef CONFIG_NETFILTER ...
在协议栈的不同层,sk_buff的指针data指向这一层的网络报文的头部。同时,在sk_buff里,也有相关的数据结构来表示不同层头部信息。sk_buff和网络报文之间的关系如图所示: [图2.1 sk_buff与网络报文之间的关系] (注:控制结构sk_buff和网络报文的存储空间是从两个不同的缓存中分配的,所以它们在内存中不是连续存放...
unsigned int data_len 片段中数据大小 unsigned int mac_len mac 包头大小 atomic_t users 引用计数,使用这个 sk_buff 的使用者的数目,可能有多个函数要使用同一个 sk_buff 所以防止提前释放掉,设置此计数 unsigned int truesize 此缓冲区总大小,包括 sk_buff。sk_buff 只不过是个指针的集合,他所指的才是...
(CONFIG_VLAN_8021Q_MODULE) struct net_device *netoutdev; #endif unsigned int mask; unsigned long data[32 / sizeof(unsigned long)]; }; 三、sk_buff_head 结构体介绍 struct sk_buff_head { struct sk_buff * next; struct sk_buff * prev; _ _u32 qlen; spinlock_t lock; }; 1 成都...
;五、skb_shared_info结构体structskb_shared_info{atomic_tdataref;unsignedshortnr_frags;成都天融信网络安全技术有限责任公司宋国志07-08-233unsignedshortgso_size;unsignedshortgso_segs;unsignedshortgso_type;__be32ip6_frag_id;structsk_buff*frag_list;skb_frag_tfrags[MAX_SKB_FRAGS];};Dataref:引用计数...