DPDK NIC没有从另一端接收任何数据

时间:2019-07-30 13:51:04

标签: dpdk

我有PC A通过以太网电缆连接到PCB。 来自PC A的一个NIC已绑定到DPDK。

EAL: Detected 4 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Probing VFIO support...
EAL: PCI device 0000:00:1f.6 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 8086:15d8 net_e1000_em

并且正在rte_eth_rx_burst中等待/轮询

我想从PC B发送一些东西(只是ping)。

我已经为PC B设置了IP,并尝试从该接口子网ping通另一个IP。 另外,我也尝试将PC B接口也配置为DPDK,并使用了基本的发送应用程序,但仍然没有执行任何操作:

if (port_init(mbuf_pool) != 0) {
                    rte_exit(EXIT_FAILURE, "Cannot init port %"PRIu8 "\n", 0);
    }
    struct Message {
            char data[10];
    };
    struct ether_hdr *eth_hdr;
    struct Message obj = {{'H','e','l','l','o','2','0','1','8'}};
    struct Message *msg;

    struct ether_addr s_addr = {{0x94,0xC6,0x91,0x14,0xAB,0xDD}};
    struct ether_addr d_addr = {{0x94,0xC6,0x91,0x14,0xAB,0xDD}};
    uint16_t ether_type = 0x0a00;

    struct rte_mbuf * pkt[BURST_SIZE];
    int i;
    for(i=0;i<BURST_SIZE;i++) {
            pkt[i] = rte_pktmbuf_alloc(mbuf_pool);
            eth_hdr = rte_pktmbuf_mtod(pkt[i],struct ether_hdr*);
            eth_hdr->d_addr = d_addr;
            eth_hdr->s_addr = s_addr;
            eth_hdr->ether_type = ether_type;
            msg = (struct Message*) (rte_pktmbuf_mtod(pkt[i],char*) + 
sizeof(struct ether_hdr));
            *msg = obj;
            int pkt_size = sizeof(struct Message) + sizeof(struct 
ether_hdr);
            pkt[i]->data_len = pkt_size;
            pkt[i]->pkt_len = pkt_size;
    }

    uint16_t nb_tx = rte_eth_tx_burst(0,0,pkt,BURST_SIZE);

我的DPDK NIC上没有收到字节。

1 个答案:

答案 0 :(得分:0)

  1. 关于从B到A的ping操作。很可能DPDK应用程序不回答ARP请求。

    要解决:请确保已使用arp -s在主机B上添加了正确的静态ARP条目。

  2. 关于基本DPDK发送。它具有相同的源和目标MAC,这显然是错误的。

    要解决:将正确的s_addrd_addr分别放置在主机B和A上。