**2 unsigned charskb_push(struct sk_buffskb, unsigned int len) 在缓冲区的头部空间扩充len字节的数据区。将data指针上移,并增加skb的len值。这个操作在存储空间的头部增加了一段可以存储网络报文的空间,但是增加不能使data的值小于 head的值,skb的len值大于truesize的值。 *3 unsigned char * skb_pull(st...
这个计数器只保护sk_buff结构本身,而缓冲区的数据部分由类似的计数器(dataref)来保护.有时可以用atomic_inc和atomic_dec函数来直接增加或减小users,但是,通常还是使用函数skb_get和kfree_skb来操作这个变量。 sk_buff->truesize 这是缓冲区的总长度,包括sk_buff结构和数据部分。如果申请一个len字节的缓冲区,alloc...
skb->len += len;// 数据长度增加 if (unlikely(skb->data<skb->head))// data指针超过head那么就是处理错误~ skb_under_panic(skb, len, current_text_addr()); return skb->data; } 和skb_put对应,上面试操作用户数据的,这里是操作协议头的!其实就是data指针向上移动而已~注意len增大了哦~前面说了...
如果sk_buff只在转发中使用(这意味着,源地址和目的地址都不是本机地址),这个指针是NULLsk_buff-len表示当前协议数据包的长度。它包括主缓冲区中的数据长度(data指针指向它)和分片中的数据长度。sk 5、_buff-data_len和len不同,data_len只计算分片中数据的长度sk_buff-mac_len这是mac头的长度sk_buff-users这...
17、 NET_SKBUFF_DATA_USES_OFFSET */1、TCP层获取相关偏移的函数static inline struct tcphdr *tcp_hdr(const struct sk_buff *skb) return (struct tcphdr *)skb_transport_header(skb);这个函数用来获得sk_buff结构中TCP头的指针static inline unsigned int tcp_hdrlen(const struct sk_buff *skb) return...
缓冲区总长度:包括skb描述符和数据缓存区部分。alloc_skb会将此值初始化为len+sizeof(sk_buff)。 unsigned int truesize; 缓冲区边界指针:head、data、tail、end四个是数据缓冲区的边界指针,其中head指向缓冲区的头部,end指向缓冲区尾部,而data则指向数据的头部,即head-协议头部,tail指向数据尾部。数据缓存区后面...
data_len, //SG类型和FRAGLIST类型聚合分散I/O存储区中的数据长度 mac_len; //数据链路层首部长度 union { __wsum csum; //校验状态为CHECKSUM_NONE时,存放所负载数据报的数据部分校验和 __u32 csum_offset; //校验状态为CHECKSUM_PARTIAL时,记录传输层首部中的校验和字段的偏移 ...
unsigned char *skb_put(struct sk_buff *skb, unsigned int len) 将tail指针下移,并增加skb的len值。data和tail之间的空间就是可以存放网络报文的空间。这个操作增加了可以存储网络报文的空间,但是增加不能使tail的值大于end的值,skb的len值大于truesize的值。 unsigned char *skb_push(struct sk_buff *skb,...
sk_buff->data_len 和len不同,data_len只计算分片中数据的长度 sk_buff->mac_len 这是mac头的长度 sk_buff->users 这是一个引用计数,用于计算有多少实体引用了这个sk_buff缓冲区。它的主要用途是防止释放sk_buff后,还有其他实体引用这个sk_buff。 因 9、此,每个引用这个缓冲区的实体都必须在适当的时候增加...
网络安全技术有限责任公司 宋国志 07-08-23 static int arp_process(struct sk_buff *skb) { …… if (NEIGH_CB(skb)-flags LOCALLY_ENQUEUED || ……) …… } len,data_len, mac_len unsigned int len, data_len, mac_len len :实际的数据长度; data_len :数据的长度; mac_len :第二层...