数据的发送
skb结构和分配
skb分配释放的频率非常高,用kmem_cache分配skb_buf的头部,alloc_skb分配其数据区,alloc_skb最终调用了_kmalloc分配连续物理内存,skb_buf结构体中重要成员:
head指向已分配空间的头部,end指向该空间尾部,data指向有效数据头部,tail指向有效数据尾部,当skb在各层流动时,head和end是不变的。
skb_put:向后移动tail来增加有效数据空间的大小,将skb->tail移动到新的位置 后,老的tail将作为返回值返回;
skb_push:将data前移来增大有效数据空间的大小,将移动后的skb->data返回;
skb_headroom:返回head和data之间的空间大小
skb_tailroom:返回tail和end的空间大小
skb_reserve:将有效数据空间向后移动len,相等于减少了tail空间,拓展了同样大小的head空间
alloc_skb是__alloc_skb的封装,它分配sk_buff