我寫的代碼使用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數據包頭將被覆蓋,這是正確的嗎?
在此先感謝