req.tp_block_size=96;
req.tp_frame_size=96;
req.tp_block_nr=2;
req.tp_frame_nr=2;
if ( (setsockopt(fd,
SOL_PACKET,
PACKET_RX_RING,
(char *)&req,
sizeof(req))) != 0 ) {
perror("setsockopt()");
close(fd);
return 1;
};
/* mmap() the sucker */
map=mmap(NULL,
req.tp_block_size * req.tp_block_nr,
PROT_READ|PROT_WRITE|PROT_EXEC, MAP_SHARED, fd, 0);
, если минимальный размер кадра равен 64, является последним 4 октетом. СУММЫ. устанавливается операционной системой? если я установлю размер кадра равным 60 без места crc, может ли он быть успешно передан между маршрутизатором и коммутатором cisco? option: PACKET_TX_RING
Пример tp_block_size = 4096 // Минимальный размер непрерывного блока tp_frame_size = 2048 // Размер кадра tp_block_nr = 4 // Количество блоков tp_frame_nr = 8 // Общее количество блоков кадров, с резервированием
4096/2048 = 2, 2 * 4 = 8
каков размер tpacket_hdr? это 32 байта размером tpacket_hdr + frame с размером 64
, каков минимальный размер tp_frame_size? это = 32 + 64 = 96
tp_block_size = 96 tp_frame_size = 96 tp_block_nr = 2 tp_frame_nr = 2
96/96 = 1, 1 * 2 = 2
, если количество блоков меньше, может ли оно иметь лучшую производительность? или больше блоков лучше?
, если каждый кадр всего 64, и отправлять немедленно, когда msg ret = sendto (sock, buffer, pkt_index-> pktlen, MSG_DONTWAIT, (struct sockaddr *) (void *) в , sizeof (struct sockaddr_in));