- node = vat_json_array_add (&vam->json_tree);
-
- vat_json_init_object (node);
- if (vam->is_ipv6)
- {
- clib_memcpy (&ip6, mp->ip, sizeof (ip6));
- vat_json_object_add_ip6 (node, "ip", ip6);
- }
- else
- {
- clib_memcpy (&ip4, mp->ip, sizeof (ip4));
- vat_json_object_add_ip4 (node, "ip", ip4);
- }
- vat_json_object_add_uint (node, "prefix_length", mp->prefix_length);
-}
-
-static void
-vl_api_ip_details_t_handler (vl_api_ip_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- static ip_details_t empty_ip_details = { 0 };
- ip_details_t *ip = NULL;
- u32 sw_if_index = ~0;
-
- sw_if_index = ntohl (mp->sw_if_index);
-
- vec_validate_init_empty (vam->ip_details_by_sw_if_index[vam->is_ipv6],
- sw_if_index, empty_ip_details);
-
- ip = vec_elt_at_index (vam->ip_details_by_sw_if_index[vam->is_ipv6],
- sw_if_index);
-
- ip->present = 1;
-}
-
-static void
-vl_api_ip_details_t_handler_json (vl_api_ip_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
-
- if (VAT_JSON_ARRAY != vam->json_tree.type)
- {
- ASSERT (VAT_JSON_NONE == vam->json_tree.type);
- vat_json_init_array (&vam->json_tree);
- }
- vat_json_array_add_uint (&vam->json_tree,
- clib_net_to_host_u32 (mp->sw_if_index));
-}
-
-static void vl_api_map_domain_details_t_handler_json
- (vl_api_map_domain_details_t * mp)
-{
- vat_json_node_t *node = NULL;
- vat_main_t *vam = &vat_main;
- struct in6_addr ip6;
- struct in_addr ip4;
-
- 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, "domain_index",
- clib_net_to_host_u32 (mp->domain_index));
- clib_memcpy (&ip6, mp->ip6_prefix, sizeof (ip6));
- vat_json_object_add_ip6 (node, "ip6_prefix", ip6);
- clib_memcpy (&ip4, mp->ip4_prefix, sizeof (ip4));
- vat_json_object_add_ip4 (node, "ip4_prefix", ip4);
- clib_memcpy (&ip6, mp->ip6_src, sizeof (ip6));
- vat_json_object_add_ip6 (node, "ip6_src", ip6);
- vat_json_object_add_int (node, "ip6_prefix_len", mp->ip6_prefix_len);
- vat_json_object_add_int (node, "ip4_prefix_len", mp->ip4_prefix_len);
- vat_json_object_add_int (node, "ip6_src_len", mp->ip6_src_len);
- vat_json_object_add_int (node, "ea_bits_len", mp->ea_bits_len);
- vat_json_object_add_int (node, "psid_offset", mp->psid_offset);
- vat_json_object_add_int (node, "psid_length", mp->psid_length);
- vat_json_object_add_uint (node, "flags", mp->flags);
- vat_json_object_add_uint (node, "mtu", clib_net_to_host_u16 (mp->mtu));
- vat_json_object_add_int (node, "is_translation", mp->is_translation);
-}
-
-static void vl_api_map_domain_details_t_handler
- (vl_api_map_domain_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
-
- if (mp->is_translation)
- {
- print (vam->ofp,
- "* %U/%d (ipv4-prefix) %U/%d (ipv6-prefix) %U/%d (ip6-src) index: %u",
- format_ip4_address, mp->ip4_prefix, mp->ip4_prefix_len,
- format_ip6_address, mp->ip6_prefix, mp->ip6_prefix_len,
- format_ip6_address, mp->ip6_src, mp->ip6_src_len,
- clib_net_to_host_u32 (mp->domain_index));
- }
- else
- {
- print (vam->ofp,
- "* %U/%d (ipv4-prefix) %U/%d (ipv6-prefix) %U (ip6-src) index: %u",
- format_ip4_address, mp->ip4_prefix, mp->ip4_prefix_len,
- format_ip6_address, mp->ip6_prefix, mp->ip6_prefix_len,
- format_ip6_address, mp->ip6_src,
- clib_net_to_host_u32 (mp->domain_index));
- }
- print (vam->ofp, " ea-len %d psid-offset %d psid-len %d mtu %d %s",
- mp->ea_bits_len, mp->psid_offset, mp->psid_length, mp->mtu,
- mp->is_translation ? "map-t" : "");
-}
-
-static void vl_api_map_rule_details_t_handler_json
- (vl_api_map_rule_details_t * mp)
-{
- struct in6_addr ip6;
- vat_json_node_t *node = NULL;
- vat_main_t *vam = &vat_main;
-
- 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, "psid", clib_net_to_host_u16 (mp->psid));
- clib_memcpy (&ip6, mp->ip6_dst, sizeof (ip6));
- vat_json_object_add_ip6 (node, "ip6_dst", ip6);
-}
-
-static void
-vl_api_map_rule_details_t_handler (vl_api_map_rule_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- print (vam->ofp, " %d (psid) %U (ip6-dst)",
- clib_net_to_host_u16 (mp->psid), format_ip6_address, mp->ip6_dst);
-}
-
-static void
-vl_api_dhcp_compl_event_t_handler (vl_api_dhcp_compl_event_t * mp)
-{
- errmsg ("DHCP compl event: pid %d %s hostname %s host_addr %U "
- "router_addr %U host_mac %U",
- ntohl (mp->pid), mp->is_ipv6 ? "ipv6" : "ipv4", mp->hostname,
- format_ip4_address, &mp->host_address,
- format_ip4_address, &mp->router_address,
- format_ethernet_address, mp->host_mac);
-}
-
-static void vl_api_dhcp_compl_event_t_handler_json
- (vl_api_dhcp_compl_event_t * mp)
-{
- /* JSON output not supported */
-}
-
-static void
-set_simple_interface_counter (u8 vnet_counter_type, u32 sw_if_index,
- u32 counter)
-{
- vat_main_t *vam = &vat_main;
- static u64 default_counter = 0;
-
- vec_validate_init_empty (vam->simple_interface_counters, vnet_counter_type,
- NULL);
- vec_validate_init_empty (vam->simple_interface_counters[vnet_counter_type],
- sw_if_index, default_counter);
- vam->simple_interface_counters[vnet_counter_type][sw_if_index] = counter;
-}
-
-static void
-set_combined_interface_counter (u8 vnet_counter_type, u32 sw_if_index,
- interface_counter_t counter)
-{
- vat_main_t *vam = &vat_main;
- static interface_counter_t default_counter = { 0, };
-
- vec_validate_init_empty (vam->combined_interface_counters,
- vnet_counter_type, NULL);
- vec_validate_init_empty (vam->combined_interface_counters
- [vnet_counter_type], sw_if_index, default_counter);
- vam->combined_interface_counters[vnet_counter_type][sw_if_index] = counter;
-}
-
-static void vl_api_vnet_interface_simple_counters_t_handler
- (vl_api_vnet_interface_simple_counters_t * mp)
-{
- /* not supported */
-}
-
-static void vl_api_vnet_interface_combined_counters_t_handler
- (vl_api_vnet_interface_combined_counters_t * mp)
-{
- /* not supported */
-}
-
-static void vl_api_vnet_interface_simple_counters_t_handler_json
- (vl_api_vnet_interface_simple_counters_t * mp)
-{
- u64 *v_packets;
- u64 packets;
- u32 count;
- u32 first_sw_if_index;
- int i;
-
- count = ntohl (mp->count);
- first_sw_if_index = ntohl (mp->first_sw_if_index);
-
- v_packets = (u64 *) & mp->data;
- for (i = 0; i < count; i++)
- {
- packets = clib_net_to_host_u64 (clib_mem_unaligned (v_packets, u64));
- set_simple_interface_counter (mp->vnet_counter_type,
- first_sw_if_index + i, packets);
- v_packets++;
- }
-}
-
-static void vl_api_vnet_interface_combined_counters_t_handler_json
- (vl_api_vnet_interface_combined_counters_t * mp)
-{
- interface_counter_t counter;
- vlib_counter_t *v;
- u32 first_sw_if_index;
- int i;
- u32 count;
-
- count = ntohl (mp->count);
- first_sw_if_index = ntohl (mp->first_sw_if_index);
-
- v = (vlib_counter_t *) & mp->data;
- for (i = 0; i < count; i++)
- {
- counter.packets =
- clib_net_to_host_u64 (clib_mem_unaligned (&v->packets, u64));
- counter.bytes =
- clib_net_to_host_u64 (clib_mem_unaligned (&v->bytes, u64));
- set_combined_interface_counter (mp->vnet_counter_type,
- first_sw_if_index + i, counter);
- v++;
- }
-}
-
-static u32
-ip4_fib_counters_get_vrf_index_by_vrf_id (u32 vrf_id)
-{
- vat_main_t *vam = &vat_main;
- u32 i;
-
- for (i = 0; i < vec_len (vam->ip4_fib_counters_vrf_id_by_index); i++)
- {
- if (vam->ip4_fib_counters_vrf_id_by_index[i] == vrf_id)
- {
- return i;
- }
- }
- return ~0;
-}
-
-static u32
-ip6_fib_counters_get_vrf_index_by_vrf_id (u32 vrf_id)
-{
- vat_main_t *vam = &vat_main;
- u32 i;
-
- for (i = 0; i < vec_len (vam->ip6_fib_counters_vrf_id_by_index); i++)
- {
- if (vam->ip6_fib_counters_vrf_id_by_index[i] == vrf_id)
- {
- return i;
- }
- }
- return ~0;
-}
-
-static void vl_api_vnet_ip4_fib_counters_t_handler
- (vl_api_vnet_ip4_fib_counters_t * mp)
-{
- /* not supported */
-}
-
-static void vl_api_vnet_ip4_fib_counters_t_handler_json
- (vl_api_vnet_ip4_fib_counters_t * mp)
-{
- vat_main_t *vam = &vat_main;
- vl_api_ip4_fib_counter_t *v;
- ip4_fib_counter_t *counter;
- struct in_addr ip4;
- u32 vrf_id;
- u32 vrf_index;
- u32 count;
- int i;