examples/l2fwd-event: add eventdev main loop
[dpdk.git] / examples / l2fwd-event / l2fwd_common.c
1 #include "l2fwd_common.h"
2
3 int
4 l2fwd_event_init_ports(struct l2fwd_resources *rsrc)
5 {
6         uint16_t nb_rxd = RTE_TEST_RX_DESC_DEFAULT;
7         uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT;
8         struct rte_eth_conf port_conf = {
9                 .rxmode = {
10                         .max_rx_pkt_len = RTE_ETHER_MAX_LEN,
11                         .split_hdr_size = 0,
12                 },
13                 .txmode = {
14                         .mq_mode = ETH_MQ_TX_NONE,
15                 },
16         };
17         uint16_t nb_ports_available = 0;
18         uint16_t port_id;
19         int ret;
20
21         if (rsrc->event_mode) {
22                 port_conf.rxmode.mq_mode = ETH_MQ_RX_RSS;
23                 port_conf.rx_adv_conf.rss_conf.rss_key = NULL;
24                 port_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_IP;
25         }
26
27         /* Initialise each port */
28         RTE_ETH_FOREACH_DEV(port_id) {
29                 struct rte_eth_conf local_port_conf = port_conf;
30                 struct rte_eth_dev_info dev_info;
31                 struct rte_eth_rxconf rxq_conf;
32                 struct rte_eth_txconf txq_conf;
33
34                 /* skip ports that are not enabled */
35                 if ((rsrc->enabled_port_mask & (1 << port_id)) == 0) {
36                         printf("Skipping disabled port %u\n", port_id);
37                         continue;
38                 }
39                 nb_ports_available++;
40
41                 /* init port */
42                 printf("Initializing port %u... ", port_id);
43                 fflush(stdout);
44                 rte_eth_dev_info_get(port_id, &dev_info);
45                 if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)
46                         local_port_conf.txmode.offloads |=
47                                 DEV_TX_OFFLOAD_MBUF_FAST_FREE;
48                 ret = rte_eth_dev_configure(port_id, 1, 1, &local_port_conf);
49                 if (ret < 0)
50                         rte_panic("Cannot configure device: err=%d, port=%u\n",
51                                   ret, port_id);
52
53                 ret = rte_eth_dev_adjust_nb_rx_tx_desc(port_id, &nb_rxd,
54                                                        &nb_txd);
55                 if (ret < 0)
56                         rte_panic("Cannot adjust number of descriptors: err=%d, port=%u\n",
57                                   ret, port_id);
58
59                 rte_eth_macaddr_get(port_id, &rsrc->eth_addr[port_id]);
60
61                 /* init one RX queue */
62                 fflush(stdout);
63                 rxq_conf = dev_info.default_rxconf;
64                 rxq_conf.offloads = local_port_conf.rxmode.offloads;
65                 ret = rte_eth_rx_queue_setup(port_id, 0, nb_rxd,
66                                              rte_eth_dev_socket_id(port_id),
67                                              &rxq_conf,
68                                              rsrc->pktmbuf_pool);
69                 if (ret < 0)
70                         rte_panic("rte_eth_rx_queue_setup:err=%d, port=%u\n",
71                                   ret, port_id);
72
73                 /* init one TX queue on each port */
74                 fflush(stdout);
75                 txq_conf = dev_info.default_txconf;
76                 txq_conf.offloads = local_port_conf.txmode.offloads;
77                 ret = rte_eth_tx_queue_setup(port_id, 0, nb_txd,
78                                 rte_eth_dev_socket_id(port_id),
79                                 &txq_conf);
80                 if (ret < 0)
81                         rte_panic("rte_eth_tx_queue_setup:err=%d, port=%u\n",
82                                   ret, port_id);
83
84                 rte_eth_promiscuous_enable(port_id);
85
86                 printf("Port %u,MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n\n",
87                         port_id,
88                         rsrc->eth_addr[port_id].addr_bytes[0],
89                         rsrc->eth_addr[port_id].addr_bytes[1],
90                         rsrc->eth_addr[port_id].addr_bytes[2],
91                         rsrc->eth_addr[port_id].addr_bytes[3],
92                         rsrc->eth_addr[port_id].addr_bytes[4],
93                         rsrc->eth_addr[port_id].addr_bytes[5]);
94         }
95
96         return nb_ports_available;
97 }