2.5运行截图
2.6详细代码注释分析:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 21 #include 22 #include 23 #include 24 #include 25 #include 26 #include 27 #include 28 #include 29 #include 30 #include 31 #include 32 #include 33 #include 34 #include 35 #include 36 #include 37 #include 38 39#define RTE_LOGTYPE_L2FWD RTE_LOGTYPE_USER1 40 41#define MBUF_SIZE (2048 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM) 42#define NB_MBUF 8192 43 44#define MAX_PKT_BURST 32 45#define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */ 46 47/* 48 * Configurable number of RX/TX ring descriptors 49*/ 50#define RTE_TEST_RX_DESC_DEFAULT 128 51#define RTE_TEST_TX_DESC_DEFAULT 512 52static uint16_t nb_rxd = RTE_TEST_RX_DESC_DEFAULT; 53static uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT; 54 55/*物理端口的mac地址的数组 ethernet addresses of ports */ 56staticstruct ether_addr l2fwd_ports_eth_addr[RTE_MAX_ETHPORTS]; 57 58/*已经启用的物理端口的掩码/位图 mask of enabled ports */ 59static uint32_t l2fwd_enabled_port_mask = 0; 60 61/*已经启用的目的物理端口编号的数组 list of enabled ports */ 62static uint32_t l2fwd_dst_ports[RTE_MAX_ETHPORTS]; 63 64static unsigned int l2fwd_rx_queue_per_lcore = 1; //默认值,每个lcore负责的接收队列数量 65 66struct mbuf_table { //mbuf数组,可以存放32个数据包 67 unsigned len; 68struct rte_mbuf *m_table[MAX_PKT_BURST]; 69 }; 70 71#define MAX_RX_QUEUE_PER_LCORE 16 72#define MAX_TX_QUEUE_PER_PORT 16 73struct lcore_queue_conf { 74 unsigned n_rx_port; //用于接收数据包的物理端口的实际数量 75 unsigned rx_port_list[MAX_RX_QUEUE_PER_LCORE]; 76struct mbuf_table tx_mbufs[RTE_MAX_ETHPORTS]; //保存发送数据包的缓存区 77 78 } __rte_cache_aligned; 79struct lcore_queue_conf lcore_queue_conf[RTE_MAX_LCORE]; 80 81staticconststruct rte_eth_conf port_conf = { 82 .rxmode = { 83 .split_hdr_size = 0, 84 .header_split = 0, /**< Header Split disabled */ 85 .hw_ip_checksum = 0, /**< IP checksum offload disabled */ 86 .hw_vlan_filter = 0, /**< VLAN filtering disabled */ 87 .jumbo_frame = 0, /**< Jumbo Frame Support disabled */ 88 .hw_strip_crc = 0, /**< CRC stripped by hardware */ 89 }, 90 .txmode = { 91 .mq_mode = ETH_MQ_TX_NONE, 92 }, 93 }; 94 95struct rte_mempool * l2fwd_pktmbuf_pool = NULL; 96 97/*每个物理端口的统计结构体 Per-port statistics struct */ 98struct l2fwd_port_statistics { 99 uint64_t tx;