DPDK  21.11.6
examples/l2fwd-event/l2fwd_common.c
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(C) 2019 Marvell International Ltd.
*/
#include "l2fwd_common.h"
int
l2fwd_event_init_ports(struct l2fwd_resources *rsrc)
{
uint16_t nb_rxd = RTE_TEST_RX_DESC_DEFAULT;
uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT;
struct rte_eth_conf port_conf = {
.rxmode = {
},
.txmode = {
.mq_mode = RTE_ETH_MQ_TX_NONE,
},
};
uint16_t nb_ports_available = 0;
uint16_t port_id;
int ret;
if (rsrc->event_mode) {
port_conf.rx_adv_conf.rss_conf.rss_key = NULL;
port_conf.rx_adv_conf.rss_conf.rss_hf = RTE_ETH_RSS_IP;
}
/* Initialise each port */
struct rte_eth_conf local_port_conf = port_conf;
struct rte_eth_dev_info dev_info;
struct rte_eth_rxconf rxq_conf;
struct rte_eth_txconf txq_conf;
/* skip ports that are not enabled */
if ((rsrc->enabled_port_mask & (1 << port_id)) == 0) {
printf("Skipping disabled port %u\n", port_id);
continue;
}
nb_ports_available++;
/* init port */
printf("Initializing port %u... ", port_id);
fflush(stdout);
ret = rte_eth_dev_info_get(port_id, &dev_info);
if (ret != 0)
rte_panic("Error during getting device (port %u) info: %s\n",
port_id, strerror(-ret));
local_port_conf.rx_adv_conf.rss_conf.rss_hf &=
if (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=
printf("Port %u modified RSS hash function based on hardware support,"
"requested:%#"PRIx64" configured:%#"PRIx64"",
port_id,
local_port_conf.rx_adv_conf.rss_conf.rss_hf);
}
local_port_conf.txmode.offloads |=
/* Configure RX and TX queue. 8< */
ret = rte_eth_dev_configure(port_id, 1, 1, &local_port_conf);
if (ret < 0)
rte_panic("Cannot configure device: err=%d, port=%u\n",
ret, port_id);
/* >8 End of configuration RX and TX queue. */
ret = rte_eth_dev_adjust_nb_rx_tx_desc(port_id, &nb_rxd,
&nb_txd);
if (ret < 0)
rte_panic("Cannot adjust number of descriptors: err=%d, port=%u\n",
ret, port_id);
rte_eth_macaddr_get(port_id, &rsrc->eth_addr[port_id]);
/* init one RX queue */
fflush(stdout);
rxq_conf = dev_info.default_rxconf;
rxq_conf.offloads = local_port_conf.rxmode.offloads;
/* Using lcore to poll one or several ports. 8< */
ret = rte_eth_rx_queue_setup(port_id, 0, nb_rxd,
&rxq_conf,
rsrc->pktmbuf_pool);
if (ret < 0)
rte_panic("rte_eth_rx_queue_setup:err=%d, port=%u\n",
ret, port_id);
/* >8 End of using lcore to poll one or several ports. */
/* Init one TX queue on each port. 8< */
fflush(stdout);
txq_conf = dev_info.default_txconf;
txq_conf.offloads = local_port_conf.txmode.offloads;
ret = rte_eth_tx_queue_setup(port_id, 0, nb_txd,
&txq_conf);
if (ret < 0)
rte_panic("rte_eth_tx_queue_setup:err=%d, port=%u\n",
ret, port_id);
/* >8 End of init one TX queue on each port. */
printf("Port %u,MAC address: " RTE_ETHER_ADDR_PRT_FMT "\n\n",
port_id,
RTE_ETHER_ADDR_BYTES(&rsrc->eth_addr[port_id]));
}
return nb_ports_available;
}
rte_eth_dev_adjust_nb_rx_tx_desc
int rte_eth_dev_adjust_nb_rx_tx_desc(uint16_t port_id, uint16_t *nb_rx_desc, uint16_t *nb_tx_desc)
rte_eth_rxconf
Definition: rte_ethdev.h:1207
rte_eth_tx_queue_setup
int rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, uint16_t nb_tx_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf)
rte_eth_txconf
Definition: rte_ethdev.h:1243
rte_eth_dev_configure
int rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_queue, uint16_t nb_tx_queue, const struct rte_eth_conf *eth_conf)
RTE_ETH_MQ_TX_NONE
@ RTE_ETH_MQ_TX_NONE
Definition: rte_ethdev.h:451
RTE_ETH_MQ_RX_RSS
@ RTE_ETH_MQ_RX_RSS
Definition: rte_ethdev.h:420
rte_eth_conf::rxmode
struct rte_eth_rxmode rxmode
Definition: rte_ethdev.h:1513
rte_eth_rxmode::mq_mode
enum rte_eth_rx_mq_mode mq_mode
Definition: rte_ethdev.h:466
RTE_ETHER_ADDR_BYTES
#define RTE_ETHER_ADDR_BYTES(mac_addrs)
Definition: rte_ether.h:232
rte_eth_dev_info_get
int rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info)
rte_eth_promiscuous_enable
int rte_eth_promiscuous_enable(uint16_t port_id)
rte_eth_rxmode::split_hdr_size
uint16_t split_hdr_size
Definition: rte_ethdev.h:470
rte_eth_macaddr_get
int rte_eth_macaddr_get(uint16_t port_id, struct rte_ether_addr *mac_addr)
rte_eth_txconf::offloads
uint64_t offloads
Definition: rte_ethdev.h:1255
rte_eth_rss_conf::rss_hf
uint64_t rss_hf
Definition: rte_ethdev.h:526
rte_eth_rxconf::offloads
uint64_t offloads
Definition: rte_ethdev.h:1226
rte_eth_txmode::offloads
uint64_t offloads
Definition: rte_ethdev.h:1134
rte_panic
#define rte_panic(...)
Definition: rte_debug.h:43
rte_eth_rxmode::offloads
uint64_t offloads
Definition: rte_ethdev.h:476
RTE_ETHER_ADDR_PRT_FMT
#define RTE_ETHER_ADDR_PRT_FMT
Definition: rte_ether.h:228
rte_eth_dev_info::flow_type_rss_offloads
uint64_t flow_type_rss_offloads
Definition: rte_ethdev.h:1821
rte_eth_rx_queue_setup
int rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id, uint16_t nb_rx_desc, unsigned int socket_id, const struct rte_eth_rxconf *rx_conf, struct rte_mempool *mb_pool)
rte_eth_conf::rss_conf
struct rte_eth_rss_conf rss_conf
Definition: rte_ethdev.h:1521
RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE
#define RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE
Definition: rte_ethdev.h:1650
rte_eth_dev_info::default_rxconf
struct rte_eth_rxconf default_rxconf
Definition: rte_ethdev.h:1822
rte_eth_conf::txmode
struct rte_eth_txmode txmode
Definition: rte_ethdev.h:1514
rte_eth_rss_conf::rss_key
uint8_t * rss_key
Definition: rte_ethdev.h:524
rte_eth_dev_info::default_txconf
struct rte_eth_txconf default_txconf
Definition: rte_ethdev.h:1823
rte_eth_dev_info::tx_offload_capa
uint64_t tx_offload_capa
Definition: rte_ethdev.h:1812
rte_eth_dev_info
Definition: rte_ethdev.h:1789
rte_eth_conf::rx_adv_conf
struct rte_eth_conf::@147 rx_adv_conf
RTE_ETH_FOREACH_DEV
#define RTE_ETH_FOREACH_DEV(p)
Definition: rte_ethdev.h:2145
rte_eth_conf
Definition: rte_ethdev.h:1505
rte_eth_dev_socket_id
int rte_eth_dev_socket_id(uint16_t port_id)