summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/include/sc_node_common.h7
-rw-r--r--service/include/sc_pdump.h6
-rw-r--r--service/src/node_lb.c16
-rw-r--r--service/src/sc_node_common.c22
4 files changed, 44 insertions, 7 deletions
diff --git a/service/include/sc_node_common.h b/service/include/sc_node_common.h
index 14b7d2e..b9fbb31 100644
--- a/service/include/sc_node_common.h
+++ b/service/include/sc_node_common.h
@@ -162,3 +162,10 @@ uint32_t sid_handle_sid_end_get(struct sid_handle * sid_handle);
#define SC_ADAPTERS_MAX 128
int adapters_max_get(struct sc_main * sc, const char * key, uint32_t * adapters_max_out);
+
+#define METADATA_INFO \
+ "dir:%u, nf_create:%u, health_check:%u, is_ctrlbuf:%u, adapter_type:%u, adapter_id:%u, payload_offset:%u, " \
+ "user_0:%u, ef_link_id:%u, traffic_link_id:%u, ef_peer_index:%u, port_ingress:%u, port_egress:%u, " \
+ "egress_action:%u, session_id:%lu, cur_sid:%u, sids:%u,%u,%u,%u,%u,%u,%u,%u, measurement_type:%u.\n"
+
+void mrb_metadata_pktmbuf_dump(const struct rte_mbuf * m);
diff --git a/service/include/sc_pdump.h b/service/include/sc_pdump.h
index bb9e41b..ae58ace 100644
--- a/service/include/sc_pdump.h
+++ b/service/include/sc_pdump.h
@@ -1,6 +1,7 @@
#pragma once
#include <sc_common.h>
+#include <sc_node_common.h>
/* Mr pdump */
/* Used for the multi-process communication */
@@ -16,11 +17,6 @@
#define MR_PDUMP_RING_NAME_SIZE 256
#define MR_PDUMP_RING_SIZE 16384
-#define METADATA_INFO \
- " dir:%u, nf_create:%u, link_id:%u, is_ctrlbuf:%u, payload_offset:%u, session_id:%lu, start_sid:%u, nr_sid:%u, " \
- "cur_sid:%u, sids:[%u],[%u],[%u],[%u],[%u],[%u],[%u],[%u], port_id_ingress:%u, port_id_egress:%u, " \
- "ef_peer_index:%u "
-
enum
{
MR_PDUMP_SUCCESS = 0,
diff --git a/service/src/node_lb.c b/service/src/node_lb.c
index cb4b0cb..3d25dc9 100644
--- a/service/src/node_lb.c
+++ b/service/src/node_lb.c
@@ -472,8 +472,8 @@ static __rte_always_inline void gen_store_trace_info(struct rte_node * node, str
}
/* Populate the lb information */
- len +=
- snprintf(str_record + len, sizeof(str_record) - len, ", cur sid:%u, lb id:%u", lb_group->sid, lb_group->index);
+ len += snprintf(str_record + len, sizeof(str_record) - len, ", cur sid:%u, lb id:%u", lb_group->sid,
+ lb_group->index);
/* Emit the trace record */
struct dp_trace_record_meta meta = {
@@ -518,6 +518,17 @@ static __rte_always_inline uint16_t lb_node_process(struct rte_graph * graph, st
assert(lb_group_index < MR_LB_MAX_GROUP);
assert(lb_group_index < lb_main->nr_group);
+ if (unlikely(lb_group_index >= lb_main->nr_group))
+ {
+ MR_ERROR("The lb group index is invalid: %u, cur_sid: %u, sid_start: %u, nr_group: %u.", lb_group_index,
+ mrb_meta->cur_sid, sid_start, lb_main->nr_group);
+
+ mrb_metadata_pktmbuf_dump(mbuf);
+
+ next_node_index = LB_NEXT_PKT_DROP;
+ goto node_enqueue;
+ }
+
lb_group = &lb_main->lb_groups[lb_group_index];
last_sid = mrb_meta->cur_sid;
}
@@ -543,6 +554,7 @@ static __rte_always_inline uint16_t lb_node_process(struct rte_graph * graph, st
gen_store_trace_info(node, mbuf, next_node_index, lb_group);
}
+ node_enqueue:
/* Batch processing */
if (unlikely(batch_next_node_index != next_node_index))
{
diff --git a/service/src/sc_node_common.c b/service/src/sc_node_common.c
index 5597bd4..3fbf320 100644
--- a/service/src/sc_node_common.c
+++ b/service/src/sc_node_common.c
@@ -137,3 +137,25 @@ int adapters_max_get(struct sc_main * sc, const char * key, uint32_t * adapters_
return RT_SUCCESS;
}
+
+void mrb_metadata_pktmbuf_dump(const struct rte_mbuf * m)
+{
+ char str_metadata[1024] = {};
+
+ struct mrb_metadata * mrb_meta = mrbuf_cz_data(m, MR_NODE_CTRLZONE_ID);
+
+ snprintf(str_metadata, sizeof(str_metadata), METADATA_INFO, mrb_meta->dir, mrb_meta->packet_create_from_nf,
+ mrb_meta->health_check, mrb_meta->is_ctrlbuf, mrb_meta->adapter_type, mrb_meta->adapter_id,
+ mrb_meta->payload_offset, mrb_meta->user_0, mrb_meta->ef_link_id, mrb_meta->traffic_link_id,
+ mrb_meta->ef_peer_index, mrb_meta->port_ingress, mrb_meta->port_egress, mrb_meta->egress_action,
+ mrb_meta->session_id, mrb_meta->cur_sid, mrb_meta->sid_list.sids[0], mrb_meta->sid_list.sids[1],
+ mrb_meta->sid_list.sids[2], mrb_meta->sid_list.sids[3], mrb_meta->sid_list.sids[4],
+ mrb_meta->sid_list.sids[5], mrb_meta->sid_list.sids[6], mrb_meta->sid_list.sids[7],
+ mrb_meta->measurement_type);
+
+ MR_ERROR("The pkt metadata: %s", str_metadata);
+
+ rte_pktmbuf_dump(stderr, m, rte_pktmbuf_data_len(m));
+
+ return;
+}