在每一层中,访问这个变量的代码通常用宏实现,以增强代码的可读性。例如,TCP用这个变量存储tcp_skb_cb结构,这个结构在include/net/tcp.h中定义: 下面这个宏被TCP代码用来访问cb变量。在这个宏里面,有一个简单的类型转换: #define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0])) 下面...
char cb[40] 缓冲控制区,用来存储私有信息的空间。比如tcp用这个空间存储一个结构体tcp_skb_cb ,可以用宏TCP_SKB_CB(__skb)定位到他,然后使用里面的变量。 ip_summed:2 __wsum csum; 校验和 unsigned char pkt_type 根据L2层帧的目的地址进行类型划分。 unsigned char cloned 表示该结构是另一个sk_buff克...
TCP_SKB_CB(skb)->when = 0; TCP_SKB_CB(skb)->flags = skb->nh.iph->tos; TCP_SKB_CB(skb)->sacked = 0; ... ... ... } 如果想要了解cb中的参数是如何被取出的,可以查看net/ipv4/tcp_output.c中的tcp_transmit_skb函数。这个函数被TCP用于向IP层发送一个分段。 unsigned intcsum unsigned ...
据说比较复杂。 char cb[40] 缓冲控制区,用来存储私有信息的空间。比如tcp用这个空间存储一个结构体tcp_skb_cb ,可以用宏TCP_SKB_CB(__skb)定位到他,然后使用里面的变量。 ip_summed:2 __wsum csum; 校验和 unsigned char pkt_type 根据L2层帧的目的地址进行类型划分。 unsigned char cloned 表示该结构是另...
缓冲控制区,用来存储私有信息的空间。比如tcp用这个空间存储一个结构体tcp_skb_cb ,可以用宏TCP_SKB_CB(__skb)定位到他,然后使用里面的变量。 ip_summed:2 __wsum csum; 校验和 unsigned char pkt_type 根据L2层帧的目的地址进行类型划分。 unsigned char cloned ...
对于数据包处理,sk_buff 包含一个 dst_entry 字段,用于路由子系统使用。此外,cb 字段用于存储私有信息,由各层维护以供内部使用。在接收数据包时,数据结构的某些字段如 csum、ip_summed、cloned 和 pkt_type 被设置,用于表示校验和、数据包的安全级别、是否为克隆结构以及帧的类型等。内核提供了...
sk_buff->cb[48]这是一个“control buffer”,或者说是一个私有信息的存储空间,由每一层自己维护并使用。它在分配sk_buff结构时分配(它目前的大小是48字节,已经足够为每一 层存储必要的私有信息了)。在每一层中,访问这个变量的代码通常用宏实现以增强代码的可读性。例如,TCP用这个变量存储tcp_skb_cb结构。 下...
它在分配sk_buff结构时分配(它目前的大小是40字节,已经足够为每一层存储必要的私有信息了)。在每一层中,访问这个变量的代码通常用宏实现,以增强代码的可读性。例如,TCP用这个变量存储tcp_skb_cb结构,这个结构在include/net/tcp.h中定义: 下面这个宏被TCP代码用来访问cb变量。在这个宏里面,有一个简单的类型转换...
sk_buff->cb[48] 这是一个“control buffer”,或者说是一个私有信息的存储空间,由每一层自己维护并使用。它在分配sk_buff结构时分配(它目前的大小是48字节,已经足够为每一 层存储必要的私有信息了)。在每一层中,访问这个变量的代码通常用宏实现以增强代码的可读性。例如,TCP用这个变量存储tcp_skb_cb结构。
cb:用于控制缓冲区。每个层都可以使用此指针,将私有的数据放置于此。len:有效数据长度。data_len:数据长度。mac_len:连接层头部长度,对于以太网,指MAC地址所用的长度,为6。hdr_len:skb的可写头部长度。csum:校验和(包含开始和偏移)。csum_start:当开始计算校验和时从skb->head的偏移。csum_offset:从...