diff options
| author | songyanchao <[email protected]> | 2023-12-14 08:28:19 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2023-12-15 04:03:30 +0000 |
| commit | d50641cd11ae06ef246039d46764d1b1e173cdcb (patch) | |
| tree | f955665eb36afd2886922b6368995f89a1af4393 | |
| parent | bfbc182a7f0e7e5ce2ec41ae47392f287882f37b (diff) | |
✨ feat(TSG-17860): Add processing logic for traffic link id in etherfabric node.
Add processing logic for traffic link id in etherfabric node.
| -rw-r--r-- | app/src/mrb.c | 10 | ||||
| -rw-r--r-- | include/external/marsio.h | 2 | ||||
| -rw-r--r-- | include/internal/mrb_define.h | 2 | ||||
| -rw-r--r-- | service/src/classifier_rule_parser.c | 2 | ||||
| -rw-r--r-- | service/src/node_etherfabric.c | 118 | ||||
| -rw-r--r-- | service/src/node_forwarder.c | 2 | ||||
| -rw-r--r-- | service/src/node_health_check.c | 8 | ||||
| -rw-r--r-- | service/src/node_lb.c | 4 | ||||
| -rw-r--r-- | service/src/node_phydev.c | 3 | ||||
| -rw-r--r-- | tools/tcpdump/pdump.c | 2 |
10 files changed, 33 insertions, 120 deletions
diff --git a/app/src/mrb.c b/app/src/mrb.c index 05e8ffc..49f10c3 100644 --- a/app/src/mrb.c +++ b/app/src/mrb.c @@ -696,7 +696,7 @@ struct mrb_metadata_route_ctx { uint8_t dir; uint16_t ef_link_id; - uint16_t global_link_id; + uint16_t traffic_link_id; uint16_t port_ingress; uint16_t port_egress; uint16_t peer_index; @@ -733,7 +733,7 @@ int marsio_buff_get_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type, route_ctx->port_egress = mrb_metadata->port_egress; route_ctx->peer_index = mrb_metadata->peer_index; route_ctx->ef_link_id = mrb_metadata->ef_link_id; - route_ctx->global_link_id = mrb_metadata->global_link_id; + route_ctx->traffic_link_id = mrb_metadata->traffic_link_id; route_ctx->hash_usr = mbuf->hash.usr; } @@ -780,13 +780,13 @@ int marsio_buff_get_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type, return sizeof(uint16_t); } - case MR_BUFF_GLOBAL_LINK_ID: { + case MR_BUFF_TRAFFIC_LINK_ID: { if (unlikely(sz_data < sizeof(uint16_t))) { return -ENOMEM; } - *(uint16_t *)(data) = (uint16_t)mrb_metadata->global_link_id; + *(uint16_t *)(data) = (uint16_t)mrb_metadata->traffic_link_id; return sizeof(uint16_t); } @@ -856,7 +856,7 @@ int marsio_buff_set_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type, mrb_metadata->port_egress = route_ctx->port_egress; mrb_metadata->peer_index = route_ctx->peer_index; mrb_metadata->ef_link_id = route_ctx->ef_link_id; - mrb_metadata->global_link_id = route_ctx->global_link_id; + mrb_metadata->traffic_link_id = route_ctx->traffic_link_id; mbuf->hash.usr = route_ctx->hash_usr; return 0; } diff --git a/include/external/marsio.h b/include/external/marsio.h index 452eb8c..f353f0e 100644 --- a/include/external/marsio.h +++ b/include/external/marsio.h @@ -114,7 +114,7 @@ enum mr_buff_metadata_type /* etherfabric link id */ MR_BUFF_EF_LINK_ID = 6, /* global link id */ - MR_BUFF_GLOBAL_LINK_ID = 7, + MR_BUFF_TRAFFIC_LINK_ID = 7, /* user 0 */ MR_BUFF_USER_0 = 254 }; diff --git a/include/internal/mrb_define.h b/include/internal/mrb_define.h index 6438256..e55e844 100644 --- a/include/internal/mrb_define.h +++ b/include/internal/mrb_define.h @@ -30,7 +30,7 @@ struct mrb_metadata uint16_t payload_offset; uint16_t user_0; uint16_t ef_link_id; - uint16_t global_link_id; + uint16_t traffic_link_id; /* for EF adapter */ uint16_t peer_index; diff --git a/service/src/classifier_rule_parser.c b/service/src/classifier_rule_parser.c index 32d7c1f..19cf5ab 100644 --- a/service/src/classifier_rule_parser.c +++ b/service/src/classifier_rule_parser.c @@ -626,7 +626,7 @@ void classifier_rule_dump(struct rule_list_parsed * rule_list) unsigned int max_len = sizeof(str_rule_info) - 1; struct rule_field_parser * rule = &rule_list->rules[index]; - int len = snprintf(str_rule_info, max_len, "Pkt classifier rule, rule id:%u, ", rule->rule_id); + int len = snprintf(str_rule_info, max_len, "Pkt classifier, rule id:%u, ", rule->rule_id); if (rule->ether_type == RTE_ETHER_TYPE_IPV4) { struct in_addr src_addr, dst_addr; diff --git a/service/src/node_etherfabric.c b/service/src/node_etherfabric.c index 7faed79..2715ed1 100644 --- a/service/src/node_etherfabric.c +++ b/service/src/node_etherfabric.c @@ -3,6 +3,7 @@ #include <cJSON.h> #include <common.h> #include <ldbc.h> +#include <link_db.h> #include <mrb_define.h> #include <netinet/in.h> #include <rte_graph.h> @@ -64,14 +65,6 @@ struct peer struct rte_ether_addr ef_mac_addr; } __rte_cache_aligned; -/* Global link struct */ -struct global_link -{ - uint16_t global_link_id; - uint16_t ef_link_id; - uint32_t ef_ip_addr; -}; - /* Etherfabric adapter management struct */ struct ef_mgr { @@ -83,7 +76,7 @@ struct ef_mgr struct rte_hash * peer_hash; struct ef_adapter * ef_adapters; struct peer peers[1024]; - struct global_link global_links[32]; + struct link_db_ctx * link_db_ctx; }; /* Etherfabric ingress stat struct */ @@ -278,64 +271,6 @@ int parser_ef_adapter_config(struct sc_main * sc, struct ef_mgr * ef_mgr) return RT_SUCCESS; } -/* Parsing the global link id config */ -int parser_global_link_config(struct sc_main * sc, struct ef_mgr * ef_mgr) -{ - /* Parsing all config */ - int ret; - uint16_t nr_global_links = 0; - for (int index = 0; index < RTE_DIM(ef_mgr->global_links); index++) - { - char str_conf_section[MR_STRING_MAX] = {}; - snprintf(str_conf_section, sizeof(str_conf_section), "global_link_config:%d", index); - - /* Get global link id */ - uint32_t global_link_id = 0; - ret = MESA_load_profile_uint_nodef(sc->local_cfgfile, str_conf_section, "global_link_id", &global_link_id); - if (ret < 0) - continue; - - /* Get etherfabric ip addr */ - char str_ef_ip_addr[MR_STRING_MAX] = {}; - ret = MESA_load_profile_string_nodef(sc->local_cfgfile, str_conf_section, "ef_ip_addr", str_ef_ip_addr, - sizeof(str_ef_ip_addr)); - if (ret < 0) - { - MR_ERROR("The : %s ,No config the 'ef_ip_addr'.", str_conf_section); - return RT_ERR; - } - - /* Get etherfabric ip addr */ - uint32_t ef_ip_addr = 0; - ret = inet_pton(AF_INET, str_ef_ip_addr, &ef_ip_addr); - if (ret < 0) - { - MR_ERROR("The : %s ,No config the 'ef_ip_addr'.", str_conf_section); - return RT_ERR; - } - - /* Get etherfabric link id */ - uint32_t ef_link_id = 0; - ret = MESA_load_profile_uint_nodef(sc->local_cfgfile, str_conf_section, "ef_link_id", &ef_link_id); - if (ret < 0) - { - MR_ERROR("The : %s ,No config the 'ef_link_id'.", str_conf_section); - return RT_ERR; - } - - /* Save the global link id */ - struct global_link * global_link = &ef_mgr->global_links[nr_global_links]; - global_link->global_link_id = global_link_id; - global_link->ef_link_id = ef_link_id; - global_link->ef_ip_addr = ef_ip_addr; - nr_global_links++; - } - - /* Save the global link id num */ - ef_mgr->nr_global_links = nr_global_links; - return RT_SUCCESS; -} - /* Dump etherfabric adapter config */ void dump_ef_adapter_config(struct ef_mgr * ef_mgr) { @@ -366,22 +301,6 @@ void dump_ef_adapter_config(struct ef_mgr * ef_mgr) } } -/* Dump global link config */ -void dump_global_link_config(struct ef_mgr * ef_mgr) -{ - if (ef_mgr->nr_global_links == 0) - return; - - for (int i = 0; i < ef_mgr->nr_global_links; i++) - { - struct global_link * global_link = &ef_mgr->global_links[i]; - char str_addr[INET_ADDRSTRLEN]; - inet_ntop(AF_INET, &global_link->ef_ip_addr, str_addr, sizeof(str_addr)); - MR_INFO("Global link, config id: %u, etherfabric ip addr: %s, etherfabric link id:%u, global link id:%u", i, - str_addr, global_link->ef_link_id, global_link->global_link_id); - } -} - /* Init etherfabric */ int ef_init(struct sc_main * sc) { @@ -408,12 +327,13 @@ int ef_init(struct sc_main * sc) /* Dump the etherfabric adapter config */ dump_ef_adapter_config(ef_mgr); - /* Parsing the global link config */ - if (parser_global_link_config(sc, ef_mgr) != RT_SUCCESS) + /* Link db mgr create */ + ef_mgr->link_db_ctx = link_db_create(sc, LINK_DB_TYPE_EF); + if (ef_mgr->link_db_ctx == NULL) return RT_ERR; - /* Dump the global link config */ - dump_global_link_config(ef_mgr); + if (link_db_config_parse(sc, ef_mgr->link_db_ctx) == RT_ERR) + return RT_ERR; /* Setup peer hash */ if (peer_setup_hash(ef_mgr) != RT_SUCCESS) @@ -482,20 +402,6 @@ int peer_lookup_and_add(struct rte_hash * peer_hash, struct peer * peers, struct return ret; } -/* Global link id lookup */ -uint16_t global_link_id_lookup(struct ef_mgr * ef_mgr, uint16_t ef_link_id, uint32_t ef_ip_addr) -{ - for (uint16_t index = 0; index < ef_mgr->nr_global_links; index++) - { - struct global_link * global_link = &ef_mgr->global_links[index]; - if (ef_link_id == global_link->ef_link_id && ef_ip_addr == global_link->ef_ip_addr) - { - return global_link->global_link_id; - } - } - return UINT16_MAX; -} - static inline void vxlan_encap_forwarded_pkt(struct rte_mbuf * mbuf) { /* swap eth_hdr */ @@ -582,14 +488,18 @@ static __rte_always_inline uint16_t ef_ingress_node_process(struct rte_graph * g goto node_enqueue; } - /* Global link id lookup */ - uint16_t global_link_id = global_link_id_lookup(ef_mgr, outer_g_vxlan_hdr->link_id, outer_ipv4_hdr->src_addr); + /* Traffic link id lookup */ + uint16_t result; + struct link_db_match_field match_field; + match_field.ef_link_id = outer_g_vxlan_hdr->link_id; + match_field.ef_ip_addr = outer_ipv4_hdr->src_addr; + link_db_match(ef_mgr->link_db_ctx, &match_field, 1, &result); /* Fill peer index and dir */ private_ctrlzone->adapter_type = ADAPTER_TYPE_EF; private_ctrlzone->adapter_id = adapter_id; private_ctrlzone->ef_link_id = outer_g_vxlan_hdr->link_id; - private_ctrlzone->global_link_id = global_link_id; + private_ctrlzone->traffic_link_id = result; private_ctrlzone->dir = outer_g_vxlan_hdr->dir; private_ctrlzone->peer_index = (uint16_t)peer_index; diff --git a/service/src/node_forwarder.c b/service/src/node_forwarder.c index bc75abf..1a9c286 100644 --- a/service/src/node_forwarder.c +++ b/service/src/node_forwarder.c @@ -72,7 +72,7 @@ int sid_check(uint32_t sid) void forwarder_table_inserter(uint16_t sid, uint16_t type) { char str_forwarder[1024] = {}; - int len = snprintf(str_forwarder, sizeof(str_forwarder), "new entry in forwarder table created, sid=%u", sid); + int len = snprintf(str_forwarder, sizeof(str_forwarder), "New entry in forwarder table created, sid=%u", sid); switch (type) { case FORWARDER_TYPE_LB: diff --git a/service/src/node_health_check.c b/service/src/node_health_check.c index 682b99c..3796591 100644 --- a/service/src/node_health_check.c +++ b/service/src/node_health_check.c @@ -285,10 +285,10 @@ void private_health_check_func(struct health_check_session * _session) switch (remote_state) { case REMOTE_UP: - MR_INFO("health check, name=%s, device=%s, remote_state=Up", _session->name, _session->device); + MR_INFO("Health check, name=%s, device=%s, remote_state=Up", _session->name, _session->device); break; case REMOTE_DOWN: - MR_INFO("health check, name=%s, device=%s, remote_state=Down", _session->name, _session->device); + MR_INFO("Health check, name=%s, device=%s, remote_state=Down", _session->name, _session->device); break; } } @@ -425,7 +425,7 @@ int parse_health_check_config(struct sc_main * sc, struct health_check_main * _h void dump_health_check_session(struct health_check_session * _session, int session_id) { char str_session_info[1024] = {}; - int len = snprintf(str_session_info, sizeof(str_session_info), "health check, id=%u", session_id); + int len = snprintf(str_session_info, sizeof(str_session_info), "Health check, id=%u", session_id); len += snprintf(str_session_info + len, sizeof(str_session_info) - len, ", name=%s", _session->name); len += snprintf(str_session_info + len, sizeof(str_session_info) - len, ", dev_name=%s", _session->device); len += snprintf(str_session_info + len, sizeof(str_session_info) - len, ", dev_id=%u", _session->port_id); @@ -452,7 +452,7 @@ void dump_health_check_config(struct health_check_main * _health_check_main) MR_INFO("\n"); /* Dump the health check config */ - MR_INFO("health check session total number: %u", _health_check_main->total_session_num); + MR_INFO("Health check session total number: %u", _health_check_main->total_session_num); for (int index = 0; index < _health_check_main->total_session_num; index++) { struct health_check_session * _session = &_health_check_main->sessions[index]; diff --git a/service/src/node_lb.c b/service/src/node_lb.c index 3fffa32..c62e4fe 100644 --- a/service/src/node_lb.c +++ b/service/src/node_lb.c @@ -395,7 +395,7 @@ void dump_lb_config(struct lb_management * lb_manage) return; MR_INFO("\n"); - MR_INFO("load balance config, total_num=%u, sid_num=%u, sid_start=%u, sid_end=%u", lb_manage->nr_group, + MR_INFO("Load balance config, total_num=%u, sid_num=%u, sid_start=%u, sid_end=%u", lb_manage->nr_group, lb_manage->nr_sid, lb_manage->sid_start, lb_manage->sid_end); for (int i = 0; i < MR_LB_MAX_GROUP; i++) @@ -406,7 +406,7 @@ void dump_lb_config(struct lb_management * lb_manage) continue; char str_config_info[2048]; - int len = snprintf(str_config_info, sizeof(str_config_info), "load balance, id=%u", lb_groups->lb_group_id); + int len = snprintf(str_config_info, sizeof(str_config_info), "Load balance, id=%u", lb_groups->lb_group_id); switch (lb_groups->group_mode) { case GROUP_MODE_BALANCE: diff --git a/service/src/node_phydev.c b/service/src/node_phydev.c index c929114..278af63 100644 --- a/service/src/node_phydev.c +++ b/service/src/node_phydev.c @@ -318,6 +318,9 @@ static __rte_always_inline uint16_t dpdk_dev_rx_node_process(struct rte_graph * mrb_meta->port_ingress = ctx->dev_desc->port_id; mrb_meta->port_egress = UINT16_MAX; + /* Init the traffic link id */ + mrb_meta->traffic_link_id = UINT16_MAX; + /* Parser Pkt */ struct pkt_parser pkt_parser; pkt_parser_init(&pkt_parser, &mrb_meta->pkt_parser_result, LAYER_TYPE_ALL, MR_PKT_PARSER_LAYERS_MAX); diff --git a/tools/tcpdump/pdump.c b/tools/tcpdump/pdump.c index 5916dc2..bdabdd0 100644 --- a/tools/tcpdump/pdump.c +++ b/tools/tcpdump/pdump.c @@ -593,7 +593,7 @@ int mr_pcapng_add_opt(struct rte_mbuf * mbuf, uint16_t port_id, uint32_t rx_tx_f len = snprintf(str_dir, str_maxlen, "dir:%u", mrb_metadata->dir); len += snprintf(str_dir + len, str_maxlen - len, ", ef_link_id:%u", mrb_metadata->ef_link_id); - len += snprintf(str_dir + len, str_maxlen - len, ", global_link_id:%u", mrb_metadata->global_link_id); + len += snprintf(str_dir + len, str_maxlen - len, ", traffic_link_id:%u", mrb_metadata->traffic_link_id); len += snprintf(str_dir + len, str_maxlen - len, ", ef_peer_id:%u", mrb_metadata->peer_index); len = snprintf(str_sid_raw, str_maxlen - len, "sid raw head:%u", sid_list->head); |
