X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvat%2Fapi_format.c;h=0e53f56196ad4bd8b9cedda0b90a5fe4bafcacce;hb=06fda9cea94e0009fd0238a77d2e0f39e46f666c;hp=88d4c0167e4ea42838bf20882b97cade3689b70f;hpb=b474380f82b75d9640f9bf6ee78c891a6794dbfb;p=vpp.git diff --git a/src/vat/api_format.c b/src/vat/api_format.c index 88d4c0167e4..0e53f56196a 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -1319,6 +1319,80 @@ static void vl_api_show_version_reply_t_handler_json vam->result_ready = 1; } +static void vl_api_show_threads_reply_t_handler + (vl_api_show_threads_reply_t * mp) +{ + vat_main_t *vam = &vat_main; + i32 retval = ntohl (mp->retval); + int i, count = 0; + + if (retval >= 0) + count = ntohl (mp->count); + + for (i = 0; i < count; i++) + print (vam->ofp, + "\n%-2d %-11s %-11s %-5d %-6d %-4d %-6d", + ntohl (mp->thread_data[i].id), mp->thread_data[i].name, + mp->thread_data[i].type, ntohl (mp->thread_data[i].pid), + ntohl (mp->thread_data[i].cpu_id), ntohl (mp->thread_data[i].core), + ntohl (mp->thread_data[i].cpu_socket)); + + vam->retval = retval; + vam->result_ready = 1; +} + +static void vl_api_show_threads_reply_t_handler_json + (vl_api_show_threads_reply_t * mp) +{ + vat_main_t *vam = &vat_main; + vat_json_node_t node; + vl_api_thread_data_t *td; + i32 retval = ntohl (mp->retval); + int i, count = 0; + + if (retval >= 0) + count = ntohl (mp->count); + + vat_json_init_object (&node); + vat_json_object_add_int (&node, "retval", retval); + vat_json_object_add_uint (&node, "count", count); + + for (i = 0; i < count; i++) + { + td = &mp->thread_data[i]; + vat_json_object_add_uint (&node, "id", ntohl (td->id)); + vat_json_object_add_string_copy (&node, "name", td->name); + vat_json_object_add_string_copy (&node, "type", td->type); + vat_json_object_add_uint (&node, "pid", ntohl (td->pid)); + vat_json_object_add_int (&node, "cpu_id", ntohl (td->cpu_id)); + vat_json_object_add_int (&node, "core", ntohl (td->id)); + vat_json_object_add_int (&node, "cpu_socket", ntohl (td->cpu_socket)); + } + + vat_json_print (vam->ofp, &node); + vat_json_free (&node); + + vam->retval = retval; + vam->result_ready = 1; +} + +static int +api_show_threads (vat_main_t * vam) +{ + vl_api_show_threads_t *mp; + int ret; + + print (vam->ofp, + "\n%-2s %-11s %-11s %-5s %-6s %-4s %-6s", + "ID", "Name", "Type", "LWP", "cpu_id", "Core", "Socket"); + + M (SHOW_THREADS, mp); + + S (mp); + W (ret); + return ret; +} + static void vl_api_ip4_arp_event_t_handler (vl_api_ip4_arp_event_t * mp) { @@ -1355,7 +1429,7 @@ static void vl_api_l2_macs_event_t_handler (vl_api_l2_macs_event_t * mp) { u32 n_macs = ntohl (mp->n_macs); - errmsg ("L2MAC event recived with pid %d cl-idx %d for %d macs: \n", + errmsg ("L2MAC event received with pid %d cl-idx %d for %d macs: \n", ntohl (mp->pid), mp->client_index, n_macs); int i; for (i = 0; i < n_macs; i++) @@ -1389,12 +1463,13 @@ static void vl_api_bridge_domain_details_t_handler u32 n_sw_ifs = ntohl (mp->n_sw_ifs); int i; - print (vam->ofp, "\n%-3s %-3s %-3s %-3s %-3s %-3s", - " ID", "LRN", "FWD", "FLD", "BVI", "#IF"); + print (vam->ofp, "\n%-3s %-3s %-3s %-3s %-3s %-6s %-3s", + " ID", "LRN", "FWD", "FLD", "BVI", "UU-FWD", "#IF"); - print (vam->ofp, "%3d %3d %3d %3d %3d %3d", + print (vam->ofp, "%3d %3d %3d %3d %3d %6d %3d", ntohl (mp->bd_id), mp->learn, mp->forward, - mp->flood, ntohl (mp->bvi_sw_if_index), n_sw_ifs); + mp->flood, ntohl (mp->bvi_sw_if_index), + ntohl (mp->uu_fwd_sw_if_index), n_sw_ifs); if (n_sw_ifs) { @@ -2069,8 +2144,10 @@ static void vl_api_mpls_tunnel_add_del_reply_t_handler else { vam->retval = retval; + vam->sw_if_index = ntohl (mp->sw_if_index); vam->result_ready = 1; } + vam->regenerate_interface_table = 1; } static void vl_api_mpls_tunnel_add_del_reply_t_handler_json @@ -5549,6 +5626,7 @@ _(SW_INTERFACE_ADD_DEL_ADDRESS_REPLY, \ sw_interface_add_del_address_reply) \ _(SW_INTERFACE_SET_RX_MODE_REPLY, sw_interface_set_rx_mode_reply) \ _(SW_INTERFACE_SET_RX_PLACEMENT_REPLY, sw_interface_set_rx_placement_reply) \ +_(SW_INTERFACE_RX_PLACEMENT_DETAILS, sw_interface_rx_placement_details) \ _(SW_INTERFACE_SET_TABLE_REPLY, sw_interface_set_table_reply) \ _(SW_INTERFACE_SET_MPLS_ENABLE_REPLY, sw_interface_set_mpls_enable_reply) \ _(SW_INTERFACE_SET_VPATH_REPLY, sw_interface_set_vpath_reply) \ @@ -5653,6 +5731,7 @@ _(CREATE_VHOST_USER_IF_REPLY, create_vhost_user_if_reply) \ _(MODIFY_VHOST_USER_IF_REPLY, modify_vhost_user_if_reply) \ _(DELETE_VHOST_USER_IF_REPLY, delete_vhost_user_if_reply) \ _(SHOW_VERSION_REPLY, show_version_reply) \ +_(SHOW_THREADS_REPLY, show_threads_reply) \ _(L2_FIB_TABLE_DETAILS, l2_fib_table_details) \ _(VXLAN_GPE_ADD_DEL_TUNNEL_REPLY, vxlan_gpe_add_del_tunnel_reply) \ _(VXLAN_GPE_TUNNEL_DETAILS, vxlan_gpe_tunnel_details) \ @@ -6620,6 +6699,82 @@ api_sw_interface_set_rx_placement (vat_main_t * vam) return ret; } +static void vl_api_sw_interface_rx_placement_details_t_handler + (vl_api_sw_interface_rx_placement_details_t * mp) +{ + vat_main_t *vam = &vat_main; + u32 worker_id = ntohl (mp->worker_id); + + print (vam->ofp, + "\n%-11d %-11s %-6d %-5d %-9s", + ntohl (mp->sw_if_index), (worker_id == 0) ? "main" : "worker", + worker_id, ntohl (mp->queue_id), + (mp->mode == + 1) ? "polling" : ((mp->mode == 2) ? "interrupt" : "adaptive")); +} + +static void vl_api_sw_interface_rx_placement_details_t_handler_json + (vl_api_sw_interface_rx_placement_details_t * mp) +{ + vat_main_t *vam = &vat_main; + vat_json_node_t *node = NULL; + + 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, "sw_if_index", ntohl (mp->sw_if_index)); + vat_json_object_add_uint (node, "worker_id", ntohl (mp->worker_id)); + vat_json_object_add_uint (node, "queue_id", ntohl (mp->queue_id)); + vat_json_object_add_uint (node, "mode", mp->mode); +} + +static int +api_sw_interface_rx_placement_dump (vat_main_t * vam) +{ + unformat_input_t *i = vam->input; + vl_api_sw_interface_rx_placement_dump_t *mp; + vl_api_control_ping_t *mp_ping; + int ret; + u32 sw_if_index; + u8 sw_if_index_set = 0; + + while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) + { + if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) + sw_if_index_set++; + else if (unformat (i, "sw_if_index %d", &sw_if_index)) + sw_if_index_set++; + else + break; + } + + print (vam->ofp, + "\n%-11s %-11s %-6s %-5s %-4s", + "sw_if_index", "main/worker", "thread", "queue", "mode"); + + /* Dump Interface rx placement */ + M (SW_INTERFACE_RX_PLACEMENT_DUMP, mp); + + if (sw_if_index_set) + mp->sw_if_index = htonl (sw_if_index); + else + mp->sw_if_index = ~0; + + S (mp); + + /* Use a control ping for synchronization */ + MPING (CONTROL_PING, mp_ping); + S (mp_ping); + + W (ret); + return ret; +} + static int api_sw_interface_clear_stats (vat_main_t * vam) { @@ -8675,6 +8830,7 @@ api_ip_add_del_route (vat_main_t * vam) mp->is_resolve_host = resolve_host; mp->is_resolve_attached = resolve_attached; mp->next_hop_weight = next_hop_weight; + mp->next_hop_preference = 0; mp->dst_address_length = dst_address_length; mp->next_hop_table_id = ntohl (next_hop_table_id); mp->classify_table_index = ntohl (classify_table_index); @@ -9082,6 +9238,7 @@ api_mpls_route_add_del (vat_main_t * vam) mp->mr_is_resolve_attached = resolve_attached; mp->mr_is_interface_rx = is_interface_rx; mp->mr_next_hop_weight = next_hop_weight; + mp->mr_next_hop_preference = 0; mp->mr_next_hop_table_id = ntohl (next_hop_table_id); mp->mr_classify_table_index = ntohl (classify_table_index); mp->mr_next_hop_via_label = ntohl (next_hop_via_label); @@ -9221,7 +9378,7 @@ api_mpls_ip_bind_unbind (vat_main_t * vam) if (!address_set) { - errmsg ("IP addres not set"); + errmsg ("IP address not set"); return -99; } @@ -9610,18 +9767,21 @@ api_mpls_tunnel_add_del (vat_main_t * vam) .as_u32 = 0, }; ip6_address_t v6_next_hop_address = { {0} }; + vl_api_fib_mpls_label_t *next_hop_out_label_stack = NULL; mpls_label_t next_hop_via_label = MPLS_LABEL_INVALID; - mpls_label_t next_hop_out_label = MPLS_LABEL_INVALID, *labels = NULL; + mpls_label_t next_hop_out_label = MPLS_LABEL_INVALID; int ret; while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) { if (unformat (i, "add")) is_add = 1; + else + if (unformat + (i, "del %U", api_unformat_sw_if_index, vam, &sw_if_index)) + is_add = 0; else if (unformat (i, "del sw_if_index %d", &sw_if_index)) is_add = 0; - else if (unformat (i, "sw_if_index %d", &next_hop_sw_if_index)) - ; else if (unformat (i, "via %U", unformat_ip4_address, &v4_next_hop_address)) { @@ -9634,12 +9794,25 @@ api_mpls_tunnel_add_del (vat_main_t * vam) } else if (unformat (i, "via-label %d", &next_hop_via_label)) ; + else + if (unformat + (i, "%U", api_unformat_sw_if_index, vam, &next_hop_sw_if_index)) + ; + else if (unformat (i, "sw_if_index %d", &next_hop_sw_if_index)) + ; else if (unformat (i, "l2-only")) l2_only = 1; else if (unformat (i, "next-hop-table %d", &next_hop_table_id)) ; else if (unformat (i, "out-label %d", &next_hop_out_label)) - vec_add1 (labels, ntohl (next_hop_out_label)); + { + vl_api_fib_mpls_label_t fib_label = { + .label = ntohl (next_hop_out_label), + .ttl = 64, + .exp = 0, + }; + vec_add1 (next_hop_out_label_stack, fib_label); + } else { clib_warning ("parse error '%U'", format_unformat_error, i); @@ -9647,7 +9820,8 @@ api_mpls_tunnel_add_del (vat_main_t * vam) } } - M2 (MPLS_TUNNEL_ADD_DEL, mp, sizeof (mpls_label_t) * vec_len (labels)); + M2 (MPLS_TUNNEL_ADD_DEL, mp, sizeof (vl_api_fib_mpls_label_t) * + vec_len (next_hop_out_label_stack)); mp->mt_next_hop_sw_if_index = ntohl (next_hop_sw_if_index); mp->mt_sw_if_index = ntohl (sw_if_index); @@ -9656,14 +9830,18 @@ api_mpls_tunnel_add_del (vat_main_t * vam) mp->mt_next_hop_table_id = ntohl (next_hop_table_id); mp->mt_next_hop_proto_is_ip4 = next_hop_proto_is_ip4; mp->mt_next_hop_via_label = ntohl (next_hop_via_label); + mp->mt_next_hop_weight = 1; + mp->mt_next_hop_preference = 0; - mp->mt_next_hop_n_out_labels = vec_len (labels); + mp->mt_next_hop_n_out_labels = vec_len (next_hop_out_label_stack); if (0 != mp->mt_next_hop_n_out_labels) { - clib_memcpy (mp->mt_next_hop_out_label_stack, labels, - sizeof (mpls_label_t) * mp->mt_next_hop_n_out_labels); - vec_free (labels); + clib_memcpy (mp->mt_next_hop_out_label_stack, + next_hop_out_label_stack, + (vec_len (next_hop_out_label_stack) * + sizeof (vl_api_fib_mpls_label_t))); + vec_free (next_hop_out_label_stack); } if (next_hop_proto_is_ip4) @@ -20347,23 +20525,20 @@ api_mpls_tunnel_dump (vat_main_t * vam) { vl_api_mpls_tunnel_dump_t *mp; vl_api_control_ping_t *mp_ping; - i32 index = -1; + u32 sw_if_index = ~0; int ret; /* Parse args required to build the message */ while (unformat_check_input (vam->input) != UNFORMAT_END_OF_INPUT) { - if (!unformat (vam->input, "tunnel_index %d", &index)) - { - index = -1; - break; - } + if (unformat (vam->input, "sw_if_index %d", &sw_if_index)) + ; } - print (vam->ofp, " tunnel_index %d", index); + print (vam->ofp, " sw_if_index %d", sw_if_index); M (MPLS_TUNNEL_DUMP, mp); - mp->tunnel_index = htonl (index); + mp->sw_if_index = htonl (sw_if_index); S (mp); /* Use a control ping for synchronization */ @@ -23469,6 +23644,8 @@ _(sw_interface_set_rx_mode, \ " | sw_if_index [queue ] ") \ _(sw_interface_set_rx_placement, \ " | sw_if_index [queue ] [worker | main]") \ +_(sw_interface_rx_placement_dump, \ + "[ | sw_if_index ]") \ _(sw_interface_set_table, \ " | sw_if_index vrf [ipv6]") \ _(sw_interface_set_mpls_enable, \ @@ -23527,8 +23704,8 @@ _(ip_table_add_del, \ _(ip_add_del_route, \ "/ via <||sw_if_index |via-label >\n" \ "[table-id ] [ | sw_if_index ] [resolve-attempts ]\n"\ - "[weight ] [drop] [local] [classify ] [del]\n" \ - "[multipath] [count ]") \ + "[weight ] [drop] [local] [classify ] [out-label ]\n" \ + "[multipath] [count ] [del]") \ _(ip_mroute_add_del, \ " / [table-id ]\n" \ "[ | sw_if_index ] [local] [del]") \ @@ -23539,12 +23716,14 @@ _(mpls_route_add_del, \ "lookup-ip4-table | lookup-in-ip6-table |\n" \ "l2-input-on | l2-input-on sw_if_index >\n" \ "[ | sw_if_index ] [resolve-attempts ] [weight ]\n" \ - "[drop] [local] [classify ] [multipath] [count ] [del]") \ + "[drop] [local] [classify ] [out-label ] [multipath]\n" \ + "[count ] [del]") \ _(mpls_ip_bind_unbind, \ "