diff options
-rw-r--r-- | src/plugins/ioam/analyse/ioam_analyse.h | 10 | ||||
-rw-r--r-- | src/plugins/ioam/analyse/ioam_summary_export.c | 2 | ||||
-rw-r--r-- | src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c | 11 |
3 files changed, 15 insertions, 8 deletions
diff --git a/src/plugins/ioam/analyse/ioam_analyse.h b/src/plugins/ioam/analyse/ioam_analyse.h index a416cb1a597..d5b6fbe52a9 100644 --- a/src/plugins/ioam/analyse/ioam_analyse.h +++ b/src/plugins/ioam/analyse/ioam_analyse.h @@ -131,6 +131,9 @@ ip6_ioam_analyse_calc_delay (ioam_trace_hdr_t * trace, u16 trace_len) u32 start_time, end_time; size_of_traceopt_per_node = fetch_trace_data_size (trace->ioam_trace_type); + // Unknown trace type + if (size_of_traceopt_per_node == 0) + return 0; size_of_all_traceopts = trace_len; /*ioam_trace_type,data_list_elts_left */ num_nodes = (u8) (size_of_all_traceopts / size_of_traceopt_per_node); @@ -140,7 +143,7 @@ ip6_ioam_analyse_calc_delay (ioam_trace_hdr_t * trace, u16 trace_len) start_elt = trace->elts; end_elt = trace->elts + - (size_of_traceopt_per_node * (num_nodes - 1) / sizeof (u32)); + (u32) (size_of_traceopt_per_node * (num_nodes - 1) / sizeof (u32)); if (trace->ioam_trace_type & BIT_TTL_NODEID) { @@ -180,6 +183,9 @@ ip6_ioam_analyse_hbh_trace (ioam_analyser_data_t * data, trace_data = &data->trace_data; size_of_traceopt_per_node = fetch_trace_data_size (trace->ioam_trace_type); + // Unknown trace type + if (size_of_traceopt_per_node == 0) + goto DONE; size_of_all_traceopts = trace_len; ptr = (u8 *) trace->elts; @@ -281,7 +287,7 @@ found_match: trace_record->mean_delay = (u32) ((sum + delay) / (data->seqno_data.rx_packets + 1)); } - +DONE: *(data->writer_lock) = 0; return 0; } diff --git a/src/plugins/ioam/analyse/ioam_summary_export.c b/src/plugins/ioam/analyse/ioam_summary_export.c index 0056732327c..afda3099c9a 100644 --- a/src/plugins/ioam/analyse/ioam_summary_export.c +++ b/src/plugins/ioam/analyse/ioam_summary_export.c @@ -312,7 +312,6 @@ ioam_send_flows (flow_report_main_t * frm, flow_report_t * fr, tp = vlib_buffer_get_current (b0); ip = &tp->ip4; - udp = &tp->udp; h = &tp->ipfix.h; s = &tp->ipfix.s; @@ -394,6 +393,7 @@ ioam_flow_create (u8 del) u32 domain_id = 0; flow_report_main_t *frm = &flow_report_main; + memset (&args, 0, sizeof (args)); args.rewrite_callback = ioam_template_rewrite; args.flow_data_callback = ioam_send_flows; del ? (args.is_add = 0) : (args.is_add = 1); diff --git a/src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c b/src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c index e51b585e1be..9412885da65 100644 --- a/src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c +++ b/src/vnet/lisp-gpe/lisp_gpe_fwd_entry.c @@ -982,15 +982,16 @@ lisp_gpe_nsh_update_fwding (lisp_gpe_fwd_entry_t * lfe) /* We have only one nsh-lisp interface (no NSH virtualization) */ hip = hash_get (lgm->nsh_ifaces.hw_if_index_by_dp_table, 0); - hi = vnet_get_hw_interface (lgm->vnet_main, hip[0]); - - dpo_stack_from_node (hi->tx_node_index, &lfe->nsh.choice, &dpo); - + if (hip) + { + hi = vnet_get_hw_interface (lgm->vnet_main, hip[0]); + dpo_stack_from_node (hi->tx_node_index, &lfe->nsh.choice, &dpo); + } /* add entry to nsh lisp fib */ lisp_nsh_fib_add_del_entry (fid_addr_nsh (&lfe->key->rmt), lfe - lgm->lisp_fwd_entry_pool, 1); - dpo_reset (&dpo); + } /** |