以l2fwd为例, 应用层调用rte_eth_dev_configure进行配置下发; 调用rte_eth_rx_queue_setup对网卡接收队列进行设置; 调用rte_eth_tx_queue_setup对网卡发送队列进行设置; 调用rte_eth_dev_start启用网卡。下面分别来看下这些接口的实现。 一、rte_eth_dev_configure配置下发 rte_eth_dev_configure接口使得应用层可...
| +~> ixgbe_dev_rx_queue_setup | +-> rte_eth_tx_queue_setup /* 设置 以太网设备 的发包队列 */ +-> (*dev->dev_ops->tx_queue_setup)() /* 网口的发包队列 的初始化 */ . /* 千兆:eth_igb_ops.tx_queue_setup = eth_igb_tx_queue_setup */ +~> eth_igb_tx_queue_setup . . ...
rte_eth_dev_configure:根据 DPDK App 的需要,配置被 App 接管的 eth 网卡,实际上是配置 eth 网卡的驱动程序。 rte_eth_rx_queue_setup/rte_eth_tx_queue_setup:为网卡分配接收/发送队列。 rte_eth_dev_start:启动网卡。 rte_eth_rx_burst/rte_eth_tx_burst:为指定网卡的指定队列的接收/发送数据包函数。
rte_eth_tx_queue_setup()和rte_eth_rx_queue_setup()则调用具体driver的处理函数分配queue资源。 一些相同与不同点 1.在kernel中,i40evf重新分配queue数量通过发送VIRTCHNL_OP_REQUEST_QUEUES 消息给pf来协商queue数量。当pf有能力提供更多数量queue的时候会通过VIRTCHNL_EVENT_RESET_IMPENDING事件通知VF需要执行rese...
(portid),NULL,l2fwd_pktmbuf_pool);//分配网卡发送队列结构体,发送ring硬件描述符等内存rte_eth_tx_queue_setup(portid,0,nb_txd,rte_eth_dev_socket_id(portid),NULL);//启动网卡,设置网卡寄存器,将网卡和系统内存关联起来rte_eth_dev_start(portid);while(1){//接收报文rte_eth_rx_burst(portid,0...
const int num_tx_queues = 1; //发送队列个数 struct rte_eth_conf port_conf = port_conf_default; rte_eth_dev_configure(gDpdkPortId, num_rx_queues, num_tx_queues, &port_conf); // 0是0号接收队列 // 128是队列长度 if (rte_eth_rx_queue_setup(gDpdkPortId, 0, 128, rte_eth_dev_...
rte_eth_rx_queue_setup()申请并设置一个收包队列。 关键参数: struct rte_mempool *mp; 由前文创建的pool rte_eth_tx_queue_setup() 同上。 rte_eth_dev_start()就是设置好了之后就启动啊,该收的收,该发的发。 rte_eth_promiscuous_enable()启动混杂模式,不解释。
retval =rte_eth_tx_queue_setup(port, q, nb_txd,rte_eth_dev_socket_id(port),NULL);if(retval <0)returnretval; } } retval =rte_eth_dev_start(port);if(retval <0)returnretval;charportname[32];charportargs[256];structrte_ether_addraddr; ...
链路绑定设备使用rte_eth_bond_create API创建,该API需要唯一的设备名称,用于初始化设备的链路绑定模式,以及最后将要分配设备资源的套接字ID。在成功创建绑定设备之后,必须使用通用的以太网设备配置API rte_eth_dev_configure来配置,然后使用rte_eth_tx_queue_setup/rte_eth_rx_queue_setup将要使用的RX和TX队列进行...