sk_buff_data_t transport_header; //L4 sk_buff_data_t network_header; //L3 sk_buff_data_t mac_header; //L2 这些指针分别指向报文头部,和2.4版本比较有了变化,不再是联合体,使用更加方便了,Linux给出了很方便的函数直接定位到各层的头部。下图是2.4版本的,只是说明一下。 struct dst_entry dst 路由...
skb_buff的封装skb结构主要成员struct sk_buff { __u16 transport_header;/* 传输层header相对于skb->head的偏移 */ __u16 network_header;/* 网络层header相对于skb→head的偏移 */ … WirelessHuang sk_buff封装和解封装网络数据包的过程详解 一.概述sk_buff结构体是Linux网络协议栈的核心中的核心,几乎...
__be16 protocol;//协议类型__u16 transport_header;//传输层头部__u16 network_header;//网络层头部__u16 mac_header;//链路层头部/*private:*/__u32 headers_end[0];/*public:*//*These elements must be at the end, see alloc_skb() for details. sk_buff_data_t就是unsigned char **/sk_bu...
sk_buff定义如下: /*** struct sk_buff - socket buffer* @next: Next buffer in list* @prev: Previous buffer in list* @sk: Socket we are owned by* @tstamp: Time we arrived* @dev: Device we arrived on/are leaving by* @transport_header: Transport layer header* @network_header: Network...
sk_buff_data_t network_header; //L3 sk_buff_data_t mac_header; //L2 这些指针分别指向报文头部,和2.4版本比较有了变化,不再是联合体,使用更加方便了,Linux给出了很方便的函数直接定位到各层的头部。下图是2.4版本的,只是说明一下。 struct dst_entry dst ...
__u16 network_header;//网络层头 __u16 mac_header;//链路层头 /* private: */ __u32 headers_end[0]; /* public: */ /* These elements must be at the end, see alloc_skb() for details. */ sk_buff_data_t tail;//尾指针
head:header缓冲区的头指针。 data:目前处理的header的头指针,data介于head和tail之间。 tail:有效header的尾指针。 end:header缓冲区的尾指针,同时也是shinfo的指针。 transport_header:transport header的指针 network_header:network header的指针 mac_header:mac header的指针 ...
skb->network_header skb->mac_header 这些是指向TCP/IP各层协议头的指针:transport_header指向L4(传输层),network_header指向L3(网络层),mac_header指向L2(数据链路层)。每个指针的类型都是一个联合, 包含多个数据结构,每一个数据结构都表示内核在这一层可以解析的协议。例如,transport_header是一个包含内核所能...
skb_reset_network_header(skb); /* 构造以太头 */ p = skb_push(skb, sizeof(struct ethhdr)); ethhdr = (struct ethhdr*)p; // 填充ethhdr字段,略 skb_reset_mac_header(skb); /* 发射 */ dev_queue_xmit(skb); 解封装的过程和封装的过程相反,解封装的过程是协议栈栈帧逐层pop的过程,但是Linux...
transport_header:传输层头部。network_header:网络层头部。mac_header:链接层头部。cb:用于控制缓冲区。每个层都可以使用此指针,将私有的数据放置于此。len:有效数据长度。data_len:数据长度。mac_len:连接层头部长度,对于以太网,指MAC地址所用的长度,为6。hdr_len:skb的可写头部长度。csum:校验和(包含...