X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip4_punt_drop.c;h=4e74963f742044a69731a9ab88248ed6b9c9d0da;hb=refs%2Fchanges%2F81%2F8781%2F23;hp=ceb1bb8f2514305135802886590bad0b8aad44c8;hpb=a3611a70347d870ef4d657e010a1fe736a9fdd72;p=vpp.git diff --git a/src/vnet/ip/ip4_punt_drop.c b/src/vnet/ip/ip4_punt_drop.c index ceb1bb8f251..4e74963f742 100644 --- a/src/vnet/ip/ip4_punt_drop.c +++ b/src/vnet/ip/ip4_punt_drop.c @@ -115,6 +115,7 @@ format_ip_punt_redirect_trace (u8 * s, va_list * args) ip_punt_redirect_t ip4_punt_redirect_cfg = { .any_rx_sw_if_index = { .tx_sw_if_index = ~0, + .adj_index = ADJ_INDEX_INVALID, }, }; /* *INDENT-ON* */ @@ -309,6 +310,7 @@ VLIB_CLI_COMMAND (ip4_punt_policer_command, static) = */ ip_punt_redirect_rx_t uninit_rx_redirect = { .tx_sw_if_index = ~0, + .adj_index = ADJ_INDEX_INVALID, }; void @@ -351,6 +353,9 @@ ip_punt_redirect_del (ip_punt_redirect_t * cfg, u32 rx_sw_if_index) old = &cfg->redirect_by_rx_sw_if_index[rx_sw_if_index]; } + if ((old == NULL) || (old->adj_index == ADJ_INDEX_INVALID)) + return; + adj_unlock (old->adj_index); *old = uninit_rx_redirect; } @@ -385,8 +390,8 @@ ip4_punt_redirect_cmd (vlib_main_t * vm, { unformat_input_t _line_input, *line_input = &_line_input; clib_error_t *error = 0; - u32 rx_sw_if_index; - u32 tx_sw_if_index; + u32 rx_sw_if_index = 0; + u32 tx_sw_if_index = 0; ip46_address_t nh; vnet_main_t *vnm; u8 is_add; @@ -424,9 +429,19 @@ ip4_punt_redirect_cmd (vlib_main_t * vm, } if (is_add) - ip4_punt_redirect_add (rx_sw_if_index, tx_sw_if_index, &nh); + { + if (rx_sw_if_index && tx_sw_if_index) + { + ip4_punt_redirect_add (rx_sw_if_index, tx_sw_if_index, &nh); + } + } else - ip4_punt_redirect_del (rx_sw_if_index); + { + if (rx_sw_if_index) + { + ip4_punt_redirect_del (rx_sw_if_index); + } + } done: unformat_free (line_input);