sk_buff->cb[48]这是一个“control buffer”,或者说是一个私有信息的存储空间,由每一层自己维护并使用。它在分配sk_buff结构时分配(它目前的大小是48字节,已经足够为每一 层存储必要的私有信息了)。在每一层中,访问这个变量的代码通常用宏实现以增强代码的可读性。例如,TCP用这个变量存储tcp_skb_cb结构。 下...
sk_buff->cb[48]这是一个“control buffer”,或者说是一个私有信息的存储空间,由每一层自己维护并使用。它在分配sk_buff结构时分配(它目前的大小是48字节,已经足够为每一 层存储必要的私有信息了)。在每一层中,访问这个变量的代码通常用宏实现以增强代码的可读性。例如,TCP用这个变量存储tcp_skb_cb结构。 下...
* @dev: Device we arrived on/are leaving by * @cb: Control buffer. Free for use by every layer. Put private vars here * @_skb_refdst: destination entry (with norefcount bit) * @sp: the security path, used for xfrm * @len: Length of actual data * @data_len: Data length * @...
在每层代码中通过宏进行访问。 // tcp定义结构体 include/net/tcp.hstructtcp_skb_cb{__u32seq;/* Starting sequence number */__u32end_seq;/* SEQ + FIN + SYN + datalen */__u8tcp_flags;/* TCP header flags. (tcp[13]) */...}// 定义宏访问#define TCP_SKB_CB(__skb) ((struct t...
sk_buff结构详解 struct sk_buff可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。这个结构被网络的不同层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。L4向L3传递前...
char cb[48] __aligned(8);//控制缓存,给每层使用,可以将私有变量放在此处。如果要跨越不同层,就需要调用skb_clone. unsigned long _skb_refdst;//目标入口(with norefcount bit) void (*destructor)(struct sk_buff *skb);// Destruct function #ifdef CONFIG_XFRM struct sec_path *sp;//安全路径,给...
它在分配sk_buff结构时分配(它目前的大小是40字节,已经足够为每一层存储必要的私有信息了)。在每一层中,访问这个变量的代码通常用宏实现,以增强代码的可读性。例如,TCP用这个变量存储tcp_skb_cb结构,这个结构在include/net/tcp.h中定义: 下面这个宏被TCP代码用来访问cb变量。在这个宏里面,有一个简单的类型转换...
char cb[40] 缓冲控制区,用来存储私有信息的空间。比如tcp用这个空间存储一个结构体tcp_skb_cb ,可以用宏TCP_SKB_CB(__skb)定位到他,然后使用里面的变量。 ip_summed:2 __wsum csum; 校验和 unsigned char pkt_type 根据L2层帧的目的地址进行类型划分。
它在分配sk_buff结构时分配(它目前的大小是40字节,已经足够为每一层存储必要的私有信息了)。在每一层中,访问这个变量的代码通常用宏实现,以增强代码的可读性。例如,TCP用这个变量存储tcp_skb_cb结构,这个结构在include/net/tcp.h中定义: 下面这个宏被TCP代码用来访问cb变量。在这个宏里面,有一个简单的类型转换...
charcb[48] __aligned(8);//控制缓存,给每层使用,可以将私有变量放在此处。如果要跨越不同层,就需要调用skb_clone. unsignedlong_skb_refdst;//目标入口(with norefcount bit) void(*destructor)(structsk_buff *skb);//Destruct function #ifdef CONFIG_XFRM ...