DPDK以太网部分代码整理

本文详细介绍了DPDK以太网部分的代码整理,包括收包内存池创建、设备端口初始化、队列配置、启动与停止设备、收发数据的流程。在初始化时,配置设备和队列,运行时通过rte_eth_tx_burst和rte_eth_rx_burst进行数据传输。文章还探讨了如何处理设备的VLAN配置、TM流量管理以及调试技巧,提供了DPDK收发包的完整流程和关键操作步骤。
摘要由CSDN通过智能技术生成

总体流程如图所示,初始化时配置设备和队列,运行时通过rte_eth_tx_burst和rte_eth_rx_burst来收发包。

收包内存池创建

rte_pktmbuf_pool_create(pool_name, num, cache_size, priv_size, data_room_size, socket_id);

  1. num是pool里block个数

  2. cache_size是一些lcore的指针,指向本mempool里的buffer,注意每个lcore都会reserve这么多指针,其它buffer就没法访问这些block了。

  3. priv_size是预留的内部空间,比如可以作为一些custom header的存储位置。

  4. data_room_size是实际payload size + RTE_PKTMBUF_HEADROOM

  5. socket_id可以是0,如果只有1个socket。也可以是任意的,比如SOCKET_ID_ANY,也就是-1。主要涉及到不同的NUMA,会用到不同的DMA。

  6. 有些驱动比如ice的一些驱动,不支持iova=va的模式,因为PMD需要大块的连续物理内存。

  7. 收包DMA会搬运到事先分配好的收包内存池。注意发包内存池不需要给驱动额外创建,rte_eth_tx_burst前的buffer已经分配好了。

设备端口初始化

  1. rte_eth_dev_count_avail()
    看有几个eth port,就是几个eth设备,包括所有PF和VF的数量。

  2. rte_eth_dev_info_get(port, &dev_info);
    看当前port支持哪些功能,比如最大的rx queue和tx queue数量。

  3. rte_eth_dev_configure(port, n_rx_q, n_tx_q + n_free_tx_q, &port_conf)
    配置port有几个tx和rx的队列。

  4. rte_eth_dev_set_vlan_offload(port_id, vlan_offload)
    先获得当前的VLAN offload配置。rte_eth_dev_get_vlan_offload(port_id),再配置vlan offload配置。rte_eth_dev_get_vlan_offload

  5. rte_eth_dev_vlan_filter(port_id, vlan_id, 1)
    给port_id和vlan_id配置offload,1表示使能,也就是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值