Я пытаюсь понять механизм пересылки базового примера DPDK. Может ли кто-нибудь помочь мне с инициализацией и редактированием полезной нагрузки rte_mbuf
? Here - класс. Я планирую использовать tcpdump
и для просмотра содержимого пакета.DPDK - rte_mbuf полезная нагрузка/инициализация данных или обновление/модификация
Вот rte_mbuf
Я хочу, чтобы добавить свой собственный полезную нагрузку:
struct rte_mbuf *bufs[BURST_SIZE];
Это rte_mbuf
принимается:
const uint16_t nb_rx = rte_eth_rx_burst(port, 0, bufs, BURST_SIZE);
Это rte_mbuf
передается:
const uint16_t nb_tx = rte_eth_tx_burst(port^1, 0,
bufs, nb_rx);
Я изменил образец приложения basicfwd.c в примерах DPDK печатать пересылаемые пакеты в файле:
/* Get burst of RX packets, from first port of pair. */
const uint16_t nb_rx = rte_eth_rx_burst(port, 0, bufs, BURST_SIZE);
FILE *fp;
fp = fopen("dump.txt", "a");
fprintf(fp, "\n-----------------------\n fprintf... %d<->%d\n", count, port);
rte_pktmbuf_dump(fp, bufs[0], 1000);
fclose(fp);
if (unlikely(nb_rx == 0))
continue;
/* Send burst of TX packets, to second port of pair. */
const uint16_t nb_tx = rte_eth_tx_burst(port^1, 0,bufs, nb_rx);
Эти пакеты, которые я вижу в выходном файле: Я хотел бы иметь возможность изменять содержимое для лучшего понимания. Я пробовал
rte_pktmbuf_init
и bufs->userdata =*(unsigned short*) 0xAAAAAAAA
, но это не работает для меня.
пользовательские данные не полезная нагрузка является частной областью для пользователя, чтобы использовать. полезная нагрузка равна mbuf-> buf_addr, она указывает на первый байт в реальном пакете. – roni