X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvat%2Fapi_format.c;h=8c2fb13ecfec2dd89864cf85ea2822608b74bdbb;hb=8e1039a;hp=996256178833ce8e9a5740ff41f2b37fcb3b5234;hpb=a43ccaefc3bd50c03c90f7c3bee02eac9709df56;p=vpp.git diff --git a/src/vat/api_format.c b/src/vat/api_format.c index 99625617883..8c2fb13ecfe 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -50,7 +50,7 @@ #include #include #include - +#include #include "vat/json_format.h" #include @@ -1348,9 +1348,9 @@ vl_api_l2_macs_event_t_handler (vl_api_l2_macs_event_t * mp) for (i = 0; i < n_macs; i++) { vl_api_mac_entry_t *mac = &mp->mac[i]; - errmsg (" [%d] sw_if_index %d mac_addr %U is_del %d \n", + errmsg (" [%d] sw_if_index %d mac_addr %U action %d \n", i + 1, ntohl (mac->sw_if_index), - format_ethernet_address, mac->mac_addr, mac->is_del); + format_ethernet_address, mac->mac_addr, mac->action); if (i == 1000) break; } @@ -1775,6 +1775,275 @@ static void vl_api_tap_delete_v2_reply_t_handler_json vam->result_ready = 1; } +static void +vl_api_bond_create_reply_t_handler (vl_api_bond_create_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->sw_if_index = ntohl (mp->sw_if_index); + vam->result_ready = 1; + } +} + +static void vl_api_bond_create_reply_t_handler_json + (vl_api_bond_create_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_bond_delete_reply_t_handler (vl_api_bond_delete_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_bond_delete_reply_t_handler_json + (vl_api_bond_delete_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_bond_enslave_reply_t_handler (vl_api_bond_enslave_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_bond_enslave_reply_t_handler_json + (vl_api_bond_enslave_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_bond_detach_slave_reply_t_handler (vl_api_bond_detach_slave_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_bond_detach_slave_reply_t_handler_json + (vl_api_bond_detach_slave_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_sw_interface_bond_details_t_handler + (vl_api_sw_interface_bond_details_t * mp) +{ + vat_main_t *vam = &vat_main; + + print (vam->ofp, + "%-16s %-12d %-12U %-13U %-14u %-14u", + mp->interface_name, ntohl (mp->sw_if_index), + format_bond_mode, mp->mode, format_bond_load_balance, mp->lb, + ntohl (mp->active_slaves), ntohl (mp->slaves)); +} + +static void vl_api_sw_interface_bond_details_t_handler_json + (vl_api_sw_interface_bond_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_string_copy (node, "interface_name", + mp->interface_name); + vat_json_object_add_uint (node, "mode", mp->mode); + vat_json_object_add_uint (node, "load_balance", mp->lb); + vat_json_object_add_uint (node, "active_slaves", ntohl (mp->active_slaves)); + vat_json_object_add_uint (node, "slaves", ntohl (mp->slaves)); +} + +static int +api_sw_interface_bond_dump (vat_main_t * vam) +{ + vl_api_sw_interface_bond_dump_t *mp; + vl_api_control_ping_t *mp_ping; + int ret; + + print (vam->ofp, + "\n%-16s %-12s %-12s %-13s %-14s %-14s", + "interface name", "sw_if_index", "mode", "load balance", + "active slaves", "slaves"); + + /* Get list of bond interfaces */ + M (SW_INTERFACE_BOND_DUMP, mp); + S (mp); + + /* Use a control ping for synchronization */ + MPING (CONTROL_PING, mp_ping); + S (mp_ping); + + W (ret); + return ret; +} + +static void vl_api_sw_interface_slave_details_t_handler + (vl_api_sw_interface_slave_details_t * mp) +{ + vat_main_t *vam = &vat_main; + + print (vam->ofp, + "%-25s %-12d %-12d %d", mp->interface_name, + ntohl (mp->sw_if_index), mp->is_passive, mp->is_long_timeout); +} + +static void vl_api_sw_interface_slave_details_t_handler_json + (vl_api_sw_interface_slave_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_string_copy (node, "interface_name", + mp->interface_name); + vat_json_object_add_uint (node, "passive", mp->is_passive); + vat_json_object_add_uint (node, "long_timeout", mp->is_long_timeout); +} + +static int +api_sw_interface_slave_dump (vat_main_t * vam) +{ + unformat_input_t *i = vam->input; + vl_api_sw_interface_slave_dump_t *mp; + vl_api_control_ping_t *mp_ping; + u32 sw_if_index = ~0; + 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; + } + + if (sw_if_index_set == 0) + { + errmsg ("missing vpp interface name. "); + return -99; + } + + print (vam->ofp, + "\n%-25s %-12s %-12s %s", + "slave interface name", "sw_if_index", "passive", "long_timeout"); + + /* Get list of bond interfaces */ + M (SW_INTERFACE_SLAVE_DUMP, mp); + mp->sw_if_index = ntohl (sw_if_index); + S (mp); + + /* Use a control ping for synchronization */ + MPING (CONTROL_PING, mp_ping); + S (mp_ping); + + W (ret); + return ret; +} + static void vl_api_mpls_tunnel_add_del_reply_t_handler (vl_api_mpls_tunnel_add_del_reply_t * mp) { @@ -5300,6 +5569,7 @@ _(l2_interface_efp_filter_reply) \ _(l2_interface_vlan_tag_rewrite_reply) \ _(modify_vhost_user_if_reply) \ _(delete_vhost_user_if_reply) \ +_(ip_probe_neighbor_reply) \ _(want_ip4_arp_events_reply) \ _(want_ip6_nd_events_reply) \ _(want_l2_macs_events_reply) \ @@ -5466,6 +5736,12 @@ _(SW_INTERFACE_TAP_DETAILS, sw_interface_tap_details) \ _(TAP_CREATE_V2_REPLY, tap_create_v2_reply) \ _(TAP_DELETE_V2_REPLY, tap_delete_v2_reply) \ _(SW_INTERFACE_TAP_V2_DETAILS, sw_interface_tap_v2_details) \ +_(BOND_CREATE_REPLY, bond_create_reply) \ +_(BOND_DELETE_REPLY, bond_delete_reply) \ +_(BOND_ENSLAVE_REPLY, bond_enslave_reply) \ +_(BOND_DETACH_SLAVE_REPLY, bond_detach_slave_reply) \ +_(SW_INTERFACE_BOND_DETAILS, sw_interface_bond_details) \ +_(SW_INTERFACE_SLAVE_DETAILS, sw_interface_slave_details) \ _(IP_ADD_DEL_ROUTE_REPLY, ip_add_del_route_reply) \ _(IP_TABLE_ADD_DEL_REPLY, ip_table_add_del_reply) \ _(IP_MROUTE_ADD_DEL_REPLY, ip_mroute_add_del_reply) \ @@ -5536,9 +5812,10 @@ _(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) \ _(L2_FIB_TABLE_DETAILS, l2_fib_table_details) \ -_(VXLAN_GPE_ADD_DEL_TUNNEL_REPLY, vxlan_gpe_add_del_tunnel_reply) \ +_(VXLAN_GPE_ADD_DEL_TUNNEL_REPLY, vxlan_gpe_add_del_tunnel_reply) \ _(VXLAN_GPE_TUNNEL_DETAILS, vxlan_gpe_tunnel_details) \ _(INTERFACE_NAME_RENUMBER_REPLY, interface_name_renumber_reply) \ +_(IP_PROBE_NEIGHBOR_REPLY, ip_probe_neighbor_reply) \ _(WANT_IP4_ARP_EVENTS_REPLY, want_ip4_arp_events_reply) \ _(IP4_ARP_EVENT, ip4_arp_event) \ _(WANT_IP6_ND_EVENTS_REPLY, want_ip6_nd_events_reply) \ @@ -7782,7 +8059,7 @@ api_tap_create_v2 (vat_main_t * vam) u8 host_ip6_gw_set = 0; u32 host_ip6_prefix_len = 0; int ret; - int rx_ring_sz = 0, tx_ring_sz = 0; + u32 rx_ring_sz = 0, tx_ring_sz = 0; memset (mac_address, 0, sizeof (mac_address)); @@ -7793,7 +8070,7 @@ api_tap_create_v2 (vat_main_t * vam) { random_mac = 0; } - else if (unformat (i, "id %s", &id)) + else if (unformat (i, "id %u", &id)) ; else if (unformat (i, "host-if-name %s", &host_if_name)) ; @@ -7875,15 +8152,15 @@ api_tap_create_v2 (vat_main_t * vam) mp->use_random_mac = random_mac; - mp->id = id; + mp->id = ntohl (id); mp->host_namespace_set = host_ns != 0; mp->host_bridge_set = host_bridge != 0; mp->host_ip4_addr_set = host_ip4_prefix_len != 0; mp->host_ip6_addr_set = host_ip6_prefix_len != 0; - mp->rx_ring_sz = rx_ring_sz; - mp->tx_ring_sz = tx_ring_sz; + mp->rx_ring_sz = ntohs (rx_ring_sz); + mp->tx_ring_sz = ntohs (tx_ring_sz); - if (random_mac) + if (random_mac == 0) clib_memcpy (mp->mac_address, mac_address, 6); if (host_mac_addr_set) clib_memcpy (mp->host_mac_addr, host_mac_addr, 6); @@ -7953,6 +8230,194 @@ api_tap_delete_v2 (vat_main_t * vam) return ret; } +static int +api_bond_create (vat_main_t * vam) +{ + unformat_input_t *i = vam->input; + vl_api_bond_create_t *mp; + u8 mac_address[6]; + u8 custom_mac = 0; + int ret; + u8 mode; + u8 lb; + u8 mode_is_set = 0; + + memset (mac_address, 0, sizeof (mac_address)); + lb = BOND_LB_L2; + + /* Parse args required to build the message */ + while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) + { + if (unformat (i, "mode %U", unformat_bond_mode, &mode)) + mode_is_set = 1; + else if (((mode == BOND_MODE_LACP) || (mode == BOND_MODE_XOR)) + && unformat (i, "lb %U", unformat_bond_load_balance, &lb)) + ; + else if (unformat (i, "hw-addr %U", unformat_ethernet_address, + mac_address)) + custom_mac = 1; + else + break; + } + + if (mode_is_set == 0) + { + errmsg ("Missing bond mode. "); + return -99; + } + + /* Construct the API message */ + M (BOND_CREATE, mp); + + mp->use_custom_mac = custom_mac; + + mp->mode = mode; + mp->lb = lb; + + if (custom_mac) + clib_memcpy (mp->mac_address, mac_address, 6); + + /* send it... */ + S (mp); + + /* Wait for a reply... */ + W (ret); + return ret; +} + +static int +api_bond_delete (vat_main_t * vam) +{ + unformat_input_t *i = vam->input; + vl_api_bond_delete_t *mp; + u32 sw_if_index = ~0; + 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; + } + + if (sw_if_index_set == 0) + { + errmsg ("missing vpp interface name. "); + return -99; + } + + /* Construct the API message */ + M (BOND_DELETE, mp); + + mp->sw_if_index = ntohl (sw_if_index); + + /* send it... */ + S (mp); + + /* Wait for a reply... */ + W (ret); + return ret; +} + +static int +api_bond_enslave (vat_main_t * vam) +{ + unformat_input_t *i = vam->input; + vl_api_bond_enslave_t *mp; + u32 bond_sw_if_index; + int ret; + u8 is_passive; + u8 is_long_timeout; + u32 bond_sw_if_index_is_set = 0; + u32 sw_if_index; + u8 sw_if_index_is_set = 0; + + /* Parse args required to build the message */ + while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) + { + if (unformat (i, "sw_if_index %d", &sw_if_index)) + sw_if_index_is_set = 1; + else if (unformat (i, "bond %u", &bond_sw_if_index)) + bond_sw_if_index_is_set = 1; + else if (unformat (i, "passive %d", &is_passive)) + ; + else if (unformat (i, "long-timeout %d", &is_long_timeout)) + ; + else + break; + } + + if (bond_sw_if_index_is_set == 0) + { + errmsg ("Missing bond sw_if_index. "); + return -99; + } + if (sw_if_index_is_set == 0) + { + errmsg ("Missing slave sw_if_index. "); + return -99; + } + + /* Construct the API message */ + M (BOND_ENSLAVE, mp); + + mp->bond_sw_if_index = ntohl (bond_sw_if_index); + mp->sw_if_index = ntohl (sw_if_index); + mp->is_long_timeout = is_long_timeout; + mp->is_passive = is_passive; + + /* send it... */ + S (mp); + + /* Wait for a reply... */ + W (ret); + return ret; +} + +static int +api_bond_detach_slave (vat_main_t * vam) +{ + unformat_input_t *i = vam->input; + vl_api_bond_detach_slave_t *mp; + u32 sw_if_index = ~0; + 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; + } + + if (sw_if_index_set == 0) + { + errmsg ("missing vpp interface name. "); + return -99; + } + + /* Construct the API message */ + M (BOND_DETACH_SLAVE, mp); + + mp->sw_if_index = ntohl (sw_if_index); + + /* send it... */ + S (mp); + + /* Wait for a reply... */ + W (ret); + return ret; +} + static int api_ip_table_add_del (vat_main_t * vam) { @@ -8872,7 +9337,7 @@ api_bier_route_add_del (vat_main_t * vam) } /* Construct the API message */ - M2 (BIER_ROUTE_ADD_DEL, mp, sizeof (vl_api_fib_path3_t)); + M2 (BIER_ROUTE_ADD_DEL, mp, sizeof (vl_api_fib_path_t)); mp->br_is_add = is_add; mp->br_tbl_id.bt_set = set; @@ -8881,7 +9346,7 @@ api_bier_route_add_del (vat_main_t * vam) mp->br_bp = ntohs (bp); mp->br_n_paths = 1; mp->br_paths[0].n_labels = 1; - mp->br_paths[0].label_stack[0] = ntohl (next_hop_out_label); + mp->br_paths[0].label_stack[0].label = ntohl (next_hop_out_label); mp->br_paths[0].afi = (next_hop_proto_is_ip4 ? 0 : 1); if (next_hop_proto_is_ip4) @@ -13999,6 +14464,58 @@ api_interface_name_renumber (vat_main_t * vam) return ret; } +static int +api_ip_probe_neighbor (vat_main_t * vam) +{ + unformat_input_t *i = vam->input; + vl_api_ip_probe_neighbor_t *mp; + u8 int_set = 0; + u8 adr_set = 0; + u8 is_ipv6 = 0; + u8 dst_adr[16]; + u32 sw_if_index; + int ret; + + while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) + { + if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index)) + int_set = 1; + else if (unformat (i, "sw_if_index %d", &sw_if_index)) + int_set = 1; + else if (unformat (i, "address %U", unformat_ip4_address, dst_adr)) + adr_set = 1; + else if (unformat (i, "address %U", unformat_ip6_address, dst_adr)) + { + adr_set = 1; + is_ipv6 = 1; + } + else + break; + } + + if (int_set == 0) + { + errmsg ("missing interface"); + return -99; + } + + if (adr_set == 0) + { + errmsg ("missing addresses"); + return -99; + } + + M (IP_PROBE_NEIGHBOR, mp); + + mp->sw_if_index = ntohl (sw_if_index); + mp->is_ipv6 = is_ipv6; + clib_memcpy (mp->dst_address, dst_adr, sizeof (dst_adr)); + + S (mp); + W (ret); + return ret; +} + static int api_want_ip4_arp_events (vat_main_t * vam) { @@ -14768,6 +15285,8 @@ api_ipsec_tunnel_if_add_del (vat_main_t * vam) u8 is_add = 1; u8 esn = 0; u8 anti_replay = 0; + u8 renumber = 0; + u32 instance = ~0; int ret; while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) @@ -14819,6 +15338,8 @@ api_ipsec_tunnel_if_add_del (vat_main_t * vam) return -99; } } + else if (unformat (i, "instance %u", &instance)) + renumber = 1; else { errmsg ("parse error '%U'\n", format_unformat_error, i); @@ -14877,6 +15398,12 @@ api_ipsec_tunnel_if_add_del (vat_main_t * vam) clib_memcpy (mp->remote_integ_key, rik, mp->remote_integ_key_len); } + if (renumber) + { + mp->renumber = renumber; + mp->show_instance = ntohl (instance); + } + S (mp); W (ret); return ret; @@ -19634,7 +20161,7 @@ api_netmap_delete (vat_main_t * vam) } static void -vl_api_mpls_fib_path_print (vat_main_t * vam, vl_api_fib_path2_t * fp) +vl_api_mpls_fib_path_print (vat_main_t * vam, vl_api_fib_path_t * fp) { if (fp->afi == IP46_TYPE_IP6) print (vam->ofp, @@ -19654,7 +20181,7 @@ vl_api_mpls_fib_path_print (vat_main_t * vam, vl_api_fib_path2_t * fp) static void vl_api_mpls_fib_path_json_print (vat_json_node_t * node, - vl_api_fib_path2_t * fp) + vl_api_fib_path_t * fp) { struct in_addr ip4; struct in6_addr ip6; @@ -19683,7 +20210,7 @@ vl_api_mpls_tunnel_details_t_handler (vl_api_mpls_tunnel_details_t * mp) { vat_main_t *vam = &vat_main; int count = ntohl (mp->mt_count); - vl_api_fib_path2_t *fp; + vl_api_fib_path_t *fp; i32 i; print (vam->ofp, "[%d]: sw_if_index %d via:", @@ -19707,7 +20234,7 @@ vl_api_mpls_tunnel_details_t_handler_json (vl_api_mpls_tunnel_details_t * mp) vat_main_t *vam = &vat_main; vat_json_node_t *node = NULL; int count = ntohl (mp->mt_count); - vl_api_fib_path2_t *fp; + vl_api_fib_path_t *fp; i32 i; if (VAT_JSON_ARRAY != vam->json_tree.type) @@ -19773,7 +20300,7 @@ vl_api_mpls_fib_details_t_handler (vl_api_mpls_fib_details_t * mp) { vat_main_t *vam = &vat_main; int count = ntohl (mp->count); - vl_api_fib_path2_t *fp; + vl_api_fib_path_t *fp; int i; print (vam->ofp, @@ -19793,7 +20320,7 @@ static void vl_api_mpls_fib_details_t_handler_json vat_main_t *vam = &vat_main; int count = ntohl (mp->count); vat_json_node_t *node = NULL; - vl_api_fib_path2_t *fp; + vl_api_fib_path_t *fp; int i; if (VAT_JSON_ARRAY != vam->json_tree.type) @@ -20522,8 +21049,9 @@ vl_api_sw_interface_span_details_t_handler (vl_api_sw_interface_span_details_t } })); /* *INDENT-ON* */ - print (vam->ofp, "%20s => %20s (%s)", - sw_if_from_name, sw_if_to_name, states[mp->state]); + print (vam->ofp, "%20s => %20s (%s) %s", + sw_if_from_name, sw_if_to_name, states[mp->state], + mp->is_l2 ? "l2" : "device"); } static void @@ -20572,6 +21100,7 @@ static void vat_json_object_add_string_copy (node, "dst-if-name", sw_if_to_name); } vat_json_object_add_uint (node, "state", mp->state); + vat_json_object_add_uint (node, "is-l2", mp->is_l2); } static int @@ -22776,10 +23305,22 @@ _(tap_delete, \ " | sw_if_index ") \ _(sw_interface_tap_dump, "") \ _(tap_create_v2, \ - "name [hw-addr ] [host-ns ] [rx-ring-size [tx-ring-size ]") \ + "id [hw-addr ] [host-ns ] [rx-ring-size [tx-ring-size ]") \ _(tap_delete_v2, \ " | sw_if_index ") \ _(sw_interface_tap_v2_dump, "") \ +_(bond_create, \ + "[hw-addr ] {round-robin | active-backup | " \ + "broadcast | {lacp | xor} [load-balance { l2 | l23 | l34 }]}") \ +_(bond_delete, \ + " | sw_if_index ") \ +_(bond_enslave, \ + "sw_if_index bond [is_passive] [is_long_timeout]") \ +_(bond_detach_slave, \ + "sw_if_index ") \ +_(sw_interface_bond_dump, "") \ +_(sw_interface_slave_dump, \ + " | sw_if_index ") \ _(ip_table_add_del, \ "table-id [ipv6]\n") \ _(ip_add_del_route, \ @@ -22926,6 +23467,7 @@ _(interface_name_renumber, \ _(input_acl_set_interface, \ " | sw_if_index [ip4-table ] [ip6-table ]\n" \ " [l2-table ] [del]") \ +_(ip_probe_neighbor, "( | sw_if_index ) address ") \ _(want_ip4_arp_events, "address [del]") \ _(want_ip6_nd_events, "address [del]") \ _(want_l2_macs_events, "[disable] [learn-limit ] [scan-delay ] [max-entries ]") \ @@ -22945,7 +23487,8 @@ _(ipsec_sa_set_key, "sa_id crypto_key integ_key ") \ _(ipsec_tunnel_if_add_del, "local_spi remote_spi \n" \ " crypto_alg local_crypto_key remote_crypto_key \n" \ " integ_alg local_integ_key remote_integ_key \n" \ - " local_ip remote_ip [esn] [anti_replay] [del]\n") \ + " local_ip remote_ip [esn] [anti_replay] [del]\n" \ + " [instance ]") \ _(ipsec_sa_dump, "[sa_id ]") \ _(ipsec_tunnel_if_set_key, " \n" \ " \n") \