From 0e06e2b1420bca9b2bddd43e9642e56c81768fc2 Mon Sep 17 00:00:00 2001 From: Hongjun Ni Date: Mon, 30 May 2016 19:45:51 +0800 Subject: Add Dump API for VxLAN-GPE tunnel Change-Id: I4913fe6c4b1280939147887896aea9b79a9f7f10 Signed-off-by: Hongjun Ni --- vpp/api/api.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++- vpp/api/custom_dump.c | 15 +++++++++++- vpp/api/vpe.api | 17 ++++++++++++++ 3 files changed, 94 insertions(+), 2 deletions(-) (limited to 'vpp') diff --git a/vpp/api/api.c b/vpp/api/api.c index 6033dc4d..f54ef01d 100644 --- a/vpp/api/api.c +++ b/vpp/api/api.c @@ -291,7 +291,8 @@ _(SW_INTERFACE_VHOST_USER_DETAILS, sw_interface_vhost_user_details) \ _(SHOW_VERSION, show_version) \ _(L2_FIB_TABLE_DUMP, l2_fib_table_dump) \ _(L2_FIB_TABLE_ENTRY, l2_fib_table_entry) \ -_(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel) \ +_(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel) \ +_(VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump) \ _(INTERFACE_NAME_RENUMBER, interface_name_renumber) \ _(WANT_IP4_ARP_EVENTS, want_ip4_arp_events) \ _(INPUT_ACL_SET_INTERFACE, input_acl_set_interface) \ @@ -4599,6 +4600,67 @@ out: })); } +static void send_vxlan_gpe_tunnel_details +(vxlan_gpe_tunnel_t * t, unix_shared_memory_queue_t * q, u32 context) +{ + vl_api_vxlan_gpe_tunnel_details_t * rmp; + ip4_main_t * im4 = &ip4_main; + ip6_main_t * im6 = &ip6_main; + u8 is_ipv6 = !(t->flags & VXLAN_GPE_TUNNEL_IS_IPV4); + + rmp = vl_msg_api_alloc (sizeof (*rmp)); + memset (rmp, 0, sizeof (*rmp)); + 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); + rmp->encap_vrf_id = htonl(im6->fibs[t->encap_fib_index].table_id); + rmp->decap_vrf_id = htonl(im6->fibs[t->decap_fib_index].table_id); + } else { + memcpy(rmp->local, &(t->local.ip4), 4); + memcpy(rmp->remote, &(t->remote.ip4), 4); + rmp->encap_vrf_id = htonl(im4->fibs[t->encap_fib_index].table_id); + rmp->decap_vrf_id = htonl(im4->fibs[t->decap_fib_index].table_id); + } + 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); +} + +static void vl_api_vxlan_gpe_tunnel_dump_t_handler +(vl_api_vxlan_gpe_tunnel_dump_t * mp) +{ + unix_shared_memory_queue_t * q; + 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; + } + + sw_if_index = ntohl(mp->sw_if_index); + + if (~0 == sw_if_index) { + pool_foreach (t, vgm->tunnels, + ({ + send_vxlan_gpe_tunnel_details(t, q, mp->context); + })); + } else { + if ((sw_if_index >= vec_len(vgm->tunnel_index_by_sw_if_index)) || + (~0 == vgm->tunnel_index_by_sw_if_index[sw_if_index])) { + return; + } + t = &vgm->tunnels[vgm->tunnel_index_by_sw_if_index[sw_if_index]]; + send_vxlan_gpe_tunnel_details(t, q, mp->context); + } +} + static void vl_api_lisp_add_del_locator_set_t_handler(vl_api_lisp_add_del_locator_set_t *mp) { diff --git a/vpp/api/custom_dump.c b/vpp/api/custom_dump.c index ba4cf538..638c4a78 100644 --- a/vpp/api/custom_dump.c +++ b/vpp/api/custom_dump.c @@ -1600,6 +1600,18 @@ static void *vl_api_vxlan_gpe_add_del_tunnel_t_print FINISH; } +static void * vl_api_vxlan_gpe_tunnel_dump_t_print +(vl_api_vxlan_gpe_tunnel_dump_t * mp, void *handle) +{ + u8 * s; + + s = format (0, "SCRIPT: vxlan_gpe_tunnel_dump "); + + s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index)); + + FINISH; +} + static void *vl_api_interface_name_renumber_t_print (vl_api_interface_name_renumber_t * mp, void * handle) { @@ -1789,7 +1801,8 @@ _(MEMCLNT_CREATE, memclnt_create) \ _(SW_INTERFACE_VHOST_USER_DUMP, sw_interface_vhost_user_dump) \ _(SHOW_VERSION, show_version) \ _(L2_FIB_TABLE_DUMP, l2_fib_table_dump) \ -_(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel) \ +_(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel) \ +_(VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump) \ _(INTERFACE_NAME_RENUMBER, interface_name_renumber) \ _(WANT_IP4_ARP_EVENTS, want_ip4_arp_events) \ _(INPUT_ACL_SET_INTERFACE, input_acl_set_interface) \ diff --git a/vpp/api/vpe.api b/vpp/api/vpe.api index 9c90c338..9ae4987f 100644 --- a/vpp/api/vpe.api +++ b/vpp/api/vpe.api @@ -2129,6 +2129,23 @@ define vxlan_gpe_add_del_tunnel_reply { u32 sw_if_index; }; +manual_java define vxlan_gpe_tunnel_dump { + u32 client_index; + u32 context; + u32 sw_if_index; +}; + +manual_java define vxlan_gpe_tunnel_details { + u32 context; + u32 sw_if_index; + u8 local[16]; + u8 remote[16]; + u32 vni; + u8 protocol; + u32 encap_vrf_id; + u32 decap_vrf_id; + u8 is_ipv6; +}; /** \brief add or delete locator_set @param client_index - opaque cookie to identify the sender -- cgit 1.2.3-korg