如果sk_type为SOCK_RAW,则进入行2230,表示需要自行构造MAC首部。行2231到行2233,首先计算netoff,大小为TPACKET_ALIGN(tp_hdrlen +(maclen < 16 ?16 : maclen)) + tp_reserve。行2234到行2237,如果设置了PACKET_VNET_HDR选项,还需加上一个virtio_net_hdr结构体的大小,然后设置do_vnet为真。行2238,计算mac...
如果通过setsockopt系统调用使能了PACKET_VNET_HDR选项,还有一个virtio_net_hdr结构,如下数据帧空间buffer中一个数据包相关的所有信息块如下: 目前TPACKET_HEADER有三个版本,每个版本的长度略有不同,用户层可使用setsockopt(PACKET_VERSION)设置需要的版本,另外也可通过getsockopt(PACKET_HDRLEN)获取到每个版本对应的头部长...
在vpp源码src/scripts/vnet路径下存放很多模块的脚本,都是使用packet genertor工具实现自发包。pg工具应该是vpp单元测试框架重要的一个组件,用来构造流量。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 root@jinsh:/home/jinsh/workspace/vpp-master/src/scripts/vnet# ls arp4 ipsec lfib nat64_static tcp...
(&po->rx_ring)->max_frame_len; vnet_hdr_sz = 0; } } spin_lock(&sk->sk_receive_queue.lock); h.raw = packet_current_rx_frame(po, skb, TP_STATUS_KERNEL, (macoff+snaplen)); if (!h.raw) goto drop_n_account; if (po->tp_version <= TPACKET_V2) { slot_id = po->...
其中类型为数据报套接字(用于UDP)时两者的值都为数据包头部长度+16,否则将netoff赋值为数据包头部长度+16和maclen中较大的一个,在po->has_vnet_hdr存在(即存在虚拟网络,如NAT等)时加上其大小,再将macoff赋值为netoff减去mac头部的值(即减去数据链路层头部)。这里计算netlen时,可能出现传入的长度异常而导致...
unsigned long status = TP_STATUS_USER; unsigned short macoff, hdrlen; unsigned int netoff; struct sk_buff *copy_skb = NULL; struct timespec64 ts; __u32 ts_status; unsigned int slot_id = 0; int vnet_hdr_sz = 0; /* struct tpacket{2,3}_hdr is aligned to a multiple o...
其中类型为数据报套接字(用于UDP)时两者的值都为数据包头部长度+16,否则将netoff赋值为数据包头部长度+16和maclen中较大的一个,在po->has_vnet_hdr存在(即存在虚拟网络,如NAT等)时加上其大小,再将macoff赋值为netoff减去mac头部的值(即减去数据链路层头部)。这里计算netlen时,可能出现传入的长度异常而导致...
其中类型为数据报套接字(用于UDP)时两者的值都为数据包头部长度+16,否则将netoff赋值为数据包头部长度+16和maclen中较大的一个,在po->has_vnet_hdr存在(即存在虚拟网络,如NAT等)时加上其大小,再将macoff赋值为netoff减去mac头部的值(即减去数据链路层头部)。这里计算netlen时,可能出现传入的长度异常而导致...
如图7所示,如果包中设置了PACKET_VNET_HDR ,就会加入sizeof(struct virtio_net_hdr) 。最后,以太网header的偏移量会计算会保存到macoff中。 如图8所示, virtio_net_hdr结构会用 virtio_net_hdr_from_skb函数下入ring缓存中。h.raw 指向ring 缓存中当前空闲的帧。
net/packet: convert po->has_vnet_hdr to an atomic flag Eric Dumazet authored and davem330 committedMar 17, 2023 50d935e net/packet: convert po->tp_loss to an atomic flag Eric Dumazet authored and davem330 committedMar 17, 2023