X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=blobdiff_plain;f=src%2Fvat%2Fapi_format.c;h=db22f29148f3466bb84a5d3d9e9fa5f2c74acdf8;hp=f54aa02d228b3e5d54dcb3a1b9c4ff34f7a984a0;hb=e26c81f;hpb=44cea225e2238a3c549f17f315cd1fbc6978c277 diff --git a/src/vat/api_format.c b/src/vat/api_format.c index f54aa02d228..db22f29148f 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -82,14 +82,6 @@ #if VPP_API_TEST_BUILTIN == 0 #include -/* *INDENT-OFF* */ -const mac_address_t ZERO_MAC_ADDRESS = { - .bytes = { - 0, 0, 0, 0, 0, 0, - }, -}; -/* *INDENT-ON* */ - u32 vl (void *p) { @@ -99,9 +91,15 @@ vl (void *p) int vat_socket_connect (vat_main_t * vam) { + int rv; vam->socket_client_main = &socket_client_main; - return vl_socket_client_connect ((char *) vam->socket_name, "vpp_api_test", - 0 /* default socket rx, tx buffer */ ); + if ((rv = vl_socket_client_connect ((char *) vam->socket_name, + "vpp_api_test", + 0 /* default socket rx, tx buffer */ ))) + return rv; + /* vpp expects the client index in network order */ + vam->my_client_index = htonl (socket_client_main.client_index); + return 0; } #else /* vpp built-in case, we don't do sockets... */ int @@ -1105,7 +1103,7 @@ vl_api_cli_inband_reply_t_handler (vl_api_cli_inband_reply_t * mp) { vat_main_t *vam = &vat_main; i32 retval = ntohl (mp->retval); - u32 length = ntohl (mp->length); + u32 length = vl_api_string_len (&mp->reply); vec_reset_length (vam->cmd_reply); @@ -1113,7 +1111,8 @@ vl_api_cli_inband_reply_t_handler (vl_api_cli_inband_reply_t * mp) if (retval == 0) { vec_validate (vam->cmd_reply, length); - clib_memcpy ((char *) (vam->cmd_reply), mp->reply, length); + clib_memcpy ((char *) (vam->cmd_reply), + vl_api_from_api_string (&mp->reply), length); vam->cmd_reply[length] = 0; } vam->result_ready = 1; @@ -1129,7 +1128,8 @@ vl_api_cli_inband_reply_t_handler_json (vl_api_cli_inband_reply_t * mp) vat_json_init_object (&node); vat_json_object_add_int (&node, "retval", ntohl (mp->retval)); - vat_json_object_add_string_copy (&node, "reply", mp->reply); + vat_json_object_add_string_copy (&node, "reply", + vl_api_from_api_string (&mp->reply)); vat_json_print (vam->ofp, &node); vat_json_free (&node); @@ -1300,10 +1300,30 @@ static void vl_api_show_version_reply_t_handler if (retval >= 0) { - errmsg (" program: %s", mp->program); - errmsg (" version: %s", mp->version); - errmsg (" build date: %s", mp->build_date); - errmsg ("build directory: %s", mp->build_directory); + char *s; + char *p = (char *) &mp->program; + + s = vl_api_from_api_string_c ((vl_api_string_t *) p); + errmsg (" program: %s\n", s); + free (s); + + p += + vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t); + s = vl_api_from_api_string_c ((vl_api_string_t *) p); + errmsg (" version: %s\n", s); + free (s); + + p += + vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t); + s = vl_api_from_api_string_c ((vl_api_string_t *) p); + errmsg (" build date: %s\n", s); + free (s); + + p += + vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t); + s = vl_api_from_api_string_c ((vl_api_string_t *) p); + errmsg ("build directory: %s\n", s); + free (s); } vam->retval = retval; vam->result_ready = 1; @@ -1317,11 +1337,22 @@ static void vl_api_show_version_reply_t_handler_json vat_json_init_object (&node); vat_json_object_add_int (&node, "retval", ntohl (mp->retval)); - vat_json_object_add_string_copy (&node, "program", mp->program); - vat_json_object_add_string_copy (&node, "version", mp->version); - vat_json_object_add_string_copy (&node, "build_date", mp->build_date); + char *p = (char *) &mp->program; + vat_json_object_add_string_copy (&node, "program", + vl_api_from_api_string ((vl_api_string_t *) + p)); + p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (u32); + vat_json_object_add_string_copy (&node, "version", + vl_api_from_api_string ((vl_api_string_t *) + p)); + p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (u32); + vat_json_object_add_string_copy (&node, "build_date", + vl_api_from_api_string ((vl_api_string_t *) + p)); + p += vl_api_string_len ((vl_api_string_t *) p) + sizeof (u32); vat_json_object_add_string_copy (&node, "build_directory", - mp->build_directory); + vl_api_from_api_string ((vl_api_string_t *) + p)); vat_json_print (vam->ofp, &node); vat_json_free (&node); @@ -2720,288 +2751,6 @@ static void vl_api_dhcp_compl_event_t_handler_json /* 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; - - vrf_id = ntohl (mp->vrf_id); - vrf_index = ip4_fib_counters_get_vrf_index_by_vrf_id (vrf_id); - if (~0 == vrf_index) - { - vrf_index = vec_len (vam->ip4_fib_counters_vrf_id_by_index); - vec_validate (vam->ip4_fib_counters_vrf_id_by_index, vrf_index); - vam->ip4_fib_counters_vrf_id_by_index[vrf_index] = vrf_id; - vec_validate (vam->ip4_fib_counters, vrf_index); - vam->ip4_fib_counters[vrf_index] = NULL; - } - - vec_free (vam->ip4_fib_counters[vrf_index]); - v = (vl_api_ip4_fib_counter_t *) & mp->c; - count = ntohl (mp->count); - for (i = 0; i < count; i++) - { - vec_validate (vam->ip4_fib_counters[vrf_index], i); - counter = &vam->ip4_fib_counters[vrf_index][i]; - clib_memcpy (&ip4, &v->address, sizeof (ip4)); - counter->address = ip4; - counter->address_length = v->address_length; - counter->packets = clib_net_to_host_u64 (v->packets); - counter->bytes = clib_net_to_host_u64 (v->bytes); - v++; - } -} - -static void vl_api_vnet_ip4_nbr_counters_t_handler - (vl_api_vnet_ip4_nbr_counters_t * mp) -{ - /* not supported */ -} - -static void vl_api_vnet_ip4_nbr_counters_t_handler_json - (vl_api_vnet_ip4_nbr_counters_t * mp) -{ - vat_main_t *vam = &vat_main; - vl_api_ip4_nbr_counter_t *v; - ip4_nbr_counter_t *counter; - u32 sw_if_index; - u32 count; - int i; - - sw_if_index = ntohl (mp->sw_if_index); - count = ntohl (mp->count); - vec_validate (vam->ip4_nbr_counters, sw_if_index); - - if (mp->begin) - vec_free (vam->ip4_nbr_counters[sw_if_index]); - - v = (vl_api_ip4_nbr_counter_t *) & mp->c; - for (i = 0; i < count; i++) - { - vec_validate (vam->ip4_nbr_counters[sw_if_index], i); - counter = &vam->ip4_nbr_counters[sw_if_index][i]; - counter->address.s_addr = v->address; - counter->packets = clib_net_to_host_u64 (v->packets); - counter->bytes = clib_net_to_host_u64 (v->bytes); - counter->linkt = v->link_type; - v++; - } -} - -static void vl_api_vnet_ip6_fib_counters_t_handler - (vl_api_vnet_ip6_fib_counters_t * mp) -{ - /* not supported */ -} - -static void vl_api_vnet_ip6_fib_counters_t_handler_json - (vl_api_vnet_ip6_fib_counters_t * mp) -{ - vat_main_t *vam = &vat_main; - vl_api_ip6_fib_counter_t *v; - ip6_fib_counter_t *counter; - struct in6_addr ip6; - u32 vrf_id; - u32 vrf_index; - u32 count; - int i; - - vrf_id = ntohl (mp->vrf_id); - vrf_index = ip6_fib_counters_get_vrf_index_by_vrf_id (vrf_id); - if (~0 == vrf_index) - { - vrf_index = vec_len (vam->ip6_fib_counters_vrf_id_by_index); - vec_validate (vam->ip6_fib_counters_vrf_id_by_index, vrf_index); - vam->ip6_fib_counters_vrf_id_by_index[vrf_index] = vrf_id; - vec_validate (vam->ip6_fib_counters, vrf_index); - vam->ip6_fib_counters[vrf_index] = NULL; - } - - vec_free (vam->ip6_fib_counters[vrf_index]); - v = (vl_api_ip6_fib_counter_t *) & mp->c; - count = ntohl (mp->count); - for (i = 0; i < count; i++) - { - vec_validate (vam->ip6_fib_counters[vrf_index], i); - counter = &vam->ip6_fib_counters[vrf_index][i]; - clib_memcpy (&ip6, &v->address, sizeof (ip6)); - counter->address = ip6; - counter->address_length = v->address_length; - counter->packets = clib_net_to_host_u64 (v->packets); - counter->bytes = clib_net_to_host_u64 (v->bytes); - v++; - } -} - -static void vl_api_vnet_ip6_nbr_counters_t_handler - (vl_api_vnet_ip6_nbr_counters_t * mp) -{ - /* not supported */ -} - -static void vl_api_vnet_ip6_nbr_counters_t_handler_json - (vl_api_vnet_ip6_nbr_counters_t * mp) -{ - vat_main_t *vam = &vat_main; - vl_api_ip6_nbr_counter_t *v; - ip6_nbr_counter_t *counter; - struct in6_addr ip6; - u32 sw_if_index; - u32 count; - int i; - - sw_if_index = ntohl (mp->sw_if_index); - count = ntohl (mp->count); - vec_validate (vam->ip6_nbr_counters, sw_if_index); - - if (mp->begin) - vec_free (vam->ip6_nbr_counters[sw_if_index]); - - v = (vl_api_ip6_nbr_counter_t *) & mp->c; - for (i = 0; i < count; i++) - { - vec_validate (vam->ip6_nbr_counters[sw_if_index], i); - counter = &vam->ip6_nbr_counters[sw_if_index][i]; - clib_memcpy (&ip6, &v->address, sizeof (ip6)); - counter->address = ip6; - counter->packets = clib_net_to_host_u64 (v->packets); - counter->bytes = clib_net_to_host_u64 (v->bytes); - v++; - } -} - static void vl_api_get_first_msg_id_reply_t_handler (vl_api_get_first_msg_id_reply_t * mp) { @@ -5401,18 +5150,6 @@ static void vl_api_flow_classify_details_t_handler_json vat_json_object_add_uint (node, "table_index", ntohl (mp->table_index)); } -#define vl_api_vnet_interface_simple_counters_t_endian vl_noop_handler -#define vl_api_vnet_interface_simple_counters_t_print vl_noop_handler -#define vl_api_vnet_interface_combined_counters_t_endian vl_noop_handler -#define vl_api_vnet_interface_combined_counters_t_print vl_noop_handler -#define vl_api_vnet_ip4_fib_counters_t_endian vl_noop_handler -#define vl_api_vnet_ip4_fib_counters_t_print vl_noop_handler -#define vl_api_vnet_ip6_fib_counters_t_endian vl_noop_handler -#define vl_api_vnet_ip6_fib_counters_t_print vl_noop_handler -#define vl_api_vnet_ip4_nbr_counters_t_endian vl_noop_handler -#define vl_api_vnet_ip4_nbr_counters_t_print vl_noop_handler -#define vl_api_vnet_ip6_nbr_counters_t_endian vl_noop_handler -#define vl_api_vnet_ip6_nbr_counters_t_print vl_noop_handler #define vl_api_one_adjacencies_get_reply_t_endian vl_noop_handler #define vl_api_one_adjacencies_get_reply_t_print vl_noop_handler #define vl_api_one_l2_arp_bd_get_reply_t_print vl_noop_handler @@ -5522,8 +5259,8 @@ _(ikev2_initiate_del_child_sa_reply) \ _(ikev2_initiate_rekey_child_sa_reply) \ _(delete_loopback_reply) \ _(bd_ip_mac_add_del_reply) \ +_(bd_ip_mac_flush_reply) \ _(want_interface_events_reply) \ -_(want_stats_reply) \ _(cop_interface_enable_disable_reply) \ _(cop_whitelist_enable_disable_reply) \ _(sw_interface_clear_stats_reply) \ @@ -5572,7 +5309,7 @@ _(ip_source_and_port_range_check_add_del_reply) \ _(ip_source_and_port_range_check_interface_add_del_reply)\ _(delete_subif_reply) \ _(l2_interface_pbb_tag_rewrite_reply) \ -_(punt_reply) \ +_(set_punt_reply) \ _(feature_enable_disable_reply) \ _(sw_interface_tag_add_del_reply) \ _(hw_interface_set_mtu_reply) \ @@ -5779,10 +5516,10 @@ _(IKEV2_INITIATE_DEL_CHILD_SA_REPLY, ikev2_initiate_del_child_sa_reply) \ _(IKEV2_INITIATE_REKEY_CHILD_SA_REPLY, ikev2_initiate_rekey_child_sa_reply) \ _(DELETE_LOOPBACK_REPLY, delete_loopback_reply) \ _(BD_IP_MAC_ADD_DEL_REPLY, bd_ip_mac_add_del_reply) \ +_(BD_IP_MAC_FLUSH_REPLY, bd_ip_mac_flush_reply) \ _(BD_IP_MAC_DETAILS, bd_ip_mac_details) \ _(DHCP_COMPL_EVENT, dhcp_compl_event) \ _(WANT_INTERFACE_EVENTS_REPLY, want_interface_events_reply) \ -_(WANT_STATS_REPLY, want_stats_reply) \ _(GET_FIRST_MSG_ID_REPLY, get_first_msg_id_reply) \ _(COP_INTERFACE_ENABLE_DISABLE_REPLY, cop_interface_enable_disable_reply) \ _(COP_WHITELIST_ENABLE_DISABLE_REPLY, cop_whitelist_enable_disable_reply) \ @@ -5902,7 +5639,7 @@ _(IPSEC_GRE_ADD_DEL_TUNNEL_REPLY, ipsec_gre_add_del_tunnel_reply) \ _(IPSEC_GRE_TUNNEL_DETAILS, ipsec_gre_tunnel_details) \ _(DELETE_SUBIF_REPLY, delete_subif_reply) \ _(L2_INTERFACE_PBB_TAG_REWRITE_REPLY, l2_interface_pbb_tag_rewrite_reply) \ -_(PUNT_REPLY, punt_reply) \ +_(SET_PUNT_REPLY, set_punt_reply) \ _(IP_FIB_DETAILS, ip_fib_details) \ _(IP6_FIB_DETAILS, ip6_fib_details) \ _(FEATURE_ENABLE_DISABLE_REPLY, feature_enable_disable_reply) \ @@ -5928,13 +5665,7 @@ _(OUTPUT_ACL_SET_INTERFACE_REPLY, output_acl_set_interface_reply) \ _(QOS_RECORD_ENABLE_DISABLE_REPLY, qos_record_enable_disable_reply) #define foreach_standalone_reply_msg \ -_(SW_INTERFACE_EVENT, sw_interface_event) \ -_(VNET_INTERFACE_SIMPLE_COUNTERS, vnet_interface_simple_counters) \ -_(VNET_INTERFACE_COMBINED_COUNTERS, vnet_interface_combined_counters) \ -_(VNET_IP4_FIB_COUNTERS, vnet_ip4_fib_counters) \ -_(VNET_IP6_FIB_COUNTERS, vnet_ip6_fib_counters) \ -_(VNET_IP4_NBR_COUNTERS, vnet_ip4_nbr_counters) \ -_(VNET_IP6_NBR_COUNTERS, vnet_ip6_nbr_counters) +_(SW_INTERFACE_EVENT, sw_interface_event) typedef struct { @@ -6108,205 +5839,6 @@ dump_ipv6_table (vat_main_t * vam) return dump_ip_table (vam, 1); } -static char * -counter_type_to_str (u8 counter_type, u8 is_combined) -{ - if (!is_combined) - { - switch (counter_type) - { - case VNET_INTERFACE_COUNTER_DROP: - return "drop"; - case VNET_INTERFACE_COUNTER_PUNT: - return "punt"; - case VNET_INTERFACE_COUNTER_IP4: - return "ip4"; - case VNET_INTERFACE_COUNTER_IP6: - return "ip6"; - case VNET_INTERFACE_COUNTER_RX_NO_BUF: - return "rx-no-buf"; - case VNET_INTERFACE_COUNTER_RX_MISS: - return "rx-miss"; - case VNET_INTERFACE_COUNTER_RX_ERROR: - return "rx-error"; - case VNET_INTERFACE_COUNTER_TX_ERROR: - return "tx-error"; - default: - return "INVALID-COUNTER-TYPE"; - } - } - else - { - switch (counter_type) - { - case VNET_INTERFACE_COUNTER_RX: - return "rx"; - case VNET_INTERFACE_COUNTER_TX: - return "tx"; - default: - return "INVALID-COUNTER-TYPE"; - } - } -} - -static int -dump_stats_table (vat_main_t * vam) -{ - vat_json_node_t node; - vat_json_node_t *msg_array; - vat_json_node_t *msg; - vat_json_node_t *counter_array; - vat_json_node_t *counter; - interface_counter_t c; - u64 packets; - ip4_fib_counter_t *c4; - ip6_fib_counter_t *c6; - ip4_nbr_counter_t *n4; - ip6_nbr_counter_t *n6; - int i, j; - - if (!vam->json_output) - { - clib_warning ("dump_stats_table supported only in JSON format"); - return -99; - } - - vat_json_init_object (&node); - - /* interface counters */ - msg_array = vat_json_object_add (&node, "interface_counters"); - vat_json_init_array (msg_array); - for (i = 0; i < vec_len (vam->simple_interface_counters); i++) - { - msg = vat_json_array_add (msg_array); - vat_json_init_object (msg); - vat_json_object_add_string_copy (msg, "vnet_counter_type", - (u8 *) counter_type_to_str (i, 0)); - vat_json_object_add_int (msg, "is_combined", 0); - counter_array = vat_json_object_add (msg, "data"); - vat_json_init_array (counter_array); - for (j = 0; j < vec_len (vam->simple_interface_counters[i]); j++) - { - packets = vam->simple_interface_counters[i][j]; - vat_json_array_add_uint (counter_array, packets); - } - } - for (i = 0; i < vec_len (vam->combined_interface_counters); i++) - { - msg = vat_json_array_add (msg_array); - vat_json_init_object (msg); - vat_json_object_add_string_copy (msg, "vnet_counter_type", - (u8 *) counter_type_to_str (i, 1)); - vat_json_object_add_int (msg, "is_combined", 1); - counter_array = vat_json_object_add (msg, "data"); - vat_json_init_array (counter_array); - for (j = 0; j < vec_len (vam->combined_interface_counters[i]); j++) - { - c = vam->combined_interface_counters[i][j]; - counter = vat_json_array_add (counter_array); - vat_json_init_object (counter); - vat_json_object_add_uint (counter, "packets", c.packets); - vat_json_object_add_uint (counter, "bytes", c.bytes); - } - } - - /* ip4 fib counters */ - msg_array = vat_json_object_add (&node, "ip4_fib_counters"); - vat_json_init_array (msg_array); - for (i = 0; i < vec_len (vam->ip4_fib_counters); i++) - { - msg = vat_json_array_add (msg_array); - vat_json_init_object (msg); - vat_json_object_add_uint (msg, "vrf_id", - vam->ip4_fib_counters_vrf_id_by_index[i]); - counter_array = vat_json_object_add (msg, "c"); - vat_json_init_array (counter_array); - for (j = 0; j < vec_len (vam->ip4_fib_counters[i]); j++) - { - counter = vat_json_array_add (counter_array); - vat_json_init_object (counter); - c4 = &vam->ip4_fib_counters[i][j]; - vat_json_object_add_ip4 (counter, "address", c4->address); - vat_json_object_add_uint (counter, "address_length", - c4->address_length); - vat_json_object_add_uint (counter, "packets", c4->packets); - vat_json_object_add_uint (counter, "bytes", c4->bytes); - } - } - - /* ip6 fib counters */ - msg_array = vat_json_object_add (&node, "ip6_fib_counters"); - vat_json_init_array (msg_array); - for (i = 0; i < vec_len (vam->ip6_fib_counters); i++) - { - msg = vat_json_array_add (msg_array); - vat_json_init_object (msg); - vat_json_object_add_uint (msg, "vrf_id", - vam->ip6_fib_counters_vrf_id_by_index[i]); - counter_array = vat_json_object_add (msg, "c"); - vat_json_init_array (counter_array); - for (j = 0; j < vec_len (vam->ip6_fib_counters[i]); j++) - { - counter = vat_json_array_add (counter_array); - vat_json_init_object (counter); - c6 = &vam->ip6_fib_counters[i][j]; - vat_json_object_add_ip6 (counter, "address", c6->address); - vat_json_object_add_uint (counter, "address_length", - c6->address_length); - vat_json_object_add_uint (counter, "packets", c6->packets); - vat_json_object_add_uint (counter, "bytes", c6->bytes); - } - } - - /* ip4 nbr counters */ - msg_array = vat_json_object_add (&node, "ip4_nbr_counters"); - vat_json_init_array (msg_array); - for (i = 0; i < vec_len (vam->ip4_nbr_counters); i++) - { - msg = vat_json_array_add (msg_array); - vat_json_init_object (msg); - vat_json_object_add_uint (msg, "sw_if_index", i); - counter_array = vat_json_object_add (msg, "c"); - vat_json_init_array (counter_array); - for (j = 0; j < vec_len (vam->ip4_nbr_counters[i]); j++) - { - counter = vat_json_array_add (counter_array); - vat_json_init_object (counter); - n4 = &vam->ip4_nbr_counters[i][j]; - vat_json_object_add_ip4 (counter, "address", n4->address); - vat_json_object_add_uint (counter, "link-type", n4->linkt); - vat_json_object_add_uint (counter, "packets", n4->packets); - vat_json_object_add_uint (counter, "bytes", n4->bytes); - } - } - - /* ip6 nbr counters */ - msg_array = vat_json_object_add (&node, "ip6_nbr_counters"); - vat_json_init_array (msg_array); - for (i = 0; i < vec_len (vam->ip6_nbr_counters); i++) - { - msg = vat_json_array_add (msg_array); - vat_json_init_object (msg); - vat_json_object_add_uint (msg, "sw_if_index", i); - counter_array = vat_json_object_add (msg, "c"); - vat_json_init_array (counter_array); - for (j = 0; j < vec_len (vam->ip6_nbr_counters[i]); j++) - { - counter = vat_json_array_add (counter_array); - vat_json_init_object (counter); - n6 = &vam->ip6_nbr_counters[i][j]; - vat_json_object_add_ip6 (counter, "address", n6->address); - vat_json_object_add_uint (counter, "packets", n6->packets); - vat_json_object_add_uint (counter, "bytes", n6->bytes); - } - } - - vat_json_print (vam->ofp, &node); - vat_json_free (&node); - - return 0; -} - /* * Pass CLI buffers directly in the CLI_INBAND API message, * instead of an additional shared memory area. @@ -6339,8 +5871,7 @@ exec_inband (vat_main_t * vam) */ u32 len = vec_len (vam->input->buffer); M2 (CLI_INBAND, mp, len); - clib_memcpy (mp->cmd, vam->input->buffer, len); - mp->length = htonl (len); + vl_api_to_api_string (len - 1, (const char *) vam->input->buffer, &mp->cmd); S (mp); W (ret); @@ -6434,38 +5965,6 @@ api_delete_loopback (vat_main_t * vam) return ret; } -static int -api_want_stats (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_want_stats_t *mp; - int enable = -1; - int ret; - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "enable")) - enable = 1; - else if (unformat (i, "disable")) - enable = 0; - else - break; - } - - if (enable == -1) - { - errmsg ("missing enable|disable"); - return -99; - } - - M (WANT_STATS, mp); - mp->enable_disable = enable; - - S (mp); - W (ret); - return ret; -} - static int api_want_interface_events (vat_main_t * vam) { @@ -7824,7 +7323,7 @@ static int api_bd_ip_mac_add_del (vat_main_t * vam) { vl_api_address_t ip = VL_API_ZERO_ADDRESS; - vl_api_mac_address_t mac = VL_API_ZERO_MAC_ADDRESS; + vl_api_mac_address_t mac = { 0 }; unformat_input_t *i = vam->input; vl_api_bd_ip_mac_add_del_t *mp; ip46_type_t type; @@ -7888,6 +7387,40 @@ api_bd_ip_mac_add_del (vat_main_t * vam) return ret; } +static int +api_bd_ip_mac_flush (vat_main_t * vam) +{ + unformat_input_t *i = vam->input; + vl_api_bd_ip_mac_flush_t *mp; + u32 bd_id; + u8 bd_id_set = 0; + int ret; + + while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) + { + if (unformat (i, "bd_id %d", &bd_id)) + { + bd_id_set++; + } + else + break; + } + + if (bd_id_set == 0) + { + errmsg ("missing bridge domain"); + return -99; + } + + M (BD_IP_MAC_FLUSH, mp); + + mp->bd_id = ntohl (bd_id); + + S (mp); + W (ret); + return ret; +} + static void vl_api_bd_ip_mac_details_t_handler (vl_api_bd_ip_mac_details_t * mp) { @@ -21725,10 +21258,10 @@ api_ipsec_gre_add_del_tunnel (vat_main_t * vam) } static int -api_punt (vat_main_t * vam) +api_set_punt (vat_main_t * vam) { unformat_input_t *i = vam->input; - vl_api_punt_t *mp; + vl_api_set_punt_t *mp; u32 ipv = ~0; u32 protocol = ~0; u32 port = ~0; @@ -21752,12 +21285,12 @@ api_punt (vat_main_t * vam) } } - M (PUNT, mp); + M (SET_PUNT, mp); mp->is_add = (u8) is_add; - mp->ipv = (u8) ipv; - mp->l4_protocol = (u8) protocol; - mp->l4_port = htons ((u16) port); + mp->punt.ipv = (u8) ipv; + mp->punt.l4_protocol = (u8) protocol; + mp->punt.l4_port = htons ((u16) port); S (mp); W (ret); @@ -23855,9 +23388,9 @@ _(ikev2_initiate_del_child_sa, "") \ _(ikev2_initiate_rekey_child_sa, "") \ _(delete_loopback,"sw_if_index ") \ _(bd_ip_mac_add_del, "bd_id [del]") \ -_(bd_ip_mac_dump, "[bd_id] ") \ +_(bd_ip_mac_flush, "bd_id ") \ +_(bd_ip_mac_dump, "[bd_id] ") \ _(want_interface_events, "enable|disable") \ -_(want_stats,"enable|disable") \ _(get_first_msg_id, "client ") \ _(cop_interface_enable_disable, " | sw_if_index [disable]") \ _(cop_whitelist_enable_disable, " | sw_if_index \n" \ @@ -24033,7 +23566,7 @@ _(l2_interface_pbb_tag_rewrite, \ " | sw_if_index \n" \ "[disable | push | pop | translate_pbb_stag ] \n" \ "dmac smac sid [vlanid ]") \ -_(punt, "protocol [ip ] [port ] [del]") \ +_(set_punt, "protocol [ip ] [port ] [del]") \ _(flow_classify_set_interface, \ " | sw_if_index [ip4-table ] [ip6-table ] [del]") \ _(flow_classify_dump, "type [ip4|ip6]") \ @@ -24079,7 +23612,6 @@ _(dump_interface_table, "usage: dump_interface_table") \ _(dump_sub_interface_table, "usage: dump_sub_interface_table") \ _(dump_ipv4_table, "usage: dump_ipv4_table") \ _(dump_ipv6_table, "usage: dump_ipv6_table") \ -_(dump_stats_table, "usage: dump_stats_table") \ _(dump_macro_table, "usage: dump_macro_table ") \ _(dump_node_table, "usage: dump_node_table") \ _(dump_msg_api_table, "usage: dump_msg_api_table") \