skb_put() advances 'skb->tail' by the specified number of bytes, it alsoincrements 'skb->len' by that number of bytes as well. This routine must notbe called on a SKB that has any paged data. You must also be sure that there isenough tail room in the SKB for the amount of byte...
skb head/data/tail/end/介绍 This first diagram illustrates the layout of the SKB data area and where in that area the various pointers in 'structsk_buff' point. The rest of this page will walk through what the SKB data ar...查看原文...
skb_put: 向数据有效区加协议尾 staticinlineunsignedchar*skb_put(structsk_buff *skb,unsignedintlen){unsignedchar*tmp = skb->tail;SKB_LINEAR_ASSERT(skb); skb->tail += len; skb->len += len;if(unlikely(skb->tail>skb->end))skb_over_panic(skb, len,current_text_addr());returntmp; } s...
*/sk_buff_data_ttail;/* 偏移位置: 指向当前数据的尾部,随数据的添加、移除而改变 */sk_buff_data_tend;/* 偏移位置: 可用数据空间的尾部。end 后还跟有 skb_shared_info */unsignedchar*head,/* 数据指针: 指向可用数据空间数据头部 */*data;/* 数据指针: 指向当前数据开始位置 */unsignedinttruesize...
首先,skb由几个关键部分构成:Head/End、Data/Tail以及数据缓冲区。在TX过程中,用户空间应用通过socket发送数据,经内核处理后,通过alloc_skb分配新的skb,并填充数据。在RX,网卡通过DMA接收数据,驱动通过dev_alloc_skb请求skb,然后填充数据并传递给TCP/IP Stack,这里dev_alloc_skb在接收时通常效率较低。 skb的核心数...
sk_buff结构的成员skb->head指向一个已分配的空间的头部,即申请到的整个缓冲区的头,skb->end指向该空间的尾部,这两个成员指针从空间创建之后,就不能被修改。skb->data指向分配空间中数据的头部,skb->tail指向数据的尾部,这两个值随着网络数据在各层之间的传递、修改,会被不断改动。刚开始接触skb_buf的时候会...
sk_buff结构的成员skb->head指向一个已分配的空间的头部,即申请到的整个缓冲区的头,skb->end指向该空间的尾部,这两个成员指针从空间创建之后,就不能被修改。skb->data指向分配空间中数据的头部,skb->tail指向数据的尾部,这两个值随着网络数据在各层之间的传递、修改,会被不断改动。刚开始接触skb_buf的时候会...
int expand = (skb->tail + skb->data_len) - skb->end; //如果此skb被共享 if (skb_shared(skb)) BUG();//产生BUG oops //还需要的内存大小 if (expand <= 0) expand = 0; //新申请的skb的大小 size = skb->end - skb->head + expand; ...
tail:指向对应当前协议层有效数据负载的结尾地址,与data对应。 end:指向内存分配的数据缓冲区的结尾地址,与head指针对应。和head一样,sk_buff和相关数据块被分配后,end指针也就固定了 3,skb_buff的操作 Skb操作 1, skb_queue_empty检查队列是否为空
对于刚刚通过alloc_skb() 方法申请出来的skb,head,tail,data 三个指针都指向同一位置,而tail 和end 之间有一段根据alloc_skb(len, flag) 方法的参数申请出来的空间。 为了给协议头预留空间,可以使用skb_reserve(skb, head_len)方法,该方法会根据参数将data 指针后移,扩展headroom. ...