X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fvxlan-gpe%2Fvxlan_gpe_api.c;h=e23b2fed033786ef38a45dcb2b15a051e86f610f;hb=bdc0e6b7;hp=012a41dabbb02a700f2f73f5afb50dfe4941ba25;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/vxlan-gpe/vxlan_gpe_api.c b/src/vnet/vxlan-gpe/vxlan_gpe_api.c index 012a41dabbb..e23b2fed033 100644 --- a/src/vnet/vxlan-gpe/vxlan_gpe_api.c +++ b/src/vnet/vxlan-gpe/vxlan_gpe_api.c @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -44,8 +45,25 @@ #include #define foreach_vpe_api_msg \ +_(SW_INTERFACE_SET_VXLAN_GPE_BYPASS, sw_interface_set_vxlan_gpe_bypass) \ _(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel) \ -_(VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump) \ +_(VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump) + +static void + vl_api_sw_interface_set_vxlan_gpe_bypass_t_handler + (vl_api_sw_interface_set_vxlan_gpe_bypass_t * mp) +{ + vl_api_sw_interface_set_vxlan_gpe_bypass_reply_t *rmp; + int rv = 0; + u32 sw_if_index = ntohl (mp->sw_if_index); + + VALIDATE_SW_IF_INDEX (mp); + + vnet_int_vxlan_gpe_bypass_mode (sw_if_index, mp->is_ipv6, mp->enable); + BAD_SW_IF_INDEX_LABEL; + + REPLY_MACRO (VL_API_SW_INTERFACE_SET_VXLAN_GPE_BYPASS_REPLY); +} static void vl_api_vxlan_gpe_add_del_tunnel_t_handler @@ -109,6 +127,7 @@ static void clib_memcpy (&(a->local.ip4), mp->local, 4); clib_memcpy (&(a->remote.ip4), mp->remote, 4); } + a->mcast_sw_if_index = ntohl (mp->mcast_sw_if_index); a->encap_fib_index = encap_fib_index; a->decap_fib_index = decap_fib_index; a->protocol = protocol; @@ -125,7 +144,7 @@ out: } static void send_vxlan_gpe_tunnel_details - (vxlan_gpe_tunnel_t * t, unix_shared_memory_queue_t * q, u32 context) + (vxlan_gpe_tunnel_t * t, vl_api_registration_t * reg, u32 context) { vl_api_vxlan_gpe_tunnel_details_t *rmp; ip4_main_t *im4 = &ip4_main; @@ -137,40 +156,39 @@ static void send_vxlan_gpe_tunnel_details rmp->_vl_msg_id = ntohs (VL_API_VXLAN_GPE_TUNNEL_DETAILS); if (is_ipv6) { - memcpy (rmp->local, &(t->local.ip6), 16); - memcpy (rmp->remote, &(t->remote.ip6), 16); + memcpy (rmp->local, &(t->local.ip6.as_u8), 16); + memcpy (rmp->remote, &(t->remote.ip6.as_u8), 16); rmp->encap_vrf_id = htonl (im6->fibs[t->encap_fib_index].ft_table_id); rmp->decap_vrf_id = htonl (im6->fibs[t->decap_fib_index].ft_table_id); } else { - memcpy (rmp->local, &(t->local.ip4), 4); - memcpy (rmp->remote, &(t->remote.ip4), 4); + memcpy (rmp->local, &(t->local.ip4.as_u8), 4); + memcpy (rmp->remote, &(t->remote.ip4.as_u8), 4); rmp->encap_vrf_id = htonl (im4->fibs[t->encap_fib_index].ft_table_id); rmp->decap_vrf_id = htonl (im4->fibs[t->decap_fib_index].ft_table_id); } + rmp->mcast_sw_if_index = htonl (t->mcast_sw_if_index); rmp->vni = htonl (t->vni); rmp->protocol = t->protocol; rmp->sw_if_index = htonl (t->sw_if_index); rmp->is_ipv6 = is_ipv6; rmp->context = context; - vl_msg_api_send_shmem (q, (u8 *) & rmp); + vl_api_send_msg (reg, (u8 *) rmp); } static void vl_api_vxlan_gpe_tunnel_dump_t_handler (vl_api_vxlan_gpe_tunnel_dump_t * mp) { - unix_shared_memory_queue_t *q; + vl_api_registration_t *reg; vxlan_gpe_main_t *vgm = &vxlan_gpe_main; vxlan_gpe_tunnel_t *t; u32 sw_if_index; - q = vl_api_client_index_to_input_queue (mp->client_index); - if (q == 0) - { - return; - } + reg = vl_api_client_index_to_registration (mp->client_index); + if (!reg) + return; sw_if_index = ntohl (mp->sw_if_index); @@ -179,7 +197,7 @@ static void vl_api_vxlan_gpe_tunnel_dump_t_handler /* *INDENT-OFF* */ pool_foreach (t, vgm->tunnels, ({ - send_vxlan_gpe_tunnel_details(t, q, mp->context); + send_vxlan_gpe_tunnel_details(t, reg, mp->context); })); /* *INDENT-ON* */ } @@ -191,7 +209,7 @@ static void vl_api_vxlan_gpe_tunnel_dump_t_handler return; } t = &vgm->tunnels[vgm->tunnel_index_by_sw_if_index[sw_if_index]]; - send_vxlan_gpe_tunnel_details (t, q, mp->context); + send_vxlan_gpe_tunnel_details (t, reg, mp->context); } } @@ -199,7 +217,7 @@ static void vl_api_vxlan_gpe_tunnel_dump_t_handler /* * vpe_api_hookup * Add vpe's API message handlers to the table. - * vlib has alread mapped shared memory and + * vlib has already mapped shared memory and * added the client registration handlers. * See .../vlib-api/vlibmemory/memclnt_vlib.c:memclnt_process() */ @@ -211,7 +229,7 @@ static void setup_message_id_table (api_main_t * am) { #define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id); - foreach_vl_msg_name_crc_span; + foreach_vl_msg_name_crc_vxlan_gpe; #undef _ } @@ -230,6 +248,9 @@ vxlan_gpe_api_hookup (vlib_main_t * vm) foreach_vpe_api_msg; #undef _ + am->api_trace_cfg[VL_API_VXLAN_GPE_ADD_DEL_TUNNEL].size += + 17 * sizeof (u32); + /* * Set up the (msg_name, crc, message-id) table */