diff options
Diffstat (limited to 'service/src/node_lb.c')
| -rw-r--r-- | service/src/node_lb.c | 16 |
1 files changed, 14 insertions, 2 deletions
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)) { |
