X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fipsec%2Fipsec_if.c;h=9b0eb5b2779979dfebb9891eda58cd292eee73d7;hb=e04d09de8433213f3c3e8cdc5acaa7e2289d92de;hp=ed1248942e31c502576f986eecc1a1e626c5797f;hpb=5c85f358bb08403d9edce14d9cc63675bda6799d;p=vpp.git diff --git a/src/vnet/ipsec/ipsec_if.c b/src/vnet/ipsec/ipsec_if.c index ed1248942e3..9b0eb5b2779 100644 --- a/src/vnet/ipsec/ipsec_if.c +++ b/src/vnet/ipsec/ipsec_if.c @@ -91,17 +91,13 @@ VNET_HW_INTERFACE_CLASS (ipsec_hw_class) = }; /* *INDENT-ON* */ -static int -ipsec_add_del_tunnel_if_internal (vnet_main_t * vnm, - ipsec_add_del_tunnel_args_t * args); - static int ipsec_add_del_tunnel_if_rpc_callback (ipsec_add_del_tunnel_args_t * a) { vnet_main_t *vnm = vnet_get_main (); ASSERT (vlib_get_thread_index () == 0); - return ipsec_add_del_tunnel_if_internal (vnm, a); + return ipsec_add_del_tunnel_if_internal (vnm, a, NULL); } int @@ -114,11 +110,12 @@ ipsec_add_del_tunnel_if (ipsec_add_del_tunnel_args_t * args) int ipsec_add_del_tunnel_if_internal (vnet_main_t * vnm, - ipsec_add_del_tunnel_args_t * args) + ipsec_add_del_tunnel_args_t * args, + u32 * sw_if_index) { ipsec_tunnel_if_t *t; ipsec_main_t *im = &ipsec_main; - vnet_hw_interface_t *hi; + vnet_hw_interface_t *hi = NULL; u32 hw_if_index = ~0; uword *p; ipsec_sa_t *sa; @@ -209,10 +206,10 @@ ipsec_add_del_tunnel_if_internal (vnet_main_t * vnm, t - im->tunnel_interfaces, ipsec_hw_class.index, t - im->tunnel_interfaces); - - hi = vnet_get_hw_interface (vnm, hw_if_index); - hi->output_node_index = ipsec_if_output_node.index; } + + hi = vnet_get_hw_interface (vnm, hw_if_index); + hi->output_node_index = ipsec_if_output_node.index; t->hw_if_index = hw_if_index; /*1st interface, register protocol */ @@ -220,7 +217,6 @@ ipsec_add_del_tunnel_if_internal (vnet_main_t * vnm, ip4_register_protocol (IP_PROTOCOL_IPSEC_ESP, ipsec_if_input_node.index); - return hw_if_index; } else { @@ -253,6 +249,10 @@ ipsec_add_del_tunnel_if_internal (vnet_main_t * vnm, hash_unset (im->ipsec_if_pool_index_by_key, key); pool_put (im->tunnel_interfaces, t); } + + if (sw_if_index) + *sw_if_index = hi->sw_if_index; + return 0; }