내가 PACKET_TX_RING 링을 사용하여 UDP 패킷을 전송하는 코드를 작성하고 오프셋, 나는 예제 코드는 여기에 설명을 이해하지 않습니다 http://wiki.ipxwarzone.com/index.php5?title=Linux_packet_mmap#Kernel_PatchPACKET_MMAP 데이터는
를/usr/src/linux/설명서/네트워킹/
/* 프레임 구조 :
- 시작 packet_mmap.txt 는 프레임 구조는이 것을 말한다. 프레임 = 16
- 구조체 tpacket_hdr
- 패드 TPACKET_ALIGNMENT 행 = 16
- 구조체 sockaddr_ll
- 갭, 즉 패킷 데이터 이동제 (+ tp_net 시작) TPACKET_ALIGNMENT에 정렬 = 16
- TPACKET_ALIGNMENT 정렬되어야 시작 + 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 패킷 헤더를 덮어 씁니다. 맞습니까?
미리 감사드립니다.