用wordpress做外贸网站,网站开发项目经验描述怎么写,qq注册账号免费申请,急招保安50至65岁上一节我们讲述了如何申请内存池缓冲区以便接下来创建 RX 队列#xff0c;这一节我们将给出具体如何创建 RX/TX 队列。 在 DPDK 中提供了 rte_eth_rx_queue_setup 及 rte_eth_tx_queue_setup 这两个接口用于接收/发送队列的创建。 下面给出一个为各个网卡创建RX/TX 队列的实例… 上一节我们讲述了如何申请内存池缓冲区以便接下来创建 RX 队列这一节我们将给出具体如何创建 RX/TX 队列。 在 DPDK 中提供了 rte_eth_rx_queue_setup 及 rte_eth_tx_queue_setup 这两个接口用于接收/发送队列的创建。 下面给出一个为各个网卡创建RX/TX 队列的实例
#define MAX_RX_QUEUE_PER_PORT 1
#define MAX_TX_QUEUE_PER_PORT 1
#define RX_RING_SIZE 128
#define TX_RING_SIZE 512static const struct rte_eth_conf dev_conf_default {.rxmode {.max_rx_pkt_len ETHER_MAX_LEN}
};static void
init_port(void)
{int nb_port 0;int portid 0;int ret 0;nb_port rte_eth_dev_count_avail();if(!nb_port){rte_exit(EXIT_FAILURE, No support eth found\n);}printf(nb_port %d\n, nb_port);for(portid0;portid nb_port;portid){ret rte_eth_dev_configure(portid, MAX_RX_QUEUE_PER_PORT, MAX_TX_QUEUE_PER_PORT, dev_conf_default);if (ret 0) {rte_exit(EXIT_FAILURE, Cannot configure device: err%d, port%u\n, ret, portid);}ret rte_eth_rx_queue_setup(portid, 0, RX_RING_SIZE, rte_eth_dev_socket_id(portid), NULL, pktmbuf_pool[0]);if (ret 0) {rte_exit(EXIT_FAILURE, rte_eth_rx_queue_setup:err%d, port%u\n, ret, portid);}ret rte_eth_tx_queue_setup(portid, 0, TX_RING_SIZE, rte_eth_dev_socket_id(portid), NULL);if (ret 0) {rte_exit(EXIT_FAILURE, rte_eth_tx_queue_setup:err%d, port%u\n, ret, portid);}ret rte_eth_dev_start(portid);if (ret 0) {rte_exit(EXIT_FAILURE, rte_eth_dev_start:err%d, port%u\n, ret, portid);}rte_eth_promiscuous_enable(portid);}
} 首先统计网卡数量然后依次遍历网卡这里的网卡指的是搭建DPDK环境时绑定到DPDK上的网卡而非虚拟机上存在的全部网卡。对于每个网卡首先配置然后创建RX队列然后创建TX队列最后启动网卡并开启混杂模式。 在这里我们仅为每个网卡开启一个RX队列及一个TX队列因此都设置为1。RX_RING_SIZE 及 TX_RING_SIZE 依赖于实际的机器配置可以自行修改。 之所以开启混杂模式是为了更方便打印出报文因为目前没有配置IP也没有了解网卡的mac是多少即使是使用发包工具也无从下手。 现在我们已经成功为所有绑定在DPDK上的网卡创建了相应的 RX/TX 队列。 下一节我们将描述如何从网卡收取报文并存放于队列。