ktime_t tstamp;#elseunion { ktime_t tstamp;structskb_mstamp skb_mstamp; };#endifstructsock *sk;structnet_device *dev;/** This is the control buffer. It is free to use for every * layer. Please put your private variables there. If you * want to keep them across layers you have ...
39 struct timeval tstamp ; //用于存放接受的数据包的到达时间; 40 41 __u8 local_df : 1 , //allow local fragmentaion; 42 cloned : 1 , // head may be cloned 43 ; 44 45 __u8 pkt_type : 3 , //数据包的类型; 46 fclone : 2, // struct sk_buff clone status 47 48 } 1. 2. ...
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 ...
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_skb_pcount(skb));15tp =tcp_sk(sk);1617/*需要克隆*/18if(clone_it) {19skb_mstamp_get(&skb->skb_mstamp);20TCP_SKB_CB(skb)->tx.in_flight = TCP_SKB_CB(skb)->end_seq21- tp->snd_una;22tcp_rate_skb_sent(sk, skb);2324/*如果skb已经是被克隆过的,那么只能复制*/25if(...
tcp_skb_pcount(skb));15tp =tcp_sk(sk);1617/*需要克隆*/18if(clone_it) {19skb_mstamp_get(&skb->skb_mstamp);20TCP_SKB_CB(skb)->tx.in_flight = TCP_SKB_CB(skb)->end_seq21- tp->snd_una;22tcp_rate_skb_sent(sk, skb);2324/*如果skb已经是被克隆过的,那么只能复制*/25if(...