X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=vnet%2Fvnet%2Fvxlan%2Fvxlan.c;h=6e3842887a7b20cec33cbe529212a23b7b9fb845;hb=988a7c482ce1c7685816b238ac776b03c237ed8e;hp=316f8cb19073c0e3c2ddb302e2ef1df8bd90cbb8;hpb=60231f35fa860228f31f40753d94e129e8432988;p=vpp.git diff --git a/vnet/vnet/vxlan/vxlan.c b/vnet/vnet/vxlan/vxlan.c index 316f8cb1907..6e3842887a7 100644 --- a/vnet/vnet/vxlan/vxlan.c +++ b/vnet/vnet/vxlan/vxlan.c @@ -66,11 +66,23 @@ static uword dummy_interface_tx (vlib_main_t * vm, return frame->n_vectors; } +static clib_error_t * +vxlan_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags) +{ + if (flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) + vnet_hw_interface_set_flags (vnm, hw_if_index, VNET_HW_INTERFACE_FLAG_LINK_UP); + else + vnet_hw_interface_set_flags (vnm, hw_if_index, 0); + + return /* no error */ 0; +} + VNET_DEVICE_CLASS (vxlan_device_class,static) = { .name = "VXLAN", .format_device_name = format_vxlan_name, .format_tx_trace = format_vxlan_encap_trace, .tx_function = dummy_interface_tx, + .admin_up_down_function = vxlan_interface_admin_up_down, }; static uword dummy_set_rewrite (vnet_main_t * vnm, @@ -142,6 +154,7 @@ int vnet_vxlan_add_del_tunnel vxlan_main_t * vxm = &vxlan_main; vxlan_tunnel_t *t = 0; vnet_main_t * vnm = vxm->vnet_main; + ip4_main_t * im4 = &ip4_main; vnet_hw_interface_t * hi; uword * p; u32 hw_if_index = ~0; @@ -231,6 +244,8 @@ int vnet_vxlan_add_del_tunnel } vnet_sw_interface_set_flags (vnm, sw_if_index, VNET_SW_INTERFACE_FLAG_ADMIN_UP); + vec_validate (im4->fib_index_by_sw_if_index, sw_if_index); + im4->fib_index_by_sw_if_index[sw_if_index] = t->encap_fib_index; } else {