1
DPDKの基本的な例の転送メカニズムを理解しようとしています。誰でもrte_mbuf
のペイロードの初期化と編集を手伝ってもらえますか? Hereがクラスです。 tcpdump
とを使用して、パケットの内容を表示する予定です。DPDK - rte_mbufペイロード/データの初期化または更新/変更
は、私は私自身のペイロードを追加したいrte_mbuf
です:これは受信されrte_mbuf
ある
struct rte_mbuf *bufs[BURST_SIZE];
:
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);
を
サンプルアプリケーションを変更しましたファイルに転送されたパケットを印刷する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