X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvat%2Fapi_format.c;h=f2d10b78de530822a22a842c78a92009fd48d495;hb=e906aacc1089ce86158486ec52d37a8470359ec2;hp=161e309d1fee14b45a632be9bd13adcbb3bed23d;hpb=048a4e5a000017d0d632ebf02dcc23d9bf9ccf72;p=vpp.git diff --git a/src/vat/api_format.c b/src/vat/api_format.c index 161e309d1fe..f2d10b78de5 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -177,6 +177,12 @@ api_unformat_sw_if_index (unformat_input_t * input, va_list * args) return 1; } +static uword +api_unformat_hw_if_index (unformat_input_t * input, va_list * args) +{ + return 0; +} + /* Parse an IP4 address %d.%d.%d.%d. */ uword unformat_ip4_address (unformat_input_t * input, va_list * args) @@ -440,14 +446,20 @@ api_unformat_sw_if_index (unformat_input_t * input, va_list * args) vat_main_t *vam __attribute__ ((unused)) = va_arg (*args, vat_main_t *); vnet_main_t *vnm = vnet_get_main (); u32 *result = va_arg (*args, u32 *); - u32 sw_if_index; - if (!unformat (input, "%U", unformat_vnet_sw_interface, vnm, &sw_if_index)) - return 0; + return unformat (input, "%U", unformat_vnet_sw_interface, vnm, result); +} - *result = sw_if_index; - return 1; +static uword +api_unformat_hw_if_index (unformat_input_t * input, va_list * args) +{ + vat_main_t *vam __attribute__ ((unused)) = va_arg (*args, vat_main_t *); + vnet_main_t *vnm = vnet_get_main (); + u32 *result = va_arg (*args, u32 *); + + return unformat (input, "%U", unformat_vnet_hw_interface, vnm, result); } + #endif /* VPP_API_TEST_BUILTIN */ static uword @@ -2274,6 +2286,38 @@ static void vl_api_vxlan_add_del_tunnel_reply_t_handler_json vam->result_ready = 1; } +static void vl_api_vxlan_offload_rx_reply_t_handler + (vl_api_vxlan_offload_rx_reply_t * mp) +{ + vat_main_t *vam = &vat_main; + i32 retval = ntohl (mp->retval); + if (vam->async_mode) + { + vam->async_errors += (retval < 0); + } + else + { + vam->retval = retval; + vam->result_ready = 1; + } +} + +static void vl_api_vxlan_offload_rx_reply_t_handler_json + (vl_api_vxlan_offload_rx_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; +} + static void vl_api_geneve_add_del_tunnel_reply_t_handler (vl_api_geneve_add_del_tunnel_reply_t * mp) { @@ -3044,13 +3088,14 @@ static void vl_api_get_node_graph_reply_t_handler { hash_free (vam->graph_node_index_by_name); - for (i = 0; i < vec_len (vam->graph_nodes); i++) + for (i = 0; i < vec_len (vam->graph_nodes[0]); i++) { - node = vam->graph_nodes[i]; + node = vam->graph_nodes[0][i]; vec_free (node->name); vec_free (node->next_nodes); vec_free (node); } + vec_free (vam->graph_nodes[0]); vec_free (vam->graph_nodes); } @@ -3058,9 +3103,9 @@ static void vl_api_get_node_graph_reply_t_handler vam->graph_nodes = vlib_node_unserialize (pvt_copy); vec_free (pvt_copy); - for (i = 0; i < vec_len (vam->graph_nodes); i++) + for (i = 0; i < vec_len (vam->graph_nodes[0]); i++) { - node = vam->graph_nodes[i]; + node = vam->graph_nodes[0][i]; hash_set_mem (vam->graph_node_index_by_name, node->name, i); } } @@ -5535,7 +5580,7 @@ _(l2_interface_pbb_tag_rewrite_reply) \ _(punt_reply) \ _(feature_enable_disable_reply) \ _(sw_interface_tag_add_del_reply) \ -_(sw_interface_set_mtu_reply) \ +_(hw_interface_set_mtu_reply) \ _(p2p_ethernet_add_reply) \ _(p2p_ethernet_del_reply) \ _(lldp_config_reply) \ @@ -5682,6 +5727,7 @@ _(L2TPV3_INTERFACE_ENABLE_DISABLE_REPLY, \ _(L2TPV3_SET_LOOKUP_KEY_REPLY, l2tpv3_set_lookup_key_reply) \ _(SW_IF_L2TPV3_TUNNEL_DETAILS, sw_if_l2tpv3_tunnel_details) \ _(VXLAN_ADD_DEL_TUNNEL_REPLY, vxlan_add_del_tunnel_reply) \ +_(VXLAN_OFFLOAD_RX_REPLY, vxlan_offload_rx_reply) \ _(GENEVE_ADD_DEL_TUNNEL_REPLY, geneve_add_del_tunnel_reply) \ _(VXLAN_TUNNEL_DETAILS, vxlan_tunnel_details) \ _(GENEVE_TUNNEL_DETAILS, geneve_tunnel_details) \ @@ -5867,7 +5913,7 @@ _(IP6_FIB_DETAILS, ip6_fib_details) \ _(FEATURE_ENABLE_DISABLE_REPLY, feature_enable_disable_reply) \ _(SW_INTERFACE_TAG_ADD_DEL_REPLY, sw_interface_tag_add_del_reply) \ _(L2_XCONNECT_DETAILS, l2_xconnect_details) \ -_(SW_INTERFACE_SET_MTU_REPLY, sw_interface_set_mtu_reply) \ +_(HW_INTERFACE_SET_MTU_REPLY, hw_interface_set_mtu_reply) \ _(IP_NEIGHBOR_DETAILS, ip_neighbor_details) \ _(SW_INTERFACE_GET_TABLE_REPLY, sw_interface_get_table_reply) \ _(P2P_ETHERNET_ADD_REPLY, p2p_ethernet_add_reply) \ @@ -5884,8 +5930,7 @@ _(SESSION_RULE_ADD_DEL_REPLY, session_rule_add_del_reply) \ _(SESSION_RULES_DETAILS, session_rules_details) \ _(IP_CONTAINER_PROXY_ADD_DEL_REPLY, ip_container_proxy_add_del_reply) \ _(OUTPUT_ACL_SET_INTERFACE_REPLY, output_acl_set_interface_reply) \ -_(QOS_RECORD_ENABLE_DISABLE_REPLY, qos_record_enable_disable_reply) \ -_(MAP_STATS_SEGMENT_REPLY, map_stats_segment_reply) +_(QOS_RECORD_ENABLE_DISABLE_REPLY, qos_record_enable_disable_reply) #define foreach_standalone_reply_msg \ _(SW_INTERFACE_EVENT, sw_interface_event) \ @@ -12856,6 +12901,59 @@ api_sw_interface_tap_v2_dump (vat_main_t * vam) return ret; } +static int +api_vxlan_offload_rx (vat_main_t * vam) +{ + unformat_input_t *line_input = vam->input; + vl_api_vxlan_offload_rx_t *mp; + u32 hw_if_index = ~0, rx_if_index = ~0; + u8 is_add = 1; + int ret; + + while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (line_input, "del")) + is_add = 0; + else if (unformat (line_input, "hw %U", api_unformat_hw_if_index, vam, + &hw_if_index)) + ; + else if (unformat (line_input, "hw hw_if_index %u", &hw_if_index)) + ; + else if (unformat (line_input, "rx %U", api_unformat_sw_if_index, vam, + &rx_if_index)) + ; + else if (unformat (line_input, "rx sw_if_index %u", &rx_if_index)) + ; + else + { + errmsg ("parse error '%U'", format_unformat_error, line_input); + return -99; + } + } + + if (hw_if_index == ~0) + { + errmsg ("no hw interface"); + return -99; + } + + if (rx_if_index == ~0) + { + errmsg ("no rx tunnel"); + return -99; + } + + M (VXLAN_OFFLOAD_RX, mp); + + mp->hw_if_index = ntohl (hw_if_index); + mp->sw_if_index = ntohl (rx_if_index); + mp->enable = is_add; + + S (mp); + W (ret); + return ret; +} + static uword unformat_vxlan_decap_next (unformat_input_t * input, va_list * args) { @@ -22036,10 +22134,10 @@ api_l2_xconnect_dump (vat_main_t * vam) } static int -api_sw_interface_set_mtu (vat_main_t * vam) +api_hw_interface_set_mtu (vat_main_t * vam) { unformat_input_t *i = vam->input; - vl_api_sw_interface_set_mtu_t *mp; + vl_api_hw_interface_set_mtu_t *mp; u32 sw_if_index = ~0; u32 mtu = 0; int ret; @@ -22069,7 +22167,7 @@ api_sw_interface_set_mtu (vat_main_t * vam) } /* Construct the API message */ - M (SW_INTERFACE_SET_MTU, mp); + M (HW_INTERFACE_SET_MTU, mp); mp->sw_if_index = ntohl (sw_if_index); mp->mtu = ntohs ((u16) mtu); @@ -22432,92 +22530,6 @@ api_app_namespace_add_del (vat_main_t * vam) return ret; } -static void vl_api_map_stats_segment_reply_t_handler - (vl_api_map_stats_segment_reply_t * mp) -{ -#if VPP_API_TEST_BUILTIN == 0 - vat_main_t *vam = &vat_main; - ssvm_private_t *ssvmp = &vam->stat_segment; - ssvm_shared_header_t *shared_header; - socket_client_main_t *scm = vam->socket_client_main; - int rv = ntohl (mp->retval); - int my_fd, retval; - clib_error_t *error; - - vam->retval = rv; - - if (rv != 0) - { - vam->result_ready = 1; - return; - } - - /* - * Check the socket for the magic fd - */ - error = vl_sock_api_recv_fd_msg (scm->socket_fd, &my_fd, 5); - if (error) - { - clib_error_report (error); - vam->retval = -99; - vam->result_ready = 1; - return; - } - - memset (ssvmp, 0, sizeof (*ssvmp)); - ssvmp->fd = my_fd; - - /* Note: this closes memfd.fd */ - retval = ssvm_slave_init_memfd (ssvmp); - if (retval) - { - clib_warning ("WARNING: segment map returned %d", retval); - vam->retval = -99; - vam->result_ready = 1; - return; - } - else - errmsg ("stat segment mapped OK..."); - - ASSERT (ssvmp && ssvmp->sh); - - /* Pick up the segment lock from the shared memory header */ - shared_header = ssvmp->sh; - vam->stat_segment_lockp = (clib_spinlock_t *) (shared_header->opaque[0]); - vam->retval = 0; - vam->result_ready = 1; -#endif -} - -static void vl_api_map_stats_segment_reply_t_handler_json - (vl_api_map_stats_segment_reply_t * mp) -{ -#if VPP_API_TEST_BUILTIN == 0 - vat_main_t *vam = &vat_main; - clib_warning ("not implemented"); - vam->retval = -99; - vam->result_ready = 1; -#endif -} - -static int -api_map_stats_segment (vat_main_t * vam) -{ -#if VPP_API_TEST_BUILTIN == 0 - vl_api_map_stats_segment_t *mp; - int ret; - - M (MAP_STATS_SEGMENT, mp); - S (mp); - W (ret); - - return ret; -#else - errmsg ("api unavailable"); - return -99; -#endif -} - static int api_sock_init_shm (vat_main_t * vam) { @@ -23291,15 +23303,15 @@ dump_node_table (vat_main_t * vam) return 0; } - for (i = 0; i < vec_len (vam->graph_nodes); i++) + for (i = 0; i < vec_len (vam->graph_nodes[0]); i++) { - node = vam->graph_nodes[i]; + node = vam->graph_nodes[0][i]; print (vam->ofp, "[%d] %s", i, node->name); for (j = 0; j < vec_len (node->next_nodes); j++) { if (node->next_nodes[j] != ~0) { - next_node = vam->graph_nodes[node->next_nodes[j]]; + next_node = vam->graph_nodes[0][node->next_nodes[j]]; print (vam->ofp, " [%d] %s", j, next_node->name); } } @@ -23394,13 +23406,13 @@ search_node_table (vat_main_t * vam) print (vam->ofp, "%s not found...", node_to_find); goto out; } - node = vam->graph_nodes[p[0]]; + node = vam->graph_nodes[0][p[0]]; print (vam->ofp, "[%d] %s", p[0], node->name); for (j = 0; j < vec_len (node->next_nodes); j++) { if (node->next_nodes[j] != ~0) { - next_node = vam->graph_nodes[node->next_nodes[j]]; + next_node = vam->graph_nodes[0][node->next_nodes[j]]; print (vam->ofp, " [%d] %s", j, next_node->name); } } @@ -23650,6 +23662,9 @@ _(l2tpv3_interface_enable_disable, \ _(l2tpv3_set_lookup_key, \ "lookup_v6_src | lookup_v6_dst | lookup_session_id") \ _(sw_if_l2tpv3_tunnel_dump, "") \ +_(vxlan_offload_rx, \ + "hw { | hw_if_index } " \ + "rx { | sw_if_index } [del]") \ _(vxlan_add_del_tunnel, \ "src { dst | group \n" \ "{ | mcast_sw_if_index } [instance ]}\n" \ @@ -23937,7 +23952,7 @@ _(feature_enable_disable, "arc_name " \ _(sw_interface_tag_add_del, " | sw_if_index tag " \ "[disable]") \ _(l2_xconnect_dump, "") \ -_(sw_interface_set_mtu, " | sw_if_index mtu ") \ +_(hw_interface_set_mtu, " | hw_if_index mtu ") \ _(ip_neighbor_dump, "[ip6] | sw_if_index ") \ _(sw_interface_get_table, " | sw_if_index [ipv6]") \ _(p2p_ethernet_add, " | sw_if_index remote_mac sub_id ") \ @@ -23961,8 +23976,7 @@ _(ip_container_proxy_add_del, "[add|del]
") \ _(output_acl_set_interface, \ " | sw_if_index [ip4-table ] [ip6-table ]\n" \ " [l2-table ] [del]") \ -_(qos_record_enable_disable, " | sw_if_index [disable]") \ -_(map_stats_segment, "") +_(qos_record_enable_disable, " | sw_if_index [disable]") /* List of command functions, CLI names map directly to functions */ #define foreach_cli_function \