summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
author童宗振 <[email protected]>2024-07-23 09:27:30 +0000
committer童宗振 <[email protected]>2024-07-23 09:27:30 +0000
commitbdfd6cc86c7db57e3bd1968aca081f972e962d3d (patch)
treeeb2869319fd841ad7888fe80cc3eb70ae91f4ad6 /service
parentf1a1d7fa5ff754e7b7df774852a25ef10e2a013c (diff)
Updata dpdk to 23
Diffstat (limited to 'service')
-rw-r--r--service/include/sc_devmgr.h4
-rw-r--r--service/src/core.c18
-rw-r--r--service/src/devmgr.c133
-rw-r--r--service/src/pdump.c5
4 files changed, 97 insertions, 63 deletions
diff --git a/service/include/sc_devmgr.h b/service/include/sc_devmgr.h
index d6ad8ee..4eaf96a 100644
--- a/service/include/sc_devmgr.h
+++ b/service/include/sc_devmgr.h
@@ -196,8 +196,8 @@ struct dpdk_dev
struct mr_dev_desc_qid_map
{
- uint8_t qid_enabled[RTE_MAX_LCORE];
- uint8_t qid_map[RTE_MAX_LCORE];
+ uint8_t qid_enabled[RTE_MAX_LCORE];
+ uint8_t qid_map[RTE_MAX_LCORE];
};
struct mr_dev_desc
diff --git a/service/src/core.c b/service/src/core.c
index 3a209b6..01feaca 100644
--- a/service/src/core.c
+++ b/service/src/core.c
@@ -461,8 +461,8 @@ static void sc_eal_init(struct sc_main * sc, const char * cmd)
}
char str_socket_mem[MR_STRING_MAX];
- ret =
- MESA_load_profile_string_nodef(sc->local_cfgfile, "eal", "socket-mem", str_socket_mem, sizeof(str_socket_mem));
+ ret = MESA_load_profile_string_nodef(sc->local_cfgfile, "eal", "socket-mem", str_socket_mem,
+ sizeof(str_socket_mem));
if (ret > 0)
{
@@ -527,11 +527,7 @@ static void sc_eal_init(struct sc_main * sc, const char * cmd)
exit(EXIT_FAILURE);
}
-#if RTE_VERSION >= RTE_VERSION_NUM(17, 5, 0, 0)
rte_log_set_global_level(loglevel);
-#else
- rte_set_log_level(loglevel);
-#endif
g_logger_level = loglevel - 1;
@@ -556,6 +552,11 @@ static void sc_eal_init(struct sc_main * sc, const char * cmd)
ret = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &sc->cpu_set_before_eal);
MR_VERIFY_2(ret >= 0, "Cannot get init thread affinity: %s", strerror(errno));
+#if RTE_VERSION >= RTE_VERSION_NUM(23, 11, 0, 0)
+#define MR_RTE_MAX_MEMZONE 51200
+ ret = rte_memzone_max_set(MR_RTE_MAX_MEMZONE);
+ MR_VERIFY(rte_memzone_max_get() == MR_RTE_MAX_MEMZONE);
+#endif
ret = rte_eal_init((int)eal_argc, eal_argv);
if (ret < 0)
{
@@ -912,7 +913,6 @@ extern void devmgr_deinit(struct devmgr_main * devmgr_main);
extern int sw_forward_init(struct sc_main * sc);
extern int app_main_init(struct sc_main * sc);
extern int vdev_dump(struct sc_main * sc);
-extern int sw_fwd_dump(struct sc_main * sc);
extern int sw_vlan_base_forward_init(struct sc_main * sc);
extern int smartoffload_init(struct sc_main * sc);
extern int flow_main_init(struct sc_main * sc);
@@ -1207,10 +1207,6 @@ int marsio_service_main(int argc, char * argv[])
vdev_dump(sc);
port_adapter_mapping_dump();
-#if 0
- sw_fwd_dump(sc);
-#endif
-
if (rte_pdump_init() != 0)
{
MR_WARNING("Packet dump library initialization failed.");
diff --git a/service/src/devmgr.c b/service/src/devmgr.c
index 0c204ad..63ad913 100644
--- a/service/src/devmgr.c
+++ b/service/src/devmgr.c
@@ -16,6 +16,7 @@
#include <sys/queue.h>
#include <unistd.h>
+#include <rte_bus.h>
#include <rte_bus_pci.h>
#include <rte_config.h>
#include <rte_debug.h>
@@ -29,6 +30,7 @@
#include <rte_node_eth_api.h>
#include <rte_pci.h>
#include <rte_string_fns.h>
+#include <rte_version.h>
#include <MESA_prof_load.h>
#include <cJSON.h>
@@ -41,12 +43,11 @@
static struct rte_eth_conf eth_conf_default = {
.rxmode =
{
- .mq_mode = ETH_MQ_RX_NONE,
- .split_hdr_size = 0,
+ .mq_mode = RTE_ETH_MQ_RX_NONE,
},
.txmode =
{
- .mq_mode = ETH_MQ_TX_NONE,
+ .mq_mode = RTE_ETH_MQ_TX_NONE,
},
};
@@ -66,6 +67,12 @@ struct dpdk_dev_candidate
struct rte_pci_addr pci_addr;
/* STR PCI address */
char str_pci_addr[PCI_PRI_STR_SIZE];
+
+ /** for real network card, the name is str_pci_addr
+ * for virtio, the name is dpdk_vdev_name
+ * Its value is obtained through rte_eth_dev_get_name_by_port()
+ */
+ char devname[RTE_ETH_NAME_MAX_LEN];
/* vendor */
char vendor[MR_SYMBOL_MAX];
/* driver */
@@ -264,6 +271,9 @@ static int dpdk_dev_status_print(struct dpdk_dev * dev)
char str_phy_addr[MR_SYMBOL_MAX];
rte_ether_format_addr(str_phy_addr, sizeof(str_phy_addr), &dev->ether_addr);
+ char devname[RTE_ETH_NAME_MAX_LEN];
+ rte_eth_dev_get_name_by_port(dev->port_id, devname);
+
MR_INFO(" ");
MR_INFO("DPDK based device %s: PortID = %d", dev->symbol, dev->port_id);
@@ -272,6 +282,7 @@ static int dpdk_dev_status_print(struct dpdk_dev * dev)
mr_dev_desc_status_print(dev->ref_dev_desc);
/* then, the detail info of the dpdk device */
+ MR_INFO(" devname : %s", devname);
MR_INFO(" HWADDR : %s", str_phy_addr);
MR_INFO(" Maximum Transmission Unit : %u", dev->mtu);
MR_INFO(" Promiscuous mode : %s", str_enable_or_disable(dev->promisc));
@@ -280,6 +291,12 @@ static int dpdk_dev_status_print(struct dpdk_dev * dev)
MR_INFO(" Drop-En : %s", str_enable_or_disable(dev->en_drop));
MR_INFO(" RSSMode : %s", str_rssmode(dev->rssmode));
+#if 0
+#if RTE_VERSION >= RTE_VERSION_NUM(23, 11, 0, 0)
+ rte_eth_dev_priv_dump(dev->port_id, stderr);
+#endif
+#endif
+
/* Print the ip addr */
mr_dev_desc_ip_addr_print(dev->ref_dev_desc);
return 0;
@@ -710,8 +727,8 @@ int mr_dev_desc_config_load(struct devmgr_main * devmgr_main, struct mr_dev_desc
/* Get allow vlan ids */
uint32_t vlan_ids[16];
- int nr_vlan_members =
- MESA_load_profile_uint_range(cfgfile, str_section, "allow_vlan_ids", RTE_DIM(vlan_ids), vlan_ids);
+ int nr_vlan_members = MESA_load_profile_uint_range(cfgfile, str_section, "allow_vlan_ids", RTE_DIM(vlan_ids),
+ vlan_ids);
if (nr_vlan_members > 0)
{
if (nr_vlan_members > RTE_DIM(dev_desc->vlan_members))
@@ -1034,8 +1051,8 @@ int shmdev_setup_one_device(struct devmgr_main * devmgr_main, const char * devsy
}
ret = vdev_data_create(sc->vdev_main, devsym, nr_rxstream, nr_txstream, shmdev_config.sz_tun_rx,
- shmdev_config.sz_tun_tx, shmdev_config.sz_max_inflight,
- shmdev_config.batch_interval_in_us, direct_pool);
+ shmdev_config.sz_tun_tx, shmdev_config.sz_max_inflight, shmdev_config.batch_interval_in_us,
+ direct_pool);
if (unlikely(ret < 0))
{
@@ -1142,12 +1159,12 @@ static int gen_dpdk_dev_ethconf(struct dpdk_dev * dev, unsigned nr_rxq_use, stru
if ((dev_desc->drv_type == MR_DEV_DRV_TYPE_DPDK_PCI) && (nr_rxq_use > 1))
{
/* only PCI devices can run at RSS mode. */
- eth_conf.rxmode.mq_mode = ETH_MQ_RX_RSS;
+ eth_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
/* setup how NICs distributes packets */
if (dev->rssmode == MR_DEV_RSSMODE_2TUPLE_SYM)
{
- eth_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_IP;
+ eth_conf.rx_adv_conf.rss_conf.rss_hf = RTE_ETH_RSS_IP;
eth_conf.rx_adv_conf.rss_conf.rss_key = default_sym_rss_key;
eth_conf.rx_adv_conf.rss_conf.rss_key_len = sizeof(default_sym_rss_key);
}
@@ -1191,12 +1208,12 @@ static int gen_dpdk_dev_ethconf(struct dpdk_dev * dev, unsigned nr_rxq_use, stru
dev_desc->drv_type == MR_DEV_DRV_TYPE_DPDK_AF_PACKET)
{
/* the virtio and af_packet is not support rss */
- eth_conf.rxmode.mq_mode = ETH_MQ_RX_NONE;
+ eth_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
}
if (dev->en_vlan_strip)
{
- eth_conf.txmode.offloads |= DEV_TX_OFFLOAD_VLAN_INSERT;
+ eth_conf.txmode.offloads |= RTE_ETH_TX_OFFLOAD_VLAN_INSERT;
}
*out_eth_conf = eth_conf;
@@ -1291,8 +1308,8 @@ static int dpdk_dev_queue_setup_rss(struct dpdk_dev * dev, cpu_set_t * rx_cpu_se
struct rte_mempool * pool = mrb_direct_mempool_locate(sc->mrb_pool_main, NULL, socket_id, cpu_id);
assert(pool != NULL);
- ret =
- rte_eth_rx_queue_setup(dev->port_id, rxq + rxq_index_begin, dev->nr_rx_descs, dev_socket_id, &rxconf, pool);
+ ret = rte_eth_rx_queue_setup(dev->port_id, rxq + rxq_index_begin, dev->nr_rx_descs, dev_socket_id, &rxconf,
+ pool);
if (ret < 0)
{
MR_ERROR("dpdk device %s RXQ %d setup failed, errno = %d", dev->symbol, rxq + rxq_index_begin, ret);
@@ -1344,7 +1361,7 @@ __rte_unused static int dpdk_dev_queue_setup_hairpin(struct dpdk_dev * dev, unsi
if (unlikely(ret != 0))
{
MR_ERROR("Failed at setup rx hairpin queue at port = %d, queue = %d, peer_queue = %d, ret = %d: %s",
- dev->port_id, q_index_hairpin, q_index_hairpin_peer, ret, rte_strerror(errno));
+ dev->port_id, q_index_hairpin, q_index_hairpin_peer, ret, rte_strerror(rte_errno));
return ret;
}
}
@@ -1362,7 +1379,7 @@ __rte_unused static int dpdk_dev_queue_setup_hairpin(struct dpdk_dev * dev, unsi
if (unlikely(ret != 0))
{
MR_ERROR("Failed at setup tx hairpin queue at port = %d, queue = %d, peer_queue = %d, ret = %d: %s",
- dev->port_id, q_index_hairpin, q_index_hairpin_peer, ret, rte_strerror(errno));
+ dev->port_id, q_index_hairpin, q_index_hairpin_peer, ret, rte_strerror(rte_errno));
return ret;
}
@@ -1441,21 +1458,21 @@ __rte_unused static int dpdk_dev_setup_default_flows(struct devmgr_main * devmgr
/* setup how nics distributes packets */
if (dev->rssmode == MR_DEV_RSSMODE_2TUPLE_SYM)
{
- rss_type = ETH_RSS_IP;
+ rss_type = RTE_ETH_RSS_IP;
rss_key = default_sym_rss_key;
rss_key_len = sizeof(default_sym_rss_key);
}
else if (dev->rssmode == MR_DEV_RSSMODE_4TUPLE_SYM)
{
- rss_type =
- ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV6_UDP;
+ rss_type = RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_NONFRAG_IPV4_UDP |
+ RTE_ETH_RSS_NONFRAG_IPV6_UDP;
rss_key = default_sym_rss_key;
rss_key_len = sizeof(default_sym_rss_key);
}
else if (dev->rssmode == MR_DEV_RSSMODE_4TUPLE_ASYM)
{
- rss_type =
- ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV6_UDP;
+ rss_type = RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_NONFRAG_IPV4_UDP |
+ RTE_ETH_RSS_NONFRAG_IPV6_UDP;
rss_key = NULL;
}
@@ -1529,8 +1546,7 @@ static int dpdk_dev_setup_common(struct devmgr_main * devmgr_main, struct dpdk_d
return RT_ERR;
}
-
- if(dev->en_tx_meter)
+ if (dev->en_tx_meter)
{
ret = dpdk_dev_tx_meter_setup(dev, nr_txq_use, dev->tx_meter_cir, dev->tx_meter_cbs, dev->tx_meter_ebs);
if (ret < 0)
@@ -1587,12 +1603,12 @@ static int dpdk_dev_setup_common(struct devmgr_main * devmgr_main, struct dpdk_d
int vlan_offload_mask = 0;
if (dev->en_vlan_strip)
{
- vlan_offload_mask |= ETH_VLAN_STRIP_OFFLOAD;
+ vlan_offload_mask |= RTE_ETH_VLAN_STRIP_OFFLOAD;
}
if (dev->en_vlan_filter)
{
- vlan_offload_mask |= ETH_VLAN_FILTER_OFFLOAD;
+ vlan_offload_mask |= RTE_ETH_VLAN_FILTER_OFFLOAD;
}
if (vlan_offload_mask != 0)
@@ -1680,7 +1696,7 @@ void dpdk_dev_config_load(struct dpdk_dev * dev_dpdk, const char * cfg)
/* tx meter */
MESA_load_profile_uint_def(cfg, str_section, "en_tx_meter", &dev_dpdk->en_tx_meter, 0);
- if(dev_dpdk->en_tx_meter)
+ if (dev_dpdk->en_tx_meter)
{
unsigned int tx_meter_cir_in_Kbps = 0;
unsigned int tx_meter_cbs_in_KB = 0;
@@ -1709,6 +1725,7 @@ void dpdk_dev_config_load(struct dpdk_dev * dev_dpdk, const char * cfg)
/* TODO: allow the user to set different io cores for each devices */
}
+#if 0
static struct dpdk_dev_candidate * dpdk_dev_candidate_lookup_by_pci_addr(struct devmgr_main * devmgr_main,
struct rte_pci_addr pci_addr)
{
@@ -1734,6 +1751,20 @@ static struct dpdk_dev_candidate * dpdk_dev_candidate_lookup_by_vdev_name(struct
return NULL;
}
+#endif
+
+static struct dpdk_dev_candidate * dpdk_dev_candidate_lookup_by_devname(struct devmgr_main * devmgr_main,
+ const char * devname)
+{
+ struct dpdk_dev_candidate * dev_iter = NULL;
+ TAILQ_FOREACH(dev_iter, &devmgr_main->dpdk_dev_candidate_list, next)
+ {
+ if (strcmp(dev_iter->devname, devname) == 0)
+ return dev_iter;
+ }
+
+ return NULL;
+}
static int dpdk_dev_candidate_vdev_register(struct devmgr_main * devmgr_main, const char * kernel_name,
const char * vdev_name)
@@ -1741,8 +1772,9 @@ static int dpdk_dev_candidate_vdev_register(struct devmgr_main * devmgr_main, co
struct dpdk_dev_candidate * dev = malloc(sizeof(struct dpdk_dev_candidate));
MR_VERIFY_MALLOC(dev);
- snprintf(dev->kernel_name, sizeof(dev->kernel_name) - 1, "%s", kernel_name);
- snprintf(dev->dpdk_vdev_name, sizeof(dev->dpdk_vdev_name) - 1, "%s", vdev_name);
+ snprintf(dev->kernel_name, sizeof(dev->kernel_name), "%s", kernel_name);
+ snprintf(dev->dpdk_vdev_name, sizeof(dev->dpdk_vdev_name), "%s", vdev_name);
+ snprintf(dev->devname, sizeof(dev->devname), "%s", vdev_name);
TAILQ_INSERT_TAIL(&devmgr_main->dpdk_dev_candidate_list, dev, next);
return RT_SUCCESS;
@@ -1791,6 +1823,7 @@ static int dpdk_dev_candidate_pci_register(struct devmgr_main * devmgr_main, con
free(dev);
continue;
}
+ rte_pci_device_name(&dev->pci_addr, dev->devname, sizeof(dev->devname));
MR_DEBUG("DPDK device candidate: kernel_name=%s, pci_addr=%s, driver=%s", dev->kernel_name, dev->str_pci_addr,
dev->driver);
@@ -1978,7 +2011,7 @@ static int bond_dev_init_one_device(struct devmgr_main * devmgr_main, const char
}
int ret = rte_eth_bond_xmit_policy_set(bond_port_id, bond_dev_cfg->xmit_policy);
- if(unlikely(ret < 0))
+ if (unlikely(ret < 0))
{
MR_ERROR("Failed at setting xmit policy for bond %s: ret = %d", str_bond, ret);
goto errout;
@@ -2004,7 +2037,11 @@ static int bond_dev_init_one_device(struct devmgr_main * devmgr_main, const char
}
port_id_t slave_port_id = slave_dev_desc->port_id;
+#if RTE_VERSION >= RTE_VERSION_NUM(23, 11, 0, 0)
+ ret = rte_eth_bond_member_add(bond_port_id, slave_port_id);
+#else
ret = rte_eth_bond_slave_add(bond_port_id, slave_port_id);
+#endif
if (unlikely(ret < 0))
{
MR_ERROR("Failed at join %s to bond %s: ret = %d", str_dev_slave, str_bond, ret);
@@ -2035,7 +2072,7 @@ static int bond_dev_init_one_device(struct devmgr_main * devmgr_main, const char
}
/* get the candidate desc */
- dev_can = dpdk_dev_candidate_lookup_by_vdev_name(devmgr_main, str_bond_vdev);
+ dev_can = dpdk_dev_candidate_lookup_by_devname(devmgr_main, str_bond_vdev);
assert(dev_can != NULL);
ret = dpdk_dev_setup_from_candidate(devmgr_main, dev_can, bond_port_id);
@@ -2243,29 +2280,17 @@ int dpdk_dev_init(struct devmgr_main * devmgr_main)
/* all ethernet devices connect to pci bus */
RTE_ETH_FOREACH_DEV(port_id)
{
- struct rte_eth_dev_info dev_info_handler;
- ret = rte_eth_dev_info_get(port_id, &dev_info_handler);
- MR_VERIFY(ret == 0);
-
- struct rte_device * p_device = dev_info_handler.device;
- struct rte_bus * p_bus = rte_bus_find_by_device(p_device);
- MR_VERIFY(p_bus != NULL);
-
- struct dpdk_dev_candidate * dev_can = NULL;
- if (strncmp(p_bus->name, "pci", strlen("pci")) == 0)
- {
- dev_can = dpdk_dev_candidate_lookup_by_pci_addr(devmgr_main, RTE_DEV_TO_PCI_CONST(p_device)->addr);
- }
- else if (strncmp(p_bus->name, "vdev", strlen("vdev")) == 0)
- {
- dev_can = dpdk_dev_candidate_lookup_by_vdev_name(devmgr_main, p_device->name);
- }
- else
+ char devname[RTE_ETH_NAME_MAX_LEN];
+ ret = rte_eth_dev_get_name_by_port(port_id, devname);
+ if (unlikely(ret < 0))
{
- MR_ERROR("Unknown p_bus for the dpdk device, ignore it: port_id=%d, p_bus=%s", port_id, p_bus->name);
+ MR_ERROR("Failed to get devname, ignore it: port_id=%d", port_id);
continue;
}
+ struct dpdk_dev_candidate * dev_can = NULL;
+ dev_can = dpdk_dev_candidate_lookup_by_devname(devmgr_main, devname);
+
if (unlikely(dev_can == NULL))
{
MR_ERROR("Failed at lookup dpdk_dev_candidate, ignore it: port_id=%d", port_id);
@@ -2491,7 +2516,11 @@ static cJSON * dpdk_dev_monit_bonds(struct devmgr_main * devmgr_main, struct mr_
/* ------------------------------ SLAVES ------------------------------- */
uint16_t slaves[RTE_MAX_ETHPORTS] = {};
+#if RTE_VERSION >= RTE_VERSION_NUM(23, 11, 0, 0)
+ int num_slaves = rte_eth_bond_members_get(dpdk_dev_desc->port_id, slaves, RTE_MAX_ETHPORTS);
+#else
int num_slaves = rte_eth_bond_slaves_get(dpdk_dev_desc->port_id, slaves, RTE_MAX_ETHPORTS);
+#endif
if (unlikely(num_slaves < 0))
{
goto errout;
@@ -2514,8 +2543,12 @@ static cJSON * dpdk_dev_monit_bonds(struct devmgr_main * devmgr_main, struct mr_
/* ------------------------------ ACTIVE SLAVES ------------------------------- */
uint16_t active_slaves[RTE_MAX_ETHPORTS] = {};
+#if RTE_VERSION >= RTE_VERSION_NUM(23, 11, 0, 0)
+ int num_active_slaves = rte_eth_bond_active_members_get(dpdk_dev_desc->port_id, active_slaves, RTE_MAX_ETHPORTS);
+#else
int num_active_slaves = rte_eth_bond_active_slaves_get(dpdk_dev_desc->port_id, active_slaves, RTE_MAX_ETHPORTS);
- if (unlikely(num_slaves < 0))
+#endif
+ if (unlikely(num_active_slaves < 0))
{
goto errout;
}
@@ -2781,4 +2814,4 @@ int devmgr_init(struct devmgr_main * devmgr_main)
}
return RT_SUCCESS;
-}
+} \ No newline at end of file
diff --git a/service/src/pdump.c b/service/src/pdump.c
index b33b851..d9ecf3b 100644
--- a/service/src/pdump.c
+++ b/service/src/pdump.c
@@ -7,6 +7,7 @@
#include <rte_pcapng.h>
#include <rte_pdump.h>
#include <rte_ring.h>
+#include <rte_version.h>
#include <sc_pdump.h>
#include <sys/utsname.h>
#include <unistd.h>
@@ -141,7 +142,11 @@ void shmdev_pdump_copy(uint16_t port_id, uint16_t queue, struct rte_mempool * mp
/* The 'ts' argument represents cycles, describing only the packet interval. It doesn't save GMT; the time will
* be recorded in the 'mrpdump' tool. */
+#if RTE_VERSION >= RTE_VERSION_NUM(23, 11, 0, 0)
+ struct rte_mbuf * new_mbuf = rte_pcapng_copy(port_id, queue, mbufs[i], mp, snaplen, direction, NULL);
+#else
struct rte_mbuf * new_mbuf = rte_pcapng_copy(port_id, queue, mbufs[i], mp, snaplen, 0, direction);
+#endif
if (unlikely(new_mbuf == NULL))
__atomic_fetch_add(&stats->nombuf, 1, __ATOMIC_RELAXED);
else