X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvat%2Fapi_format.c;h=b9f080486510998a0f1841b54ca312cdf995b2ff;hb=1ddbc0138b64486b8e51e5e12fcad21fba8b8b68;hp=89843e41d08cc94224e747e50c63f06b2c6874cc;hpb=d723161e038d00e59766aa67a6a0dcc350227e4b;p=vpp.git diff --git a/src/vat/api_format.c b/src/vat/api_format.c index 89843e41d08..b9f08048651 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); } } @@ -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) \ @@ -12856,6 +12902,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) { @@ -23291,15 +23390,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 +23493,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 +23749,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" \