X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip4_punt_drop.c;h=f2985a244aaffdd564a6c0f60d7dc073088021e3;hb=cada9eb7894117db898f7c4def92cba5511baa4f;hp=c8d65921183fbf0a2e02d010c1c31a785697f875;hpb=41a54f6a0b16b36f55461f0ce0a2303081a4fb6c;p=vpp.git diff --git a/src/vnet/ip/ip4_punt_drop.c b/src/vnet/ip/ip4_punt_drop.c index c8d65921183..f2985a244aa 100644 --- a/src/vnet/ip/ip4_punt_drop.c +++ b/src/vnet/ip/ip4_punt_drop.c @@ -312,41 +312,26 @@ VLIB_CLI_COMMAND (ip4_punt_policer_command, static) = #ifndef CLIB_MARCH_VARIANT -void -ip4_punt_redirect_add (u32 rx_sw_if_index, - u32 tx_sw_if_index, ip46_address_t * nh) -{ - /* *INDENT-OFF* */ - fib_route_path_t *rpaths = NULL, rpath = { - .frp_proto = DPO_PROTO_IP4, - .frp_addr = *nh, - .frp_sw_if_index = tx_sw_if_index, - .frp_weight = 1, - .frp_fib_index = ~0, - }; - /* *INDENT-ON* */ - - vec_add1 (rpaths, rpath); - - ip4_punt_redirect_add_paths (rx_sw_if_index, rpaths); - - vec_free (rpaths); -} +static u32 ip4_punt_redirect_enable_counts; void -ip4_punt_redirect_add_paths (u32 rx_sw_if_index, fib_route_path_t * rpaths) +ip4_punt_redirect_add_paths (u32 rx_sw_if_index, + const fib_route_path_t *rpaths) { ip_punt_redirect_add (FIB_PROTOCOL_IP4, rx_sw_if_index, FIB_FORW_CHAIN_TYPE_UNICAST_IP4, rpaths); - vnet_feature_enable_disable ("ip4-punt", "ip4-punt-redirect", 0, 1, 0, 0); + if (1 == ++ip4_punt_redirect_enable_counts) + vnet_feature_enable_disable ("ip4-punt", "ip4-punt-redirect", 0, 1, 0, 0); } void ip4_punt_redirect_del (u32 rx_sw_if_index) { - vnet_feature_enable_disable ("ip4-punt", "ip4-punt-redirect", 0, 0, 0, 0); + ASSERT (ip4_punt_redirect_enable_counts); + if (0 == --ip4_punt_redirect_enable_counts) + vnet_feature_enable_disable ("ip4-punt", "ip4-punt-redirect", 0, 0, 0, 0); ip_punt_redirect_del (FIB_PROTOCOL_IP4, rx_sw_if_index); }