我写的代码使用PACKET_TX_RING环发送一个UDP包,我不明白这里所描述的示例代码: http://wiki.ipxwarzone.com/index.php5?title=Linux_packet_mmap#Kernel_PatchPACKET_MMAP数据偏移
在/ usr/src/linux目录/文件/网络/ packet_mmap.txt 说,框架结构是这样的:
/* 帧结构:
- 开始。帧必须对齐到TPACKET_ALIGNMENT = 16
- 结构tpacket_hdr
- 垫TPACKET_ALIGNMENT = 16
- 结构sockaddr_ll
- 峡,选择为使得分组数据(START + tp_net)对齐到 TPACKET_ALIGNMENT = 16
- 开始+ tp_mac:[可选MAC头]
- 开始+ tp_net:数据包数据,与TPACKET_ALIGNMENT = 16对齐。
垫。如果数据开始于开始+ tp_net,对准TPACKET_ALIGNMENT = 16
*/
然后为什么在示例substracts的sizeof代码(结构sockaddr_ll)代替求和它,这是行:
/* get data offset */
data_offset = TPACKET_HDRLEN - sizeof(struct sockaddr_ll);
printf("data offset = %d bytes\n", data_offset);
计算指针的分组数据后,将数据复制:
// fill data
off = ((void *) header) + (TPACKET_HDRLEN - sizeof(struct sockaddr_ll));
memcpy(off, pkt, pktlen);
Tis看起来像是我的数据损坏,套接字地址和可选的mac地址将被要覆盖的数据传输。在我的情况下,如果我使用这个代码,UDP数据包头将被覆盖,这是正确的吗?
在此先感谢