diff options
| author | 童宗振 <[email protected]> | 2024-07-23 09:27:30 +0000 |
|---|---|---|
| committer | 童宗振 <[email protected]> | 2024-07-23 09:27:30 +0000 |
| commit | bdfd6cc86c7db57e3bd1968aca081f972e962d3d (patch) | |
| tree | eb2869319fd841ad7888fe80cc3eb70ae91f4ad6 /service | |
| parent | f1a1d7fa5ff754e7b7df774852a25ef10e2a013c (diff) | |
Updata dpdk to 23
Diffstat (limited to 'service')
| -rw-r--r-- | service/include/sc_devmgr.h | 4 | ||||
| -rw-r--r-- | service/src/core.c | 18 | ||||
| -rw-r--r-- | service/src/devmgr.c | 133 | ||||
| -rw-r--r-- | service/src/pdump.c | 5 |
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 |
