diff options
Diffstat (limited to 'src/vat')
-rw-r--r-- | src/vat/api_format.c | 1414 |
1 files changed, 18 insertions, 1396 deletions
diff --git a/src/vat/api_format.c b/src/vat/api_format.c index 52eb5aeb4eb..8c10b95b0c1 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -579,263 +579,6 @@ ip_set (ip46_address_t * dst, void *src, u8 is_ip4) } -static void vl_api_create_loopback_reply_t_handler - (vl_api_create_loopback_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - i32 retval = ntohl (mp->retval); - - vam->retval = retval; - vam->regenerate_interface_table = 1; - vam->sw_if_index = ntohl (mp->sw_if_index); - vam->result_ready = 1; -} - -static void vl_api_create_loopback_reply_t_handler_json - (vl_api_create_loopback_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - vat_json_node_t node; - - vat_json_init_object (&node); - vat_json_object_add_int (&node, "retval", ntohl (mp->retval)); - vat_json_object_add_uint (&node, "sw_if_index", ntohl (mp->sw_if_index)); - - vat_json_print (vam->ofp, &node); - vat_json_free (&node); - vam->retval = ntohl (mp->retval); - vam->result_ready = 1; -} - -static void vl_api_create_loopback_instance_reply_t_handler - (vl_api_create_loopback_instance_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - i32 retval = ntohl (mp->retval); - - vam->retval = retval; - vam->regenerate_interface_table = 1; - vam->sw_if_index = ntohl (mp->sw_if_index); - vam->result_ready = 1; -} - -static void vl_api_create_loopback_instance_reply_t_handler_json - (vl_api_create_loopback_instance_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - vat_json_node_t node; - - vat_json_init_object (&node); - vat_json_object_add_int (&node, "retval", ntohl (mp->retval)); - vat_json_object_add_uint (&node, "sw_if_index", ntohl (mp->sw_if_index)); - - vat_json_print (vam->ofp, &node); - vat_json_free (&node); - vam->retval = ntohl (mp->retval); - vam->result_ready = 1; -} - -static void vl_api_create_vlan_subif_reply_t_handler - (vl_api_create_vlan_subif_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - i32 retval = ntohl (mp->retval); - - vam->retval = retval; - vam->regenerate_interface_table = 1; - vam->sw_if_index = ntohl (mp->sw_if_index); - vam->result_ready = 1; -} - -static void vl_api_create_vlan_subif_reply_t_handler_json - (vl_api_create_vlan_subif_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - vat_json_node_t node; - - vat_json_init_object (&node); - vat_json_object_add_int (&node, "retval", ntohl (mp->retval)); - vat_json_object_add_uint (&node, "sw_if_index", ntohl (mp->sw_if_index)); - - vat_json_print (vam->ofp, &node); - vat_json_free (&node); - - vam->retval = ntohl (mp->retval); - vam->result_ready = 1; -} - -static void vl_api_create_subif_reply_t_handler - (vl_api_create_subif_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - i32 retval = ntohl (mp->retval); - - vam->retval = retval; - vam->regenerate_interface_table = 1; - vam->sw_if_index = ntohl (mp->sw_if_index); - vam->result_ready = 1; -} - -static void vl_api_create_subif_reply_t_handler_json - (vl_api_create_subif_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - vat_json_node_t node; - - vat_json_init_object (&node); - vat_json_object_add_int (&node, "retval", ntohl (mp->retval)); - vat_json_object_add_uint (&node, "sw_if_index", ntohl (mp->sw_if_index)); - - vat_json_print (vam->ofp, &node); - vat_json_free (&node); - - vam->retval = ntohl (mp->retval); - vam->result_ready = 1; -} - -static void vl_api_interface_name_renumber_reply_t_handler - (vl_api_interface_name_renumber_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - i32 retval = ntohl (mp->retval); - - vam->retval = retval; - vam->regenerate_interface_table = 1; - vam->result_ready = 1; -} - -static void vl_api_interface_name_renumber_reply_t_handler_json - (vl_api_interface_name_renumber_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - vat_json_node_t node; - - vat_json_init_object (&node); - vat_json_object_add_int (&node, "retval", ntohl (mp->retval)); - - vat_json_print (vam->ofp, &node); - vat_json_free (&node); - - vam->retval = ntohl (mp->retval); - vam->result_ready = 1; -} - -/* - * Special-case: build the interface table, maintain - * the next loopback sw_if_index vbl. - */ -static void vl_api_sw_interface_details_t_handler - (vl_api_sw_interface_details_t * mp) -{ - vat_main_t *vam = &vat_main; - u8 *s = format (0, "%s%c", mp->interface_name, 0); - - hash_set_mem (vam->sw_if_index_by_interface_name, s, - ntohl (mp->sw_if_index)); - - /* In sub interface case, fill the sub interface table entry */ - if (mp->sw_if_index != mp->sup_sw_if_index) - { - sw_interface_subif_t *sub = NULL; - - vec_add2 (vam->sw_if_subif_table, sub, 1); - - vec_validate (sub->interface_name, strlen ((char *) s) + 1); - strncpy ((char *) sub->interface_name, (char *) s, - vec_len (sub->interface_name)); - sub->sw_if_index = ntohl (mp->sw_if_index); - sub->sub_id = ntohl (mp->sub_id); - - sub->raw_flags = ntohl (mp->sub_if_flags & SUB_IF_API_FLAG_MASK_VNET); - - sub->sub_number_of_tags = mp->sub_number_of_tags; - sub->sub_outer_vlan_id = ntohs (mp->sub_outer_vlan_id); - sub->sub_inner_vlan_id = ntohs (mp->sub_inner_vlan_id); - - /* vlan tag rewrite */ - sub->vtr_op = ntohl (mp->vtr_op); - sub->vtr_push_dot1q = ntohl (mp->vtr_push_dot1q); - sub->vtr_tag1 = ntohl (mp->vtr_tag1); - sub->vtr_tag2 = ntohl (mp->vtr_tag2); - } -} - -static void vl_api_sw_interface_details_t_handler_json - (vl_api_sw_interface_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, "sup_sw_if_index", - ntohl (mp->sup_sw_if_index)); - vat_json_object_add_bytes (node, "l2_address", mp->l2_address, - sizeof (mp->l2_address)); - vat_json_object_add_string_copy (node, "interface_name", - mp->interface_name); - vat_json_object_add_string_copy (node, "interface_dev_type", - mp->interface_dev_type); - vat_json_object_add_uint (node, "flags", mp->flags); - vat_json_object_add_uint (node, "link_duplex", mp->link_duplex); - vat_json_object_add_uint (node, "link_speed", mp->link_speed); - vat_json_object_add_uint (node, "mtu", ntohs (mp->link_mtu)); - vat_json_object_add_uint (node, "sub_id", ntohl (mp->sub_id)); - vat_json_object_add_uint (node, "sub_number_of_tags", - mp->sub_number_of_tags); - vat_json_object_add_uint (node, "sub_outer_vlan_id", - ntohs (mp->sub_outer_vlan_id)); - vat_json_object_add_uint (node, "sub_inner_vlan_id", - ntohs (mp->sub_inner_vlan_id)); - vat_json_object_add_uint (node, "sub_if_flags", ntohl (mp->sub_if_flags)); - vat_json_object_add_uint (node, "vtr_op", ntohl (mp->vtr_op)); - vat_json_object_add_uint (node, "vtr_push_dot1q", - ntohl (mp->vtr_push_dot1q)); - vat_json_object_add_uint (node, "vtr_tag1", ntohl (mp->vtr_tag1)); - vat_json_object_add_uint (node, "vtr_tag2", ntohl (mp->vtr_tag2)); - if (ntohl (mp->sub_if_flags) & SUB_IF_API_FLAG_DOT1AH) - { - vat_json_object_add_string_copy (node, "pbb_vtr_dmac", - format (0, "%U", - format_ethernet_address, - &mp->b_dmac)); - vat_json_object_add_string_copy (node, "pbb_vtr_smac", - format (0, "%U", - format_ethernet_address, - &mp->b_smac)); - vat_json_object_add_uint (node, "pbb_vtr_b_vlanid", mp->b_vlanid); - vat_json_object_add_uint (node, "pbb_vtr_i_sid", mp->i_sid); - } -} - -#if VPP_API_TEST_BUILTIN == 0 -static void vl_api_sw_interface_event_t_handler - (vl_api_sw_interface_event_t * mp) -{ - vat_main_t *vam = &vat_main; - if (vam->interface_event_display) - errmsg ("interface flags: sw_if_index %d %s %s", - ntohl (mp->sw_if_index), - ((ntohl (mp->flags)) & IF_STATUS_API_FLAG_ADMIN_UP) ? - "admin-up" : "admin-down", - ((ntohl (mp->flags)) & IF_STATUS_API_FLAG_LINK_UP) ? - "link-up" : "link-down"); -} -#endif - -__clib_unused static void -vl_api_sw_interface_event_t_handler_json (vl_api_sw_interface_event_t * mp) -{ - /* JSON output not supported */ -} - static void vl_api_cli_reply_t_handler (vl_api_cli_reply_t * mp) { @@ -1337,20 +1080,7 @@ format_hex_bytes (u8 * s, va_list * va) * a single function, but that could break in subtle ways. */ -#define foreach_standard_reply_retval_handler \ - _ (sw_interface_set_flags_reply) \ - _ (sw_interface_add_del_address_reply) \ - _ (sw_interface_set_rx_placement_reply) \ - _ (sw_interface_set_unnumbered_reply) \ - _ (sw_interface_set_table_reply) \ - _ (delete_loopback_reply) \ - _ (want_interface_events_reply) \ - _ (sw_interface_clear_stats_reply) \ - _ (delete_subif_reply) \ - _ (sw_interface_tag_add_del_reply) \ - _ (sw_interface_add_del_mac_address_reply) \ - _ (hw_interface_set_mtu_reply) \ - _ (session_rule_add_del_reply) +#define foreach_standard_reply_retval_handler _ (session_rule_add_del_reply) #define _(n) \ static void vl_api_##n##_t_handler \ @@ -1388,45 +1118,22 @@ foreach_standard_reply_retval_handler; * we just generated */ -#define foreach_vpe_api_reply_msg \ -_(CREATE_LOOPBACK_REPLY, create_loopback_reply) \ -_(CREATE_LOOPBACK_INSTANCE_REPLY, create_loopback_instance_reply) \ -_(SW_INTERFACE_DETAILS, sw_interface_details) \ -_(SW_INTERFACE_SET_FLAGS_REPLY, sw_interface_set_flags_reply) \ -_(CONTROL_PING_REPLY, control_ping_reply) \ -_(CLI_REPLY, cli_reply) \ -_(CLI_INBAND_REPLY, cli_inband_reply) \ -_(SW_INTERFACE_ADD_DEL_ADDRESS_REPLY, \ - sw_interface_add_del_address_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_UNNUMBERED_REPLY, \ - sw_interface_set_unnumbered_reply) \ -_(CREATE_VLAN_SUBIF_REPLY, create_vlan_subif_reply) \ -_(CREATE_SUBIF_REPLY, create_subif_reply) \ -_(GET_NODE_INDEX_REPLY, get_node_index_reply) \ -_(ADD_NODE_NEXT_REPLY, add_node_next_reply) \ -_(SHOW_VERSION_REPLY, show_version_reply) \ -_(SHOW_THREADS_REPLY, show_threads_reply) \ -_(INTERFACE_NAME_RENUMBER_REPLY, interface_name_renumber_reply) \ -_(DELETE_LOOPBACK_REPLY, delete_loopback_reply) \ -_(WANT_INTERFACE_EVENTS_REPLY, want_interface_events_reply) \ -_(GET_FIRST_MSG_ID_REPLY, get_first_msg_id_reply) \ -_(GET_NODE_GRAPH_REPLY, get_node_graph_reply) \ -_(SW_INTERFACE_CLEAR_STATS_REPLY, sw_interface_clear_stats_reply) \ -_(GET_NEXT_INDEX_REPLY, get_next_index_reply) \ -_(DELETE_SUBIF_REPLY, delete_subif_reply) \ -_(SW_INTERFACE_TAG_ADD_DEL_REPLY, sw_interface_tag_add_del_reply) \ -_(SW_INTERFACE_ADD_DEL_MAC_ADDRESS_REPLY, sw_interface_add_del_mac_address_reply) \ -_(HW_INTERFACE_SET_MTU_REPLY, hw_interface_set_mtu_reply) \ -_(SW_INTERFACE_GET_TABLE_REPLY, sw_interface_get_table_reply) \ -_(APP_NAMESPACE_ADD_DEL_REPLY, app_namespace_add_del_reply) \ -_(SESSION_RULE_ADD_DEL_REPLY, session_rule_add_del_reply) \ -_(SESSION_RULES_DETAILS, session_rules_details) \ +#define foreach_vpe_api_reply_msg \ + _ (GET_FIRST_MSG_ID_REPLY, get_first_msg_id_reply) \ + _ (GET_NODE_GRAPH_REPLY, get_node_graph_reply) \ + _ (CONTROL_PING_REPLY, control_ping_reply) \ + _ (CLI_REPLY, cli_reply) \ + _ (CLI_INBAND_REPLY, cli_inband_reply) \ + _ (GET_NODE_INDEX_REPLY, get_node_index_reply) \ + _ (GET_NEXT_INDEX_REPLY, get_next_index_reply) \ + _ (ADD_NODE_NEXT_REPLY, add_node_next_reply) \ + _ (SHOW_VERSION_REPLY, show_version_reply) \ + _ (SHOW_THREADS_REPLY, show_threads_reply) \ + _ (APP_NAMESPACE_ADD_DEL_REPLY, app_namespace_add_del_reply) \ + _ (SESSION_RULE_ADD_DEL_REPLY, session_rule_add_del_reply) \ + _ (SESSION_RULES_DETAILS, session_rules_details) #define foreach_standalone_reply_msg \ -_(SW_INTERFACE_EVENT, sw_interface_event) typedef struct { @@ -1438,108 +1145,6 @@ typedef struct case L2_VTR_ ## op: \ return "" # op; -static const char * -str_vtr_op (u32 vtr_op) -{ - switch (vtr_op) - { - STR_VTR_OP_CASE (DISABLED); - STR_VTR_OP_CASE (PUSH_1); - STR_VTR_OP_CASE (PUSH_2); - STR_VTR_OP_CASE (POP_1); - STR_VTR_OP_CASE (POP_2); - STR_VTR_OP_CASE (TRANSLATE_1_1); - STR_VTR_OP_CASE (TRANSLATE_1_2); - STR_VTR_OP_CASE (TRANSLATE_2_1); - STR_VTR_OP_CASE (TRANSLATE_2_2); - } - - return "UNKNOWN"; -} - -static int -dump_sub_interface_table (vat_main_t * vam) -{ - const sw_interface_subif_t *sub = NULL; - - if (vam->json_output) - { - clib_warning - ("JSON output supported only for VPE API calls and dump_stats_table"); - return -99; - } - - print (vam->ofp, - "%-30s%-12s%-11s%-7s%-5s%-9s%-9s%-6s%-8s%-10s%-10s", - "Interface", "sw_if_index", - "sub id", "dot1ad", "tags", "outer id", - "inner id", "exact", "default", "outer any", "inner any"); - - vec_foreach (sub, vam->sw_if_subif_table) - { - print (vam->ofp, - "%-30s%-12d%-11d%-7s%-5d%-9d%-9d%-6d%-8d%-10d%-10d", - sub->interface_name, - sub->sw_if_index, - sub->sub_id, sub->sub_dot1ad ? "dot1ad" : "dot1q", - sub->sub_number_of_tags, sub->sub_outer_vlan_id, - sub->sub_inner_vlan_id, sub->sub_exact_match, sub->sub_default, - sub->sub_outer_vlan_id_any, sub->sub_inner_vlan_id_any); - if (sub->vtr_op != L2_VTR_DISABLED) - { - print (vam->ofp, - " vlan-tag-rewrite - op: %-14s [ dot1q: %d " - "tag1: %d tag2: %d ]", - str_vtr_op (sub->vtr_op), sub->vtr_push_dot1q, - sub->vtr_tag1, sub->vtr_tag2); - } - } - - return 0; -} - -static int -name_sort_cmp (void *a1, void *a2) -{ - name_sort_t *n1 = a1; - name_sort_t *n2 = a2; - - return strcmp ((char *) n1->name, (char *) n2->name); -} - -static int -dump_interface_table (vat_main_t * vam) -{ - hash_pair_t *p; - name_sort_t *nses = 0, *ns; - - if (vam->json_output) - { - clib_warning - ("JSON output supported only for VPE API calls and dump_stats_table"); - return -99; - } - - /* *INDENT-OFF* */ - hash_foreach_pair (p, vam->sw_if_index_by_interface_name, - ({ - vec_add2 (nses, ns, 1); - ns->name = (u8 *)(p->key); - ns->value = (u32) p->value[0]; - })); - /* *INDENT-ON* */ - - vec_sort_with_function (nses, name_sort_cmp); - - print (vam->ofp, "%-25s%-15s", "Interface", "sw_if_index"); - vec_foreach (ns, nses) - { - print (vam->ofp, "%-25s%-15d", ns->name, ns->value); - } - vec_free (nses); - return 0; -} - /* * Pass CLI buffers directly in the CLI_INBAND API message, * instead of an additional shared memory area. @@ -1582,573 +1187,15 @@ exec_inband (vat_main_t * vam) } int -exec (vat_main_t * vam) +exec (vat_main_t *vam) { return exec_inband (vam); } -static int -api_create_loopback (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_create_loopback_t *mp; - vl_api_create_loopback_instance_t *mp_lbi; - u8 mac_address[6]; - u8 mac_set = 0; - u8 is_specified = 0; - u32 user_instance = 0; - int ret; - - clib_memset (mac_address, 0, sizeof (mac_address)); - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "mac %U", unformat_ethernet_address, mac_address)) - mac_set = 1; - if (unformat (i, "instance %d", &user_instance)) - is_specified = 1; - else - break; - } - - if (is_specified) - { - M (CREATE_LOOPBACK_INSTANCE, mp_lbi); - mp_lbi->is_specified = is_specified; - if (is_specified) - mp_lbi->user_instance = htonl (user_instance); - if (mac_set) - clib_memcpy (mp_lbi->mac_address, mac_address, sizeof (mac_address)); - S (mp_lbi); - } - else - { - /* Construct the API message */ - M (CREATE_LOOPBACK, mp); - if (mac_set) - clib_memcpy (mp->mac_address, mac_address, sizeof (mac_address)); - S (mp); - } - - W (ret); - return ret; -} - -static int -api_delete_loopback (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_delete_loopback_t *mp; - u32 sw_if_index = ~0; - int ret; - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "sw_if_index %d", &sw_if_index)) - ; - else - break; - } - - if (sw_if_index == ~0) - { - errmsg ("missing sw_if_index"); - return -99; - } - - /* Construct the API message */ - M (DELETE_LOOPBACK, mp); - mp->sw_if_index = ntohl (sw_if_index); - - S (mp); - W (ret); - return ret; -} - -static int -api_want_interface_events (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_want_interface_events_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_INTERFACE_EVENTS, mp); - mp->enable_disable = enable; - - vam->interface_event_display = enable; - - S (mp); - W (ret); - return ret; -} - - -/* Note: non-static, called once to set up the initial intfc table */ int -api_sw_interface_dump (vat_main_t * vam) -{ - vl_api_sw_interface_dump_t *mp; - vl_api_control_ping_t *mp_ping; - hash_pair_t *p; - name_sort_t *nses = 0, *ns; - sw_interface_subif_t *sub = NULL; - int ret; - - /* Toss the old name table */ - /* *INDENT-OFF* */ - hash_foreach_pair (p, vam->sw_if_index_by_interface_name, - ({ - vec_add2 (nses, ns, 1); - ns->name = (u8 *)(p->key); - ns->value = (u32) p->value[0]; - })); - /* *INDENT-ON* */ - - hash_free (vam->sw_if_index_by_interface_name); - - vec_foreach (ns, nses) vec_free (ns->name); - - vec_free (nses); - - vec_foreach (sub, vam->sw_if_subif_table) - { - vec_free (sub->interface_name); - } - vec_free (vam->sw_if_subif_table); - - /* recreate the interface name hash table */ - vam->sw_if_index_by_interface_name = hash_create_string (0, sizeof (uword)); - - /* - * Ask for all interface names. Otherwise, the epic catalog of - * name filters becomes ridiculously long, and vat ends up needing - * to be taught about new interface types. - */ - M (SW_INTERFACE_DUMP, mp); - 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_set_flags (vat_main_t * vam) +api_sw_interface_dump (vat_main_t *vam) { - unformat_input_t *i = vam->input; - vl_api_sw_interface_set_flags_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - u8 admin_up = 0; - int ret; - - /* Parse args required to build the message */ - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "admin-up")) - admin_up = 1; - else if (unformat (i, "admin-down")) - admin_up = 0; - else - if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - sw_if_index_set = 1; - else - break; - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - /* Construct the API message */ - M (SW_INTERFACE_SET_FLAGS, mp); - mp->sw_if_index = ntohl (sw_if_index); - mp->flags = ntohl ((admin_up) ? IF_STATUS_API_FLAG_ADMIN_UP : 0); - - /* send it... */ - S (mp); - - /* Wait for a reply, return the good/bad news... */ - W (ret); - return ret; -} - -static int -api_sw_interface_set_rx_placement (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_set_rx_placement_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - int ret; - u8 is_main = 0; - u32 queue_id, thread_index; - - /* Parse args required to build the message */ - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "queue %d", &queue_id)) - ; - else if (unformat (i, "main")) - is_main = 1; - else if (unformat (i, "worker %d", &thread_index)) - ; - else - if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - sw_if_index_set = 1; - else - break; - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (is_main) - thread_index = 0; - /* Construct the API message */ - M (SW_INTERFACE_SET_RX_PLACEMENT, mp); - mp->sw_if_index = ntohl (sw_if_index); - mp->worker_id = ntohl (thread_index); - mp->queue_id = ntohl (queue_id); - mp->is_main = is_main; - - /* send it... */ - S (mp); - /* Wait for a reply, return the good/bad news... */ - W (ret); - 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) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_clear_stats_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - int ret; - - /* Parse args required to build the message */ - 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 = 1; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - sw_if_index_set = 1; - else - break; - } - - /* Construct the API message */ - M (SW_INTERFACE_CLEAR_STATS, mp); - - if (sw_if_index_set == 1) - mp->sw_if_index = ntohl (sw_if_index); - else - mp->sw_if_index = ~0; - - /* send it... */ - S (mp); - - /* Wait for a reply, return the good/bad news... */ - W (ret); - return ret; -} - -static int -api_sw_interface_add_del_address (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_add_del_address_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - u8 is_add = 1, del_all = 0; - u32 address_length = 0; - u8 v4_address_set = 0; - u8 v6_address_set = 0; - ip4_address_t v4address; - ip6_address_t v6address; - int ret; - - /* Parse args required to build the message */ - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "del-all")) - del_all = 1; - else if (unformat (i, "del")) - is_add = 0; - else - if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "%U/%d", - unformat_ip4_address, &v4address, &address_length)) - v4_address_set = 1; - else if (unformat (i, "%U/%d", - unformat_ip6_address, &v6address, &address_length)) - v6_address_set = 1; - else - break; - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - if (v4_address_set && v6_address_set) - { - errmsg ("both v4 and v6 addresses set"); - return -99; - } - if (!v4_address_set && !v6_address_set && !del_all) - { - errmsg ("no addresses set"); - return -99; - } - - /* Construct the API message */ - M (SW_INTERFACE_ADD_DEL_ADDRESS, mp); - - mp->sw_if_index = ntohl (sw_if_index); - mp->is_add = is_add; - mp->del_all = del_all; - if (v6_address_set) - { - mp->prefix.address.af = ADDRESS_IP6; - clib_memcpy (mp->prefix.address.un.ip6, &v6address, sizeof (v6address)); - } - else - { - mp->prefix.address.af = ADDRESS_IP4; - clib_memcpy (mp->prefix.address.un.ip4, &v4address, sizeof (v4address)); - } - mp->prefix.len = address_length; - - /* send it... */ - S (mp); - - /* Wait for a reply, return good/bad news */ - W (ret); - return ret; -} - -static int -api_sw_interface_set_table (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_set_table_t *mp; - u32 sw_if_index, vrf_id = 0; - u8 sw_if_index_set = 0; - u8 is_ipv6 = 0; - int ret; - - /* Parse args required to build the message */ - 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 = 1; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "vrf %d", &vrf_id)) - ; - else if (unformat (i, "ipv6")) - is_ipv6 = 1; - else - break; - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - /* Construct the API message */ - M (SW_INTERFACE_SET_TABLE, mp); - - mp->sw_if_index = ntohl (sw_if_index); - mp->is_ipv6 = is_ipv6; - mp->vrf_id = ntohl (vrf_id); - - /* send it... */ - S (mp); - - /* Wait for a reply... */ - W (ret); - return ret; -} - -static void vl_api_sw_interface_get_table_reply_t_handler - (vl_api_sw_interface_get_table_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - - print (vam->ofp, "%d", ntohl (mp->vrf_id)); - - vam->retval = ntohl (mp->retval); - vam->result_ready = 1; - -} - -static void vl_api_sw_interface_get_table_reply_t_handler_json - (vl_api_sw_interface_get_table_reply_t * mp) -{ - vat_main_t *vam = &vat_main; - vat_json_node_t node; - - vat_json_init_object (&node); - vat_json_object_add_int (&node, "retval", ntohl (mp->retval)); - vat_json_object_add_int (&node, "vrf_id", ntohl (mp->vrf_id)); - - vat_json_print (vam->ofp, &node); - vat_json_free (&node); - - vam->retval = ntohl (mp->retval); - vam->result_ready = 1; -} - -static int -api_sw_interface_get_table (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_get_table_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - u8 is_ipv6 = 0; - int ret; - - 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 = 1; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "ipv6")) - is_ipv6 = 1; - else - break; - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - M (SW_INTERFACE_GET_TABLE, mp); - mp->sw_if_index = htonl (sw_if_index); - mp->is_ipv6 = is_ipv6; - - S (mp); - W (ret); - return ret; + return 0; } uword @@ -2307,98 +1354,6 @@ unformat_fib_path (unformat_input_t *input, va_list *args) return (1); } -static int -api_sw_interface_set_unnumbered (vat_main_t *vam) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_set_unnumbered_t *mp; - u32 sw_if_index; - u32 unnum_sw_index = ~0; - u8 is_add = 1; - u8 sw_if_index_set = 0; - int ret; - - 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 = 1; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "unnum_if_index %d", &unnum_sw_index)) - ; - else if (unformat (i, "del")) - is_add = 0; - else - { - clib_warning ("parse error '%U'", format_unformat_error, i); - return -99; - } - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - M (SW_INTERFACE_SET_UNNUMBERED, mp); - - mp->sw_if_index = ntohl (sw_if_index); - mp->unnumbered_sw_if_index = ntohl (unnum_sw_index); - mp->is_add = is_add; - - S (mp); - W (ret); - return ret; -} - -static int -api_create_vlan_subif (vat_main_t *vam) -{ - unformat_input_t *i = vam->input; - vl_api_create_vlan_subif_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - u32 vlan_id; - u8 vlan_id_set = 0; - int ret; - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "sw_if_index %d", &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "vlan %d", &vlan_id)) - vlan_id_set = 1; - else - { - clib_warning ("parse error '%U'", format_unformat_error, i); - return -99; - } - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (vlan_id_set == 0) - { - errmsg ("missing vlan_id"); - return -99; - } - M (CREATE_VLAN_SUBIF, mp); - - mp->sw_if_index = ntohl (sw_if_index); - mp->vlan_id = ntohl (vlan_id); - - S (mp); - W (ret); - return ret; -} - #define foreach_create_subif_bit \ _(no_tags) \ _(one_tag) \ @@ -2419,88 +1374,6 @@ _(5, "default_sub") \ _(6, "outer_vlan_id_any") \ _(7, "inner_vlan_id_any") -static int -api_create_subif (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_create_subif_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - u32 sub_id; - u8 sub_id_set = 0; - u32 __attribute__ ((unused)) no_tags = 0; - u32 __attribute__ ((unused)) one_tag = 0; - u32 __attribute__ ((unused)) two_tags = 0; - u32 __attribute__ ((unused)) dot1ad = 0; - u32 __attribute__ ((unused)) exact_match = 0; - u32 __attribute__ ((unused)) default_sub = 0; - u32 __attribute__ ((unused)) outer_vlan_id_any = 0; - u32 __attribute__ ((unused)) inner_vlan_id_any = 0; - u32 tmp; - u16 outer_vlan_id = 0; - u16 inner_vlan_id = 0; - int ret; - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "sw_if_index %d", &sw_if_index)) - sw_if_index_set = 1; - else - if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "sub_id %d", &sub_id)) - sub_id_set = 1; - else if (unformat (i, "outer_vlan_id %d", &tmp)) - outer_vlan_id = tmp; - else if (unformat (i, "inner_vlan_id %d", &tmp)) - inner_vlan_id = tmp; - -#define _(a) else if (unformat (i, #a)) a = 1 ; - foreach_create_subif_bit -#undef _ - else - { - clib_warning ("parse error '%U'", format_unformat_error, i); - return -99; - } - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (sub_id_set == 0) - { - errmsg ("missing sub_id"); - return -99; - } - M (CREATE_SUBIF, mp); - - mp->sw_if_index = ntohl (sw_if_index); - mp->sub_id = ntohl (sub_id); - -#define _(a,b) mp->sub_if_flags |= (1 << a); - foreach_create_subif_flag; -#undef _ - - mp->outer_vlan_id = ntohs (outer_vlan_id); - mp->inner_vlan_id = ntohs (inner_vlan_id); - - S (mp); - W (ret); - return ret; -} - -u8 is_del; -u8 localsid_addr[16]; -u8 end_psp; -u8 behavior; -u32 sw_if_index; -u32 vlan_index; -u32 fib_table; -u8 nh_addr[16]; #define foreach_tcp_proto_field \ _ (src_port) \ @@ -3731,51 +2604,6 @@ api_show_version (vat_main_t *vam) } static int -api_interface_name_renumber (vat_main_t *vam) -{ - unformat_input_t *line_input = vam->input; - vl_api_interface_name_renumber_t *mp; - u32 sw_if_index = ~0; - u32 new_show_dev_instance = ~0; - int ret; - - while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) - { - if (unformat (line_input, "%U", api_unformat_sw_if_index, vam, - &sw_if_index)) - ; - else if (unformat (line_input, "sw_if_index %d", &sw_if_index)) - ; - else if (unformat (line_input, "new_show_dev_instance %d", - &new_show_dev_instance)) - ; - else - break; - } - - if (sw_if_index == ~0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (new_show_dev_instance == ~0) - { - errmsg ("missing new_show_dev_instance"); - return -99; - } - - M (INTERFACE_NAME_RENUMBER, mp); - - mp->sw_if_index = ntohl (sw_if_index); - mp->new_show_dev_instance = ntohl (new_show_dev_instance); - - S (mp); - W (ret); - return ret; -} - -static int api_get_first_msg_id (vat_main_t *vam) { vl_api_get_first_msg_id_t *mp; @@ -3827,185 +2655,12 @@ api_get_node_graph (vat_main_t *vam) return ret; } -static int -api_delete_subif (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_delete_subif_t *mp; - u32 sw_if_index = ~0; - int ret; - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) - ; - if (unformat (i, "sw_if_index %d", &sw_if_index)) - ; - else - break; - } - - if (sw_if_index == ~0) - { - errmsg ("missing sw_if_index"); - return -99; - } - - /* Construct the API message */ - M (DELETE_SUBIF, mp); - mp->sw_if_index = ntohl (sw_if_index); - - S (mp); - W (ret); - return ret; -} - #define foreach_pbb_vtr_op \ _("disable", L2_VTR_DISABLED) \ _("pop", L2_VTR_POP_2) \ _("push", L2_VTR_PUSH_2) -static int -api_sw_interface_tag_add_del (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_tag_add_del_t *mp; - u32 sw_if_index = ~0; - u8 *tag = 0; - u8 enable = 1; - int ret; - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "tag %s", &tag)) - ; - if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) - ; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - ; - else if (unformat (i, "del")) - enable = 0; - else - break; - } - - if (sw_if_index == ~0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (enable && (tag == 0)) - { - errmsg ("no tag specified"); - return -99; - } - - /* Construct the API message */ - M (SW_INTERFACE_TAG_ADD_DEL, mp); - mp->sw_if_index = ntohl (sw_if_index); - mp->is_add = enable; - if (enable) - strncpy ((char *) mp->tag, (char *) tag, ARRAY_LEN (mp->tag) - 1); - vec_free (tag); - - S (mp); - W (ret); - return ret; -} - -static int -api_sw_interface_add_del_mac_address (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_mac_address_t mac = { 0 }; - vl_api_sw_interface_add_del_mac_address_t *mp; - u32 sw_if_index = ~0; - u8 is_add = 1; - u8 mac_set = 0; - int ret; - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) - ; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - ; - else if (unformat (i, "%U", unformat_vl_api_mac_address, &mac)) - mac_set++; - else if (unformat (i, "del")) - is_add = 0; - else - break; - } - - if (sw_if_index == ~0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (!mac_set) - { - errmsg ("missing MAC address"); - return -99; - } - - /* Construct the API message */ - M (SW_INTERFACE_ADD_DEL_MAC_ADDRESS, mp); - mp->sw_if_index = ntohl (sw_if_index); - mp->is_add = is_add; - clib_memcpy (&mp->addr, &mac, sizeof (mac)); - - S (mp); - W (ret); - return ret; -} - -static int -api_hw_interface_set_mtu (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_hw_interface_set_mtu_t *mp; - u32 sw_if_index = ~0; - u32 mtu = 0; - int ret; - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "mtu %d", &mtu)) - ; - if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) - ; - else if (unformat (i, "sw_if_index %d", &sw_if_index)) - ; - else - break; - } - - if (sw_if_index == ~0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (mtu == 0) - { - errmsg ("no mtu specified"); - return -99; - } - - /* Construct the API message */ - M (HW_INTERFACE_SET_MTU, mp); - mp->sw_if_index = ntohl (sw_if_index); - mp->mtu = ntohs ((u16) mtu); - - S (mp); - W (ret); - return ret; -} - static void vl_api_app_namespace_add_del_reply_t_handler (vl_api_app_namespace_add_del_reply_t * mp) { @@ -4867,44 +3522,13 @@ echo (vat_main_t * vam) /* List of API message constructors, CLI names map to api_xxx */ #define foreach_vpe_api_msg \ -_(create_loopback,"[mac <mac-addr>] [instance <instance>]") \ -_(sw_interface_dump,"") \ -_(sw_interface_set_flags, \ - "<intfc> | sw_if_index <id> admin-up | admin-down link-up | link down") \ -_(sw_interface_add_del_address, \ - "<intfc> | sw_if_index <id> <ip4-address> | <ip6-address> [del] [del-all] ") \ -_(sw_interface_set_rx_placement, \ - "<intfc> | sw_if_index <id> [queue <id>] [worker <id> | main]") \ -_(sw_interface_rx_placement_dump, \ - "[<intfc> | sw_if_index <id>]") \ -_(sw_interface_set_table, \ - "<intfc> | sw_if_index <id> vrf <table-id> [ipv6]") \ -_(sw_interface_set_unnumbered, \ - "<intfc> | sw_if_index <id> unnum_if_index <id> [del]") \ -_(create_vlan_subif, "<intfc> | sw_if_index <id> vlan <n>") \ -_(create_subif, "<intfc> | sw_if_index <id> sub_id <n>\n" \ - "[outer_vlan_id <n>][inner_vlan_id <n>]\n" \ - "[no_tags][one_tag][two_tags][dot1ad][exact_match][default_sub]\n" \ - "[outer_vlan_id_any][inner_vlan_id_any]") \ _(get_node_index, "node <node-name") \ _(add_node_next, "node <node-name> next <next-node-name>") \ _(show_version, "") \ _(show_threads, "") \ -_(interface_name_renumber, \ - "<intfc> | sw_if_index <nn> new_show_dev_instance <nn>") \ -_(delete_loopback,"sw_if_index <nn>") \ -_(want_interface_events, "enable|disable") \ _(get_first_msg_id, "client <name>") \ _(get_node_graph, " ") \ -_(sw_interface_clear_stats,"<intfc> | sw_if_index <nn>") \ _(get_next_index, "node-name <node-name> next-node-name <node-name>") \ -_(delete_subif,"<intfc> | sw_if_index <nn>") \ -_(sw_interface_tag_add_del, "<intfc> | sw_if_index <nn> tag <text>" \ -"[disable]") \ -_(sw_interface_add_del_mac_address, "<intfc> | sw_if_index <nn> " \ - "mac <mac-address> [del]") \ -_(hw_interface_set_mtu, "<intfc> | hw_if_index <nn> mtu <nn>") \ -_(sw_interface_get_table, "<intfc> | sw_if_index <id> [ipv6]") \ _(sock_init_shm, "size <nnn>") \ _(app_namespace_add_del, "[add] id <ns-id> secret <nn> sw_if_index <nn>")\ _(session_rule_add_del, "[add|del] proto <tcp/udp> <lcl-ip>/<plen> " \ @@ -4914,8 +3538,6 @@ _(session_rules_dump, "") \ /* List of command functions, CLI names map directly to functions */ #define foreach_cli_function \ _(comment, "usage: comment <ignore-rest-of-line>") \ -_(dump_interface_table, "usage: dump_interface_table") \ -_(dump_sub_interface_table, "usage: dump_sub_interface_table") \ _(dump_macro_table, "usage: dump_macro_table ") \ _(dump_msg_api_table, "usage: dump_msg_api_table") \ _(elog_setup, "usage: elog_setup [nevents, default 128K]") \ |