diff options
| -rw-r--r-- | service/include/sc_node_common.h | 7 | ||||
| -rw-r--r-- | service/include/sc_pdump.h | 6 | ||||
| -rw-r--r-- | service/src/node_lb.c | 16 | ||||
| -rw-r--r-- | service/src/sc_node_common.c | 22 |
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; +} |
