-static u8 *
-format_decap_next (u8 * s, va_list * args)
-{
- u32 next_index = va_arg (*args, u32);
-
- switch (next_index)
- {
- case LISP_GPE_INPUT_NEXT_DROP:
- return format (s, "drop");
- case LISP_GPE_INPUT_NEXT_IP4_INPUT:
- return format (s, "ip4");
- case LISP_GPE_INPUT_NEXT_IP6_INPUT:
- return format (s, "ip6");
- default:
- return format (s, "unknown %d", next_index);
- }
- return s;
-}
-
-static void
-vl_api_lisp_gpe_tunnel_details_t_handler (vl_api_lisp_gpe_tunnel_details_t *
- mp)
-{
- vat_main_t *vam = &vat_main;
- u8 *iid_str;
- u8 *flag_str = NULL;
-
- iid_str = format (0, "%d (0x%x)", ntohl (mp->iid), ntohl (mp->iid));
-
-#define _(n,v) if (mp->flags & v) flag_str = format (flag_str, "%s-bit ", #n);
- foreach_lisp_gpe_flag_bit;
-#undef _
-
- print (vam->ofp, "%=20d%=30U%=16U%=16d%=16d%=16U"
- "%=16d%=16d%=16sd=16d%=16s%=16s",
- mp->tunnels,
- mp->is_ipv6 ? format_ip6_address : format_ip4_address,
- mp->source_ip,
- mp->is_ipv6 ? format_ip6_address : format_ip4_address,
- mp->destination_ip,
- ntohl (mp->encap_fib_id),
- ntohl (mp->decap_fib_id),
- format_decap_next, ntohl (mp->dcap_next),
- mp->ver_res >> 6,
- flag_str, mp->next_protocol, mp->ver_res, mp->res, iid_str);
-
- vec_free (iid_str);
-}
-
-static void
- vl_api_lisp_gpe_tunnel_details_t_handler_json
- (vl_api_lisp_gpe_tunnel_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- vat_json_node_t *node = NULL;
- struct in6_addr ip6;
- struct in_addr ip4;
- u8 *next_decap_str;
-
- next_decap_str = format (0, "%U", format_decap_next, htonl (mp->dcap_next));
-
- if (VAT_JSON_ARRAY != vam->json_tree.type)
- {
- ASSERT (VAT_JSON_NONE == vam->json_tree.type);
- vat_json_init_array (&vam->json_tree);
- }
- node = vat_json_array_add (&vam->json_tree);
-
- vat_json_init_object (node);
- vat_json_object_add_uint (node, "tunel", mp->tunnels);
- if (mp->is_ipv6)
- {
- clib_memcpy (&ip6, mp->source_ip, sizeof (ip6));
- vat_json_object_add_ip6 (node, "source address", ip6);
- clib_memcpy (&ip6, mp->destination_ip, sizeof (ip6));
- vat_json_object_add_ip6 (node, "destination address", ip6);
- }
- else
- {
- clib_memcpy (&ip4, mp->source_ip, sizeof (ip4));
- vat_json_object_add_ip4 (node, "source address", ip4);
- clib_memcpy (&ip4, mp->destination_ip, sizeof (ip4));
- vat_json_object_add_ip4 (node, "destination address", ip4);
- }
- vat_json_object_add_uint (node, "fib encap", ntohl (mp->encap_fib_id));
- vat_json_object_add_uint (node, "fib decap", ntohl (mp->decap_fib_id));
- vat_json_object_add_string_copy (node, "decap next", next_decap_str);
- vat_json_object_add_uint (node, "lisp version", mp->ver_res >> 6);
- vat_json_object_add_uint (node, "flags", mp->flags);
- vat_json_object_add_uint (node, "next protocol", mp->next_protocol);
- vat_json_object_add_uint (node, "ver_res", mp->ver_res);
- vat_json_object_add_uint (node, "res", mp->res);
- vat_json_object_add_uint (node, "iid", ntohl (mp->iid));
-
- vec_free (next_decap_str);
-}
-