diff options
| -rw-r--r-- | conf/mrglobal.conf | 2 | ||||
| -rw-r--r-- | service/src/node_etherfabric.c | 34 | ||||
| -rw-r--r-- | service/src/phydev.c | 96 |
3 files changed, 66 insertions, 66 deletions
diff --git a/conf/mrglobal.conf b/conf/mrglobal.conf index 4c72c22..f181874 100644 --- a/conf/mrglobal.conf +++ b/conf/mrglobal.conf @@ -52,7 +52,7 @@ sz_cache=256 #etherfabric_vlan_range_end=3047 #default_si_table_0=nf_0,0 -#[etherfabric_service_0] +#[service_0] #name=etherfabric_ingress_eth0_0 #type=etherfabric #mode=virtual-wire diff --git a/service/src/node_etherfabric.c b/service/src/node_etherfabric.c index 06af657..7c95c7c 100644 --- a/service/src/node_etherfabric.c +++ b/service/src/node_etherfabric.c @@ -179,22 +179,24 @@ void etherfabric_mac_to_string(char * buf, uint16_t size, const struct rte_ether /* Parsing The Etherfabric Service Config */ int parser_etherfabric_service_conf(struct sc_main * sc, struct etherfabric_management * etherfabric_manage) { + uint8_t mode = MODE_INVALID; uint16_t es_conf_num = 0; uint32_t listen_port = 0; int ret = 0; struct in_addr ip_addr; + char name[MR_SYMBOL_MAX]; char str_buf[MR_STRING_MAX]; char str_conf_section[MR_STRING_MAX]; char str_ip_addr[MR_STRING_MAX]; char str_listen_device[MR_STRING_MAX]; + struct etherfabric_service_config * _etherfabric_service_item = NULL; /* Parsing All Config */ for (int i = 0; i < MR_ETHERFABRIC_MAX_CONF; i++) { - snprintf(str_conf_section, sizeof(str_conf_section), "etherfabric_service_%d", i); - ret = MESA_load_profile_string_nodef(sc->local_cfgfile, str_conf_section, "name", - etherfabric_manage->etherfabric_service_array[i].name, - sizeof(etherfabric_manage->etherfabric_service_array[i].name)); + _etherfabric_service_item = ðerfabric_manage->etherfabric_service_array[es_conf_num]; + snprintf(str_conf_section, sizeof(str_conf_section), "service_%d", i); + ret = MESA_load_profile_string_nodef(sc->local_cfgfile, str_conf_section, "name", name, sizeof(name)); if (ret < 0) continue; @@ -204,6 +206,8 @@ int parser_etherfabric_service_conf(struct sc_main * sc, struct etherfabric_mana MR_ERROR("The : %s ,No Config The 'type'.", str_conf_section); return RT_ERR; } + if (strcmp(str_buf, "etherfabric") != 0) + continue; ret = MESA_load_profile_string_nodef(sc->local_cfgfile, str_conf_section, "mode", str_buf, sizeof(str_buf)); if (ret < 0) @@ -214,7 +218,7 @@ int parser_etherfabric_service_conf(struct sc_main * sc, struct etherfabric_mana /* Save mode */ if (strcmp(str_buf, "virtual-wire") == 0) { - etherfabric_manage->etherfabric_service_array[i].mode = MODE_VIRTUAL_WIRE; + mode = MODE_VIRTUAL_WIRE; } else { @@ -229,7 +233,6 @@ int parser_etherfabric_service_conf(struct sc_main * sc, struct etherfabric_mana MR_ERROR("The : %s ,No Config The 'listen_ip'.", str_conf_section); return RT_ERR; } - ret = inet_pton(AF_INET, str_ip_addr, &ip_addr); if (ret < 0) { @@ -237,25 +240,19 @@ int parser_etherfabric_service_conf(struct sc_main * sc, struct etherfabric_mana return RT_ERR; } - /* Save listen_ip */ - etherfabric_manage->etherfabric_service_array[i].listen_ip_v4 = ip_addr.s_addr; - ret = MESA_load_profile_uint_def(sc->local_cfgfile, str_conf_section, "listen_port", &listen_port, - MR_ETHERFABRIC_INVALID_CONF_ARG); - if (ret < 0) + MESA_load_profile_uint_def(sc->local_cfgfile, str_conf_section, "listen_port", &listen_port, + MR_ETHERFABRIC_INVALID_CONF_ARG); + if (listen_port == MR_ETHERFABRIC_INVALID_CONF_ARG) { MR_ERROR("The : %s ,No Config The 'listen_port'.", str_conf_section); return RT_ERR; } - if (listen_port > 65535) { MR_ERROR("The : %s ,'listen_port' Is Invalid,The Conf Num Range From 0 to 65535 ", str_conf_section); return RT_ERR; } - /* Save listen_port */ - etherfabric_manage->etherfabric_service_array[i].listen_port = htons((uint16_t)listen_port); - /* Parsing listen_device */ ret = MESA_load_profile_string_nodef(sc->local_cfgfile, str_conf_section, "listen_device", str_listen_device, sizeof(str_listen_device)); @@ -264,7 +261,6 @@ int parser_etherfabric_service_conf(struct sc_main * sc, struct etherfabric_mana MR_ERROR("The : %s ,No Config The 'listen_device'.", str_conf_section); return RT_ERR; } - struct phydev * phydev = phydev_lookup(sc->phydev_main, str_listen_device); if (phydev == NULL) { @@ -273,7 +269,11 @@ int parser_etherfabric_service_conf(struct sc_main * sc, struct etherfabric_mana } /* Save The Listen Device Port Index */ - etherfabric_manage->etherfabric_service_array[i].listen_device_port_id = phydev->port_id; + _etherfabric_service_item->mode = mode; + _etherfabric_service_item->listen_port = htons((uint16_t)listen_port); + _etherfabric_service_item->listen_device_port_id = phydev->port_id; + _etherfabric_service_item->listen_ip_v4 = ip_addr.s_addr; + memcpy(_etherfabric_service_item->name, name, sizeof(name)); es_conf_num++; } diff --git a/service/src/phydev.c b/service/src/phydev.c index 4fdff4e..a113cfd 100644 --- a/service/src/phydev.c +++ b/service/src/phydev.c @@ -1,11 +1,11 @@ /// 物理设备管理器 #include <assert.h> +#include <net/if.h> #include <stdio.h> +#include <sys/ioctl.h> #include <sys/queue.h> #include <unistd.h> -#include <sys/ioctl.h> -#include <net/if.h> #include <rte_bus_pci.h> #include <rte_config.h> @@ -62,8 +62,6 @@ struct phydev_main unsigned int en_early_scan; unsigned int en_load_hwfile; unsigned int en_load_g_cfg; - - }; const char * __str_rssmode(unsigned int rssmode) @@ -109,18 +107,18 @@ static int phydev_info_dump(struct phydev * dev) switch (dev->attribute) { - case MR_DEV_ATTRIBUTE_VIRTUAL_WIRE: - MR_INFO(" Attribute : VirtualWire"); - break; - case MR_DEV_ATTRIBUTE_TAP: - MR_INFO(" Attribute : Tap"); - break; - case MR_DEV_ATTRIBUTE_ROUTE: - MR_INFO(" Attribute : Rout"); - break; - default: - MR_INFO(" Attribute : None"); - break; + case MR_DEV_ATTRIBUTE_VIRTUAL_WIRE: + MR_INFO(" Attribute : VirtualWire"); + break; + case MR_DEV_ATTRIBUTE_TAP: + MR_INFO(" Attribute : Tap"); + break; + case MR_DEV_ATTRIBUTE_ROUTE: + MR_INFO(" Attribute : Rout"); + break; + default: + MR_INFO(" Attribute : None"); + break; } return 0; } @@ -410,7 +408,7 @@ static int phydev_setup_default_flows(struct sc_main * sc, struct phydev_main * attr.priority = 3; memset(&flow_error, 0, sizeof(flow_error)); - //memset(&pattern, 0, sizeof(pattern)); + // memset(&pattern, 0, sizeof(pattern)); memset(&actions, 0, sizeof(actions)); uint16_t target_queue_id[__QGROUP_MAX_QUEUE] = {}; @@ -432,15 +430,15 @@ static int phydev_setup_default_flows(struct sc_main * sc, struct phydev_main * } else if (dev->info.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 = + ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV6_UDP; rss_key = default_sym_rss_key; rss_key_len = sizeof(default_sym_rss_key); } else if (dev->info.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 = + ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV6_UDP; rss_key = NULL; } @@ -481,7 +479,8 @@ static int phydev_setup(struct sc_main * sc, struct phydev_main * ctx, struct ph socket_id_t socket_id = rte_eth_dev_socket_id(dev->port_id); struct rte_mempool * direct_pool = mrb_direct_mempool_locate(sc->mrb_pool_main, dev->str_direct_pool, socket_id, 0); - struct rte_mempool * indirect_pool = mrb_indirect_mempool_locate(sc->mrb_pool_main, dev->str_indirect_pool, socket_id, 0); + struct rte_mempool * indirect_pool = + mrb_indirect_mempool_locate(sc->mrb_pool_main, dev->str_indirect_pool, socket_id, 0); if (direct_pool == NULL || indirect_pool == NULL) { @@ -491,7 +490,6 @@ static int phydev_setup(struct sc_main * sc, struct phydev_main * ctx, struct ph return RT_ERR; } - // 配置端口信息 struct rte_eth_conf local_eth_conf; gen_phydev_ethconf(dev, &local_eth_conf); @@ -731,7 +729,8 @@ int whitelist_phydev_iterate(struct phydev_main * ctx, struct phydev_whitelist * } // 迭代到尾部,返回错误码 - if (*phydev_wh == NULL) return -ENOENT; + if (*phydev_wh == NULL) + return -ENOENT; return 0; } @@ -838,7 +837,7 @@ void phydev_unuse_queue(struct phydev * dev, enum phydev_qgroup_type q_type, que #endif #ifndef PHYDEV_DEFAULT_EN_EARLY_SCAN -#define PHYDEV_DEFAULT_EN_EARLY_SCAN 1 +#define PHYDEV_DEFAULT_EN_EARLY_SCAN 1 #endif #ifndef PHYDEV_DEFAULT_EN_LOAD_HWFILE @@ -934,19 +933,19 @@ void phydev_config_by_g_cfg(struct phydev * phydev, const char * cfg) MESA_load_profile_uint_def(cfg, str_section, "allmulticast", &phydev->allmulticast, 0); // SMARTOFFLOAD MESA_load_profile_uint_def(cfg, str_section, "en_smartoffload", &phydev->en_smartoffload, 0); - //ATTRIBUTE + // ATTRIBUTE ret = MESA_load_profile_string_nodef(cfg, str_section, "attribute", str_attribute, sizeof(str_attribute)); if (ret >= 0) { - if(strcmp(str_attribute, "virtual-wire") == 0) + if (strcmp(str_attribute, "virtual-wire") == 0) { phydev->attribute = MR_DEV_ATTRIBUTE_VIRTUAL_WIRE; } - else if(strcmp(str_attribute, "tap") == 0) + else if (strcmp(str_attribute, "tap") == 0) { phydev->attribute = MR_DEV_ATTRIBUTE_TAP; } - else if(strcmp(str_attribute, "route") == 0) + else if (strcmp(str_attribute, "route") == 0) { phydev->attribute = MR_DEV_ATTRIBUTE_ROUTE; } @@ -977,13 +976,13 @@ int set_virtio_tap_up(const char * virtio_sym) fd = socket(AF_INET, SOCK_DGRAM, 0); strncpy(ifr.ifr_name, virtio_sym, IFNAMSIZ - 1); - if(ioctl(fd, SIOCGIFFLAGS, &ifr) != 0) + if (ioctl(fd, SIOCGIFFLAGS, &ifr) != 0) { return RT_ERR; } ifr.ifr_flags |= IFF_UP | IFF_RUNNING; - if(ioctl(fd, SIOCSIFFLAGS, &ifr) != 0) + if (ioctl(fd, SIOCSIFFLAGS, &ifr) != 0) { return RT_ERR; } @@ -992,13 +991,15 @@ int set_virtio_tap_up(const char * virtio_sym) } /* 通过网卡名从hwfile中提取PCI号 */ -static int phydev_get_pci_info_by_hwfile(struct phydev_main * phydev_main, struct phydev_whitelist * phydev_wh) +static int phydev_get_pci_info_by_hwfile(struct phydev_main * phydev_main, char * str_dev_symbol) { cJSON * j_hwfile = phydev_main->j_hwfile; + struct phydev_whitelist * phydev_wh = NULL; + if (j_hwfile == NULL) { - MR_ERROR("j_hwfile is NULL \n"); - return RT_SUCCESS; + MR_ERROR("j_hwfile is NULL \n"); + return RT_SUCCESS; } /* 在JSON文件中查找设备,根据网卡名称查找 */ @@ -1010,24 +1011,29 @@ static int phydev_get_pci_info_by_hwfile(struct phydev_main * phydev_main, struc MR_VERIFY(j_interface != NULL); /* 如果设备名不匹配则跳过 */ - if (strcmp(j_interface->valuestring,phydev_wh->symbol) !=0) - continue; + if (strcmp(j_interface->valuestring, str_dev_symbol) != 0) + continue; /* 获取PCI号 */ cJSON * j_slot = cJSON_GetObjectItem(j_phydev, "Slot"); MR_VERIFY(j_slot != NULL); + /* 每一个设备对应创建一个phydev_wh */ + phydev_wh = whitelist_phydev_alloc(phydev_main); + MR_VERIFY_MALLOC(phydev_wh); + snprintf(phydev_wh->symbol, sizeof(phydev_wh->symbol), "%s", str_dev_symbol); snprintf(phydev_wh->pci_addr, sizeof(phydev_wh->pci_addr), "%s", j_slot->valuestring); + /* TODO: */ + phydev_wh->mlx5_allow_duplicate_pattern = 0; return RT_SUCCESS; } - MR_ERROR("Phydev Not Found in hwfile : %s \n", phydev_wh->symbol); + MR_ERROR("Phydev Not Found in hwfile : %s \n", str_dev_symbol); return RT_SUCCESS; } /* 早期设备扫描,从HWFILE中获取设备定义的信息 */ static int phydev_early_scan(struct sc_main * sc, struct phydev_main * phydev_main) { - struct phydev_whitelist * phydev_wh = NULL; char str_device[MR_STRING_MAX]; char * str_dev_symbol[MR_TOKENS_MAX]; @@ -1043,19 +1049,12 @@ static int phydev_early_scan(struct sc_main * sc, struct phydev_main * phydev_ma /* 遍历所有dev设备 */ for (int i = 0; i < nr_str_tokens; i++) { - /* 每一个设备对应创建一个phydev_wh */ - phydev_wh = whitelist_phydev_alloc(phydev_main); - MR_VERIFY_MALLOC(phydev_wh); - snprintf(phydev_wh->symbol, sizeof(phydev_wh->symbol), "%s", str_dev_symbol[i]); /* 根据设备名称提取对应的PCI号 */ - int ret = phydev_get_pci_info_by_hwfile(phydev_main, phydev_wh); + int ret = phydev_get_pci_info_by_hwfile(phydev_main, str_dev_symbol[i]); if (ret == RT_ERR) { return RT_ERR; } - - /* TODO: */ - phydev_wh->mlx5_allow_duplicate_pattern = 0; } return RT_SUCCESS; @@ -1154,7 +1153,8 @@ static int phydev_scan_virtio_user(struct sc_main * sc, struct phydev_main * phy snprintf(vdev_name, sizeof(vdev_name) - 1, "virtio_user%d", i); char vdev_args[MR_STRING_MAX]; - snprintf(vdev_args, sizeof(vdev_args) - 1, "queues=%d,queue_size=1024,path=/dev/vhost-net,iface=%s", sc->nr_io_thread, virtio_syms[i]); + snprintf(vdev_args, sizeof(vdev_args) - 1, "queues=%d,queue_size=1024,path=/dev/vhost-net,iface=%s", + sc->nr_io_thread, virtio_syms[i]); int ret = rte_eal_hotplug_add("vdev", vdev_name, vdev_args); if (ret < 0) @@ -1166,7 +1166,7 @@ static int phydev_scan_virtio_user(struct sc_main * sc, struct phydev_main * phy ret = set_virtio_tap_up(virtio_syms[i]); if (ret < 0) { - MR_ERROR("Cannot Set The Tap Dev Up:%s\n",virtio_syms[i]); + MR_ERROR("Cannot Set The Tap Dev Up:%s\n", virtio_syms[i]); return RT_ERR; } |
