. /* 千兆:tx_pkt_burst 默认发包函数为 eth_igb_xmit_pkts */ +~> eth_igb_xmit_pkts . . /* 万兆:tx_pkt_burst 默认发包函数为 ixgbe_xmit_pkts */ +~> ixgbe_xmit_pkts 5.1. rte_eth_rx_burst 函数 rte_eth_rx_burst 函数 用于收包。在 最后会采用对应以太网设备的收包函数来实现。收包函...
收包函数:i40e_recv_scattered_pkts 发包函数:i40e_xmit_pkts_vec 结合队列信息中 rx_buf_len 的值为 2048,而 max_rx_pkt_len 为 9728,此时会使用 multisegs 模式来收包。阅读代码确定只有 i40e_xmit_pkts 发包函数支持 multisegs 模式,i40e_xmit_pkts_vec 发包函数不支持 multisegs,这两个收发包函数...
在rte_eth_dev_init 函数中,不同的驱动会触发 eth_dev_init 回调函数,为 struct rte_eth_dev 中的 rx_pkt_burst 的函数指针,设置了默认的收包实现函数。 但是到了 rte_eth_dev_start 函数中,会对 rx_pkt_burst 进一步选择不同的 收包实现函数。 4.1.1.1. 千兆以太网设备 rx_pkt_burst 收包实现函数的...
2.3.1.1.1.1. `pci_uio_map_resource’ 函数 pci_uio_map_resource' 函数,会将pci设备的uio 资源` 映射到 虚拟地址。 调用pci_uio_alloc_resource 分配 uio 资源,用变量 uio_res 来指向新的uio 资源。 多次调用 pci_uio_map_resource_by_index 映射pci设备资源到大页内存。 rte_eal_init +-> rte_eal_...
万兆网卡驱动 的 init() 回调函数为:rte_ixgbe_pmd_init。 rte_eal_dev_init 逐个触发 dev_driver_list 上所有驱动的 init() 回调函数 2.2.1. struct rte_driver 的 init() 回调函数的实现 无论 千兆网卡驱动初始化 rte_igb_pmd_init() 还是 万兆网卡驱动初始化 rte_ixgbe_pmd_init(),最后都调用了 rt...
rte_eth_rx_queue_setup,设置 以太网设备 的收包队列。 rte_eth_tx_queue_setup,设置 以太网设备 的发包队列。 总体函数调用图如下: main | /* --- */ | /* 以太网设备的配置 */ +-> rte_eth_dev_configure /* 用户配置 以太网设备 */ | +-> memcpy(&dev->data->dev...
+-> TAILQ_INIT(&(eth_dev->link_intr_cbs)) /* 初始化中断处理回调函数链表 */ +-> (*eth_drv->eth_dev_init)(eth_dev); /* 调用 PMD 设备的初始化 回调函数 */ 源码分析如下: 创建 唯一的 设备名称。 为 以太网设备 分配空间。
+-> rte_eal_pci_init /* 对 所有 dpdk 托管 pci 网口 的 进行初始化 */ +=> rte_eal_pci_scan /* <== 解释 单个 pci 设备的详细信息 */ 以下的是部分的rte_eal_pci_scan函数的代码。 int rte_eal_pci_scan(void) { struct dirent *e; ...
rte_eal_pci_probe 函数 用于 pci 设备的侦测。 遍历pci_device_list 中所有的 设备。1.1使用 pci_devargs_lookup 查询 pci 设备 用于数据。设置 设备 的 devargs 。 1.2调用 pci_probe_all_drivers() 为 该设备选择合适的 驱动。 函数调用图如下: ...
dpdk pmd 驱动收发包函数类别 收包函数分类: 普通收包函数 每次申请一个 mbuf,处理一个填充了报文的描述符并重填地址,一个报文对应一个 mbuf,不支持 multi-segmented mbuf 链式收包 bulk_alloc 收包函数 设置一个描述符回收数量门限,当空闲描述符超过设定数量后批量申请 mbuf 并重填描述符,一个报文对应一个 mbuf...