我有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上没有收到字节。
答案 0 :(得分:0)
关于从B到A的ping操作。很可能DPDK应用程序不回答ARP请求。
要解决:请确保已使用arp -s
在主机B上添加了正确的静态ARP条目。
关于基本DPDK发送。它具有相同的源和目标MAC,这显然是错误的。
要解决:将正确的s_addr
和d_addr
分别放置在主机B和A上。