关于DPDK收包之后的问题

关于DPDK收包之后的问题

DPDK17.11.6

按照网上的流程配置好了收包的相关程序,也成功绑定了一张网卡,因为实在公司内部用的虚拟机,所以只绑定了一张网卡,然后在模拟收包的时候,师傅成功的将一个包发出,现在问题是我怎么查看我的网卡是否收到了这个包,然后这个包被存放在了哪里?谢谢各位大佬。

附上我收包程序的配置:https://baijiahao.baidu.com/s?id=1632832701247693547&wfr=spider&for=pc

我是按照这个网页来配置的。

### 使用DPDK进行发包和接操作 #### 发送数据 为了通过DPDK发送数据,通常会遵循一系列特定的操作流程。首先需要初始化环境抽象层(EAL),这是DPDK应用程序启动的基础[^3]。之后,设置必要的网络接口并分配内存池用于存储待发送的数据。 ```c // 初始化EAL参数配置 int main(int argc, char **argv) { int ret; struct rte_mempool *mbuf_pool; // 初始化EAL ret = rte_eal_init(argc, argv); if (ret < 0) rte_exit(EXIT_FAILURE, "Error with EAL initialization\n"); mbuf_pool = rte_pktmbuf_pool_create("MBUF_POOL", NB_MBUF, MEMPOOL_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, SOCKET_ID_ANY); ... } ``` 接着构建mempool来容纳多个预分配的缓冲区对象,这些对象用来封装实际传输中的数据帧。当准备就绪后,可以调用`rte_eth_tx_burst()`函数批量提交一批已填充好的数据给指定口发出[^1]。 ```c static inline void send_packets(struct rte_mbuf **pkts, unsigned nb_pkts, uint8_t port_id){ uint16_t sent_num = rte_eth_tx_burst(port_id, QUEUE_IDX, pkts, nb_pkts); printf("Sent %d packets on port %u\n", sent_num, port_id); for(uint16_t i=sent_num;i<nb_pkts;++i){ rte_pktmbuf_free(pkts[i]); } } ``` #### 接数据 对于接部分,则依赖于轮询模式下的输入队列读取机制而非中断触发方式。这意味着程序主动查询是否有新的到达报文等待处理而不是被动响应硬件事件通知。具体来说就是利用`rte_eth_rx_burst()`方法从选定的物理网卡获取一组或多组刚抵达的消息实例。 ```c struct rte_mbuf *rx_pkts[BURST_SIZE]; uint16_t num_rx = rte_eth_rx_burst(port_id, queue_idx, rx_pkts, BURST_SIZE); if(num_rx != 0){ process_received_packets(rx_pkts, num_rx); // 自定义处理逻辑 } for(i=0; i<num_rx; ++i){ rte_pktmbuf_free(rx_pkts[i]); // 处理完成后释放资源 } ``` 上述过程展示了基本框架下如何运用DPDK库完成高效的数据交换任务。值得注意的是,在真实应用场景里还需要考虑诸如错误检测、性能优化等因素以确保系统的稳定性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值