{structsk_buff *n;///n为skb紧跟着那块内存,这里如果skb是通过skb_fclone分配的,那么n就是一个skb。n = skb +1;///skb和n的fclone都要符合要求,可以看到这里的值就是我们在__alloc_skb中设置的值。if(skb->fclone == SKB_FCLONE_ORIG &&n->fclone ==SKB_FCLONE_UNAVAILABLE) {///到这里,就说明...
unsigned char *skb_push( struct sk_buff *skb , unsigned int len ) { skb->data -= len ; skb->len += len ; if ( unlikely(skb->data < skb->head ) ) skb_under_panic(skb , len , __builtin_return_address(0)) ; return skb->data ; } /** * skb_pull - remove data from t...
data指针在数据包头部封装和解封装的过程中移动,指向各层的协议头,skb_push函数将data的指向,向低地址移动(向上),完成协议头空间的占据,skb_pull函数将data的指向,向高地址移动(向下),完成协议头的解封装。 tail指针在增加应用层用户缓冲数据时移动,skb_put函数将该指针向高地址移动(向上),完成用户数据空间的占据。
skb_clear_delivery_time(skb); __skb_pull(skb,skb_network_header_len(skb)); rcu_read_lock; ip_protocol_deliver_rcu(net,skb,ip_hdr(skb)->protocol); rcu_read_unlock; return0; } voidip_protocol_deliver_rcu(structnet*net,structsk_buff*skb,intprotocol) { ... ret=INDIRECT_CALL_2(ippro...
unsigned char *skb_pull (struct sk_buff * skb, unsigned int len) skb为要使用的缓冲区,len为要删除的数据长度 这个函数从链表开始处删除数据,把腾出的内存归还给首部空间。把指向下一个缓冲区的指针返回。 skb_headroom 缓冲区首部空闲空间的字节数 int skb_headroom(const struct sk_buff * skb) skb为...
51CTO博客已为您找到关于linux skb 介绍的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及linux skb 介绍问答内容。更多linux skb 介绍相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。
skb->end = skb->tail + size; } 其中skb_reset_tail_pointer(skb): staticinlinevoidskb_reset_tail_pointer(struct sk_buff *skb) { skb->tail = skb->data; } 最终四大指针初始化为以下图所示: 此时head、data、tail三个指针指向一起,end指向数据缓冲区的尾部。
hci_acl_data_packet从套接字缓冲取出HCI数据包头中的连接句柄,该句柄作为哈希值查找到到hci连接信息conn。flags为从HCI头部提取出的PB和BC的值,用于判断L2CAP分组的位置。调用skb_pull函数将套接字缓冲的data指针指向L2CAP数据包头。接下来调用l2cap_recv_...
/*在数据区的前端添加某协议的头部*/staticinline unsignedchar*__skb_push(structsk_buff *skb, unsignedintlen) { skb->data -=len; skb->len +=len;returnskb->data; } 如下图所示:data指针减少n (3)再看看pull函数:把data指针增加n,相当于弹出数据!
unsigned char * skb_pull(struct sk_buff *skb, unsigned int len) 将data指针下移,并减小skb的 len值。这个操作使data指针指向下一层网络报文的头部。 void skb_reserve(struct sk_buff *skb, unsigned int len) 将data指针和tail指针同时下移。这个操作在存储空间的头部预留 len长度的空隙。