summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2022-09-07 04:13:13 +0000
committersongyanchao <[email protected]>2022-09-07 04:13:13 +0000
commitf31c97a5918bf615b89cf5688975a6cee5fa9d8f (patch)
treeee9858d40c89f9da7812dbb7082de50477df6e84
parentaa4c1f9a13c4c2db968e804bf313000d99820aea (diff)
🎈 perf(TSG-11887): bfd node 适配eth-egress node
bfd node 适配eth-egress node
-rw-r--r--service/include/sc_node_common.h7
-rw-r--r--service/src/node_bfd.c117
2 files changed, 39 insertions, 85 deletions
diff --git a/service/include/sc_node_common.h b/service/include/sc_node_common.h
index 35a6b60..3b2f4b3 100644
--- a/service/include/sc_node_common.h
+++ b/service/include/sc_node_common.h
@@ -57,13 +57,6 @@ enum
MR_PARSE_G_VXLAN = 1 << 3,
};
-/* Egress Port Type */
-enum
-{
- MR_NODE_COMMON_EGRESS_PORT_NOT_IS_SHMDEV = 0,
- MR_NODE_COMMON_EGRESS_PORT_IS_SHMDEV
-};
-
/* Pkt Get Head Struct */
struct pkt_head_info
{
diff --git a/service/src/node_bfd.c b/service/src/node_bfd.c
index d5c1807..1abcb1b 100644
--- a/service/src/node_bfd.c
+++ b/service/src/node_bfd.c
@@ -51,13 +51,16 @@ do
} while(0)
/* Bfd Next Node */
-enum {
+enum
+{
BFD_NEXT_PKT_DROP = 0,
+ BFD_NEXT_ETH_EGRESS,
BFD_NEXT_MAX
};
/* Bfd State */
-enum {
+enum
+{
BFD_STATE_ADMINDOWN = 0,
BFD_STATE_DOWN,
BFD_STATE_INIT,
@@ -106,7 +109,6 @@ struct bfd_stat_per_lcore
/* Bfd Main Struct */
struct node_bfd_main
{
- uint16_t port_id_to_edge_node[MR_PHYDEV_MAX];
struct bfd_stat_per_lcore graph_stat[RTE_MAX_LCORE];
};
@@ -114,36 +116,6 @@ struct node_bfd_main
static struct node_bfd_main * global_bfd_main = NULL;
/************************************* Bfd Config **************************************/
-/* Ingress Port To Tx Node Index Map Table Init */
-static void port_tx_map_init(struct sc_main * sc,struct node_bfd_main * bfd_main)
-{
- uint32_t next_edges_count = 0;
- rte_node_t bfd_node_id = 0;
- char edge_node_name[MR_SYMBOL_MAX];
- char ** next_edges = NULL;
- struct phydev * phydev_iter = NULL;
-
- /* Create 'Port Id To Tx Node Index' Table */
- bfd_node_id = rte_node_from_name("bfd");
- next_edges_count = rte_node_edge_get(bfd_node_id, NULL);
- next_edges = malloc(next_edges_count);
- next_edges_count = rte_node_edge_get(bfd_node_id, next_edges);
-
- while (phydev_iterate(sc->phydev_main, &phydev_iter) >= 0)
- {
- snprintf(edge_node_name, sizeof(edge_node_name), "phydev_tx-%s",phydev_iter->symbol);
-
- for (int i = 0; i < next_edges_count; i++)
- {
- if (strncmp(next_edges[i],edge_node_name,sizeof(edge_node_name)) == 0)
- {
- bfd_main->port_id_to_edge_node[phydev_iter->port_id] = i;
- break;
- }
- }
- }
-}
-
/* Init Bfd Servicd */
int bfd_init(struct sc_main * sc)
{
@@ -151,8 +123,6 @@ int bfd_init(struct sc_main * sc)
bfd_main = ZMALLOC(sizeof(struct node_bfd_main));
MR_VERIFY_MALLOC(bfd_main);
-
- port_tx_map_init(sc,bfd_main);
sc->bfd_node_main = bfd_main;
global_bfd_main = bfd_main;
return RT_SUCCESS;
@@ -226,7 +196,7 @@ static __rte_always_inline uint16_t bfd_node_process(struct rte_graph * graph, s
n_left_from = cnt;
pkts = (struct rte_mbuf **)objs;
from = objs;
- next_index = BFD_NEXT_PKT_DROP;
+ next_index = BFD_NEXT_ETH_EGRESS;
bfd_main = global_bfd_main;
gid = graph->id;
@@ -293,7 +263,9 @@ static __rte_always_inline uint16_t bfd_node_process(struct rte_graph * graph, s
/* Update prev_tsc */
MR_BFD_STAT_UPDATE_TSC_FOR_SESSION_ID(bfd_main,gid,bfd_session_id,prev_tsc,rte_rdtsc());
/* From Ingress Port Id Get Next Node Index (TX) */
- next0 = bfd_main->port_id_to_edge_node[ingress_port_id];
+ private_ctrlzone->port_egress = ingress_port_id;
+ private_ctrlzone->port_egress_is_shmdev = 0;
+ next0 = BFD_NEXT_ETH_EGRESS;
goto node_enqueue;
exception_handling:
@@ -323,7 +295,6 @@ node_enqueue:
for (uint16_t i = 0; i < last_spec; i++)
rte_node_enqueue_x1(graph, node, next_index, from[i]);
}
-
return cnt;
}
@@ -335,9 +306,9 @@ static struct rte_node_register bfd_node_base = {
.nb_edges = BFD_NEXT_MAX,
.next_nodes = {
[BFD_NEXT_PKT_DROP] = "pkt_drop",
+ [BFD_NEXT_ETH_EGRESS] = "eth_egress",
},
};
-
RTE_NODE_REGISTER(bfd_node_base);
/************************************** Bfd Statistics **************************************/
@@ -358,37 +329,32 @@ cJSON * bfd_node_monit_loop(struct sc_main * sc)
struct bfd_stat_per_lcore * stat_item = &bfd_main->graph_stat[gid];
stats = stat_item->total_pkts;
- if (stats > 0)
+ if (stats == 0)
+ continue;
+
+ graph_obj = cJSON_CreateObject();
+ cJSON_AddNumberToObject(graph_obj, "total_pkts", stats);
+ stats = stat_item->invalid_pkts;
+ cJSON_AddNumberToObject(graph_obj, "invalid_pkts", stats);
+ stats = stat_item->no_support_ipv6_pkts;
+ cJSON_AddNumberToObject(graph_obj, "no_support_ipv6_pkts", stats);
+ stats = stat_item->no_free_session_id;
+ cJSON_AddNumberToObject(graph_obj, "no_free_session_id", stats);
+ for (session_index = 0; session_index < MR_BFD_MAX_SESSION_NUM; session_index++)
{
- graph_obj = cJSON_CreateObject();
- cJSON_AddNumberToObject(graph_obj, "total_pkts", stats);
- stats = stat_item->invalid_pkts;
- cJSON_AddNumberToObject(graph_obj, "invalid_pkts", stats);
- stats = stat_item->no_support_ipv6_pkts;
- cJSON_AddNumberToObject(graph_obj, "no_support_ipv6_pkts", stats);
- stats = stat_item->no_free_session_id;
- cJSON_AddNumberToObject(graph_obj, "no_free_session_id", stats);
-
- for (session_index = 0; session_index < MR_BFD_MAX_SESSION_NUM; session_index++)
+ struct bfd_stat_for_session * session_stat_item = &stat_item->stat_for_session[session_index];
+ stats = session_stat_item->total_pkts;
+ if (stats > 0)
{
- struct bfd_stat_for_session * session_stat_item = &stat_item->stat_for_session[session_index];
- stats = session_stat_item->total_pkts;
- if (stats > 0)
- {
- graph_session_obj = cJSON_CreateObject();
- cJSON_AddNumberToObject(graph_session_obj, "bfd_session_id", session_index);
- cJSON_AddNumberToObject(graph_session_obj, "total_pkts", stats);
- stats = session_stat_item->no_bfd_pkts;
- cJSON_AddNumberToObject(graph_session_obj, "no_bfd_pkts", stats);
- sprintf(bfd_session_id,"bfd-session-%u",session_index);
- cJSON_AddItemToObject(graph_obj,bfd_session_id,graph_session_obj);
- }
+ graph_session_obj = cJSON_CreateObject();
+ cJSON_AddNumberToObject(graph_session_obj, "bfd_session_id", session_index);
+ cJSON_AddNumberToObject(graph_session_obj, "total_pkts", stats);
+ stats = session_stat_item->no_bfd_pkts;
+ cJSON_AddNumberToObject(graph_session_obj, "no_bfd_pkts", stats);
+ sprintf(bfd_session_id,"bfd-session-%u",session_index);
+ cJSON_AddItemToObject(graph_obj,bfd_session_id,graph_session_obj);
}
}
- else
- {
- continue;
- }
cJSON_AddNumberToObject(graph_obj, "graph_id", gid);
sprintf(graph_index,"graph-%u",graph_num);
@@ -406,23 +372,18 @@ cJSON * bfd_node_monit_loop(struct sc_main * sc)
struct bfd_stat_per_lcore * stat_item = &bfd_main->graph_stat[gid];
stats = stat_item->total_pkts;
+ if (stats == 0)
+ continue;
+ struct bfd_stat_for_session * session_stat_item = &stat_item->stat_for_session[session_index];
+ stats = session_stat_item->total_pkts;
if (stats > 0)
{
- struct bfd_stat_for_session * session_stat_item = &stat_item->stat_for_session[session_index];
- stats = session_stat_item->total_pkts;
- if (stats > 0)
+ if (session_stat_item->prev_tsc > max_tsc)
{
- if (session_stat_item->prev_tsc > max_tsc)
- {
- max_tsc = session_stat_item->prev_tsc;
- newest_gid = gid;
- }
+ max_tsc = session_stat_item->prev_tsc;
+ newest_gid = gid;
}
}
- else
- {
- continue;
- }
}
if(max_tsc != 0)