深入理解Linux内核网络技术内幕之关键数据结构--skbuff

1、skb->users与skb->dataref的区别

skb->users:当引用数目增加时,该值和skb->dataref都会增加

skb->dataref:当skb被clone时,只有skb->dataref会增加,而被clone的skb的skb->users=1

2、pskb->copy与skb->copy

pskb->copy:只拷贝skb数据结构,不拷贝缓冲区内容

skb->copy:拷贝skb数据结构也会拷贝缓冲区内容

3、skb的操作函数:reverse,put,push,pull,实际上只是修改了指针,并未真正的添加或者删除数据

put:移动skb->tail,skb->tail+n,一般作用是添加数据

reverse:这个函数移动了skb->data和skb->tail指针,主要的作用是强制对齐,经常在分配完skb后会立刻被调用

push:移动skb->data指针,skb->data-n,一般作用是添加协议首部

pull:移动skb->data指针,skb->data+n,一般作用是删除协议首部

4、skb的链表操作函数

skb_queue_head_init:初始化双向链表

skb_queue_head,skb_queue_tail:把缓冲区分别添加到队列的头和尾

skb_dequeue,skb_dequeue_tail:把一个元素从队列的首部或者尾部删除

skb_queue_purge:把队列变为空队列

skb_queue_walk:依次循环运行队列中的每个元素

相关推荐