summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2022-09-19 02:25:20 +0000
committersongyanchao <[email protected]>2022-09-19 02:25:20 +0000
commit7d8d5398f44ac254d2d260e2d537cf2c36829cf9 (patch)
tree95f892f079c234899dec2200f05d3e4e867feab6
parentd3d8f3a97c8049dfc749b3b288c399ba60fa0b1c (diff)
🎈 perf(TSG-11990): 修改Etherfabric Service Rule字段,解决EAL启动参数异常问题
修改Etherfabric Service Rule字段,解决EAL启动参数异常问题
-rw-r--r--conf/mrglobal.conf2
-rw-r--r--service/src/node_etherfabric.c34
-rw-r--r--service/src/phydev.c96
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 = &etherfabric_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;
}