tcp_transmit_skb的作用是复制或者拷贝skb,构造skb中的tcp首部,并将调用网络层的发送函数发送skb;在发送前,首先需要克隆或者复制skb,因为在成功发送到网络设备之后,skb会释放,而tcp层不能真正的释放,是需要等到对该数据段的ack才可以释放;然后构造tcp首部和选项;最后调用网络层提供的发送回调函数发送skb,ip层的回调函...
7*/8structsk_buff *next;/*链表中的下一个skb*/9structsk_buff *prev;/*链表中的上一个skb*/1011union {12ktime_t tstamp;/*记录接受或者传输报文的时间戳*/13structskb_mstamp skb_mstamp;14};15};16structrb_node rbnode;/*红黑树,used in netem, ip4 defrag, and tcp stack*/17};1819union ...
初始定位skb_reserve(m) (3)、开始存储数据了,通过调用函数 skb_put() 来使 tail 指针向下移动空出空间来添加数据,此时 skb->data 和 skb->tail 之间存放的都是数据信息,无协议信息。 储存应用层数据skb_put() (4)、这时就开始调用函数 skb_push() 来使 data 指针向上移动,空出空间来添加各层协议信息,...
5. //记录收包时间,netdev_tstamp_prequeue为0,表示可能有包延迟 6. net_timestamp_check(!READ_ONCE(netdev_tstamp_prequeue), skb); 7. trace_netif_receive_skb(skb); //用于跟踪调试 8. orig_dev = skb->dev; //记录收包设备 9. /* 重置network_header字段 */ 10. skb_reset_network_header(...
__u32data_meta;__bpf_md_ptr(structbpf_flow_keys *, flow_keys);__u64tstamp;__u32wire_len;__u32gso_segs;__bpf_md_ptr(structbpf_sock *, sk);__u32gso_size;__u32:32; /* Padding, future use. */__u64hwtstamp;}; ...
tcp_transmit_skb的作用是复制或者拷贝skb,构造skb中的tcp首部,并将调用网络层的发送函数发送skb;在发送前,首先需要克隆或者复制skb,因为在成功发送到网络设备之后,skb会释放,而tcp层不能真正的释放,是需要等到对该数据段的ack才可以释放;然后构造tcp首部和选项;最后调用网络层提供的发送回调函数发送skb,ip层的回调函...
tcp_transmit_skb的作用是复制或者拷贝skb,构造skb中的tcp首部,并将调用网络层的发送函数发送skb;在发送前,首先需要克隆或者复制skb,因为在成功发送到网络设备之后,skb会释放,而tcp层不能真正的释放,是需要等到对该数据段的ack才可以释放;然后构造tcp首部和选项;最后调用网络层提供的发送回调函数发送skb,ip层的回调函...