X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvat%2Fapi_format.c;h=0b60b91090da9e3bb327abc597de213517aa7840;hb=09a38a6db4235dcacbfb6d5e3686faaeb1c25a37;hp=226e129e955225d24d934ec56d12b51144b762d4;hpb=4a3f69c17f26e9790db26d0910befe36b5e9f85f;p=vpp.git diff --git a/src/vat/api_format.c b/src/vat/api_format.c index 226e129e955..0b60b91090d 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -725,6 +724,34 @@ static void vl_api_create_loopback_reply_t_handler_json 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_af_packet_create_reply_t_handler (vl_api_af_packet_create_reply_t * mp) { @@ -944,6 +971,7 @@ static void vl_api_sw_interface_details_t_handler_json } } +#if VPP_API_TEST_BUILTIN == 0 static void vl_api_sw_interface_set_flags_t_handler (vl_api_sw_interface_set_flags_t * mp) { @@ -954,6 +982,7 @@ static void vl_api_sw_interface_set_flags_t_handler mp->admin_up_down ? "admin-up" : "admin-down", mp->link_up_down ? "link-up" : "link-down"); } +#endif static void vl_api_sw_interface_set_flags_t_handler_json (vl_api_sw_interface_set_flags_t * mp) @@ -1225,10 +1254,11 @@ static void vl_api_show_version_reply_t_handler_json static void vl_api_ip4_arp_event_t_handler (vl_api_ip4_arp_event_t * mp) { + u32 sw_if_index = ntohl (mp->sw_if_index); errmsg ("arp %s event: address %U new mac %U sw_if_index %d", mp->mac_ip ? "mac/ip binding" : "address resolution", format_ip4_address, &mp->address, - format_ethernet_address, mp->new_mac, mp->sw_if_index); + format_ethernet_address, mp->new_mac, sw_if_index); } static void @@ -1240,10 +1270,11 @@ vl_api_ip4_arp_event_t_handler_json (vl_api_ip4_arp_event_t * mp) static void vl_api_ip6_nd_event_t_handler (vl_api_ip6_nd_event_t * mp) { + u32 sw_if_index = ntohl (mp->sw_if_index); errmsg ("ip6 nd %s event: address %U new mac %U sw_if_index %d", mp->mac_ip ? "mac/ip binding" : "address resolution", format_ip6_address, mp->address, - format_ethernet_address, mp->new_mac, mp->sw_if_index); + format_ethernet_address, mp->new_mac, sw_if_index); } static void @@ -2729,6 +2760,53 @@ static void } } +static u8 * +format_gpe_encap_mode (u8 * s, va_list * args) +{ + u32 mode = va_arg (*args, u32); + + switch (mode) + { + case 0: + return format (s, "lisp"); + case 1: + return format (s, "vxlan"); + } + return 0; +} + +static void + vl_api_gpe_get_encap_mode_reply_t_handler + (vl_api_gpe_get_encap_mode_reply_t * mp) +{ + vat_main_t *vam = &vat_main; + + print (vam->ofp, "gpe mode: %U", format_gpe_encap_mode, mp->encap_mode); + vam->retval = ntohl (mp->retval); + vam->result_ready = 1; +} + +static void + vl_api_gpe_get_encap_mode_reply_t_handler_json + (vl_api_gpe_get_encap_mode_reply_t * mp) +{ + vat_main_t *vam = &vat_main; + vat_json_node_t node; + + u8 *encap_mode = format (0, "%U", format_gpe_encap_mode, mp->encap_mode); + vec_add1 (encap_mode, 0); + + vat_json_init_object (&node); + vat_json_object_add_string_copy (&node, "gpe_mode", encap_mode); + + vec_free (encap_mode); + vat_json_print (vam->ofp, &node); + vat_json_free (&node); + + vam->retval = ntohl (mp->retval); + vam->result_ready = 1; +} + static void vl_api_gpe_fwd_entry_path_details_t_handler (vl_api_gpe_fwd_entry_path_details_t * mp) @@ -3839,9 +3917,11 @@ _(sw_interface_ip6nd_ra_prefix_reply) \ _(sw_interface_ip6nd_ra_config_reply) \ _(set_arp_neighbor_limit_reply) \ _(l2_patch_add_del_reply) \ -_(sr_tunnel_add_del_reply) \ -_(sr_policy_add_del_reply) \ -_(sr_multicast_map_add_del_reply) \ +_(sr_policy_add_reply) \ +_(sr_policy_mod_reply) \ +_(sr_policy_del_reply) \ +_(sr_localsid_add_del_reply) \ +_(sr_steering_add_del_reply) \ _(classify_add_del_session_reply) \ _(classify_set_interface_ip_table_reply) \ _(classify_set_interface_l2_tables_reply) \ @@ -3900,6 +3980,7 @@ _(one_add_del_map_request_itr_rlocs_reply) \ _(one_eid_table_add_del_map_reply) \ _(gpe_add_del_fwd_entry_reply) \ _(gpe_enable_disable_reply) \ +_(gpe_set_encap_mode_reply) \ _(gpe_add_del_iface_reply) \ _(vxlan_gpe_add_del_tunnel_reply) \ _(af_packet_delete_reply) \ @@ -3922,13 +4003,6 @@ _(feature_enable_disable_reply) \ _(sw_interface_tag_add_del_reply) \ _(sw_interface_set_mtu_reply) -#if DPDK > 0 -#define foreach_standard_dpdk_reply_retval_handler \ -_(sw_interface_set_dpdk_hqos_pipe_reply) \ -_(sw_interface_set_dpdk_hqos_subport_reply) \ -_(sw_interface_set_dpdk_hqos_tctbl_reply) -#endif - #define _(n) \ static void vl_api_##n##_t_handler \ (vl_api_##n##_t * mp) \ @@ -3960,39 +4034,6 @@ foreach_standard_reply_retval_handler; foreach_standard_reply_retval_handler; #undef _ -#if DPDK > 0 -#define _(n) \ - static void vl_api_##n##_t_handler \ - (vl_api_##n##_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; \ - } \ - } -foreach_standard_dpdk_reply_retval_handler; -#undef _ - -#define _(n) \ - static void vl_api_##n##_t_handler_json \ - (vl_api_##n##_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); \ - vam->retval = ntohl(mp->retval); \ - vam->result_ready = 1; \ - } -foreach_standard_dpdk_reply_retval_handler; -#undef _ -#endif - /* * Table of message reply handlers, must include boilerplate handlers * we just generated @@ -4000,8 +4041,8 @@ foreach_standard_dpdk_reply_retval_handler; #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, sw_interface_set_flags) \ _(SW_INTERFACE_SET_FLAGS_REPLY, sw_interface_set_flags_reply) \ _(CONTROL_PING_REPLY, control_ping_reply) \ _(CLI_REPLY, cli_reply) \ @@ -4057,9 +4098,11 @@ _(SW_INTERFACE_IP6ND_RA_CONFIG_REPLY, \ sw_interface_ip6nd_ra_config_reply) \ _(SET_ARP_NEIGHBOR_LIMIT_REPLY, set_arp_neighbor_limit_reply) \ _(L2_PATCH_ADD_DEL_REPLY, l2_patch_add_del_reply) \ -_(SR_TUNNEL_ADD_DEL_REPLY, sr_tunnel_add_del_reply) \ -_(SR_POLICY_ADD_DEL_REPLY, sr_policy_add_del_reply) \ -_(SR_MULTICAST_MAP_ADD_DEL_REPLY, sr_multicast_map_add_del_reply) \ +_(SR_POLICY_ADD_REPLY, sr_policy_add_reply) \ +_(SR_POLICY_MOD_REPLY, sr_policy_mod_reply) \ +_(SR_POLICY_DEL_REPLY, sr_policy_del_reply) \ +_(SR_LOCALSID_ADD_DEL_REPLY, sr_localsid_add_del_reply) \ +_(SR_STEERING_ADD_DEL_REPLY, sr_steering_add_del_reply) \ _(CLASSIFY_ADD_DEL_TABLE_REPLY, classify_add_del_table_reply) \ _(CLASSIFY_ADD_DEL_SESSION_REPLY, classify_add_del_session_reply) \ _(CLASSIFY_SET_INTERFACE_IP_TABLE_REPLY, \ @@ -4118,11 +4161,6 @@ _(IKEV2_INITIATE_REKEY_CHILD_SA_REPLY, ikev2_initiate_rekey_child_sa_reply) \ _(DELETE_LOOPBACK_REPLY, delete_loopback_reply) \ _(BD_IP_MAC_ADD_DEL_REPLY, bd_ip_mac_add_del_reply) \ _(DHCP_COMPL_EVENT, dhcp_compl_event) \ -_(VNET_INTERFACE_COUNTERS, vnet_interface_counters) \ -_(VNET_IP4_FIB_COUNTERS, vnet_ip4_fib_counters) \ -_(VNET_IP6_FIB_COUNTERS, vnet_ip6_fib_counters) \ -_(VNET_IP4_NBR_COUNTERS, vnet_ip4_nbr_counters) \ -_(VNET_IP6_NBR_COUNTERS, vnet_ip6_nbr_counters) \ _(MAP_ADD_DOMAIN_REPLY, map_add_domain_reply) \ _(MAP_DEL_DOMAIN_REPLY, map_del_domain_reply) \ _(MAP_ADD_DEL_RULE_REPLY, map_add_del_rule_reply) \ @@ -4160,6 +4198,8 @@ _(ONE_EID_TABLE_VNI_DETAILS, one_eid_table_vni_details) \ _(ONE_MAP_RESOLVER_DETAILS, one_map_resolver_details) \ _(ONE_MAP_SERVER_DETAILS, one_map_server_details) \ _(ONE_ADJACENCIES_GET_REPLY, one_adjacencies_get_reply) \ +_(GPE_SET_ENCAP_MODE_REPLY, gpe_set_encap_mode_reply) \ +_(GPE_GET_ENCAP_MODE_REPLY, gpe_get_encap_mode_reply) \ _(GPE_ADD_DEL_IFACE_REPLY, gpe_add_del_iface_reply) \ _(GPE_ENABLE_DISABLE_REPLY, gpe_enable_disable_reply) \ _(GPE_ADD_DEL_FWD_ENTRY_REPLY, gpe_add_del_fwd_entry_reply) \ @@ -4222,15 +4262,13 @@ _(SW_INTERFACE_SET_MTU_REPLY, sw_interface_set_mtu_reply) \ _(IP_NEIGHBOR_DETAILS, ip_neighbor_details) \ _(SW_INTERFACE_GET_TABLE_REPLY, sw_interface_get_table_reply) -#if DPDK > 0 -#define foreach_vpe_dpdk_api_reply_msg \ -_(SW_INTERFACE_SET_DPDK_HQOS_PIPE_REPLY, \ - sw_interface_set_dpdk_hqos_pipe_reply) \ -_(SW_INTERFACE_SET_DPDK_HQOS_SUBPORT_REPLY, \ - sw_interface_set_dpdk_hqos_subport_reply) \ -_(SW_INTERFACE_SET_DPDK_HQOS_TCTBL_REPLY, \ - sw_interface_set_dpdk_hqos_tctbl_reply) -#endif +#define foreach_standalone_reply_msg \ +_(SW_INTERFACE_SET_FLAGS, sw_interface_set_flags) \ +_(VNET_INTERFACE_COUNTERS, vnet_interface_counters) \ +_(VNET_IP4_FIB_COUNTERS, vnet_ip4_fib_counters) \ +_(VNET_IP6_FIB_COUNTERS, vnet_ip6_fib_counters) \ +_(VNET_IP4_NBR_COUNTERS, vnet_ip4_nbr_counters) \ +_(VNET_IP6_NBR_COUNTERS, vnet_ip6_nbr_counters) typedef struct { @@ -4716,8 +4754,11 @@ 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; memset (mac_address, 0, sizeof (mac_address)); @@ -4726,16 +4767,31 @@ api_create_loopback (vat_main_t * vam) { 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; } - /* Construct the API message */ - M (CREATE_LOOPBACK, mp); - if (mac_set) - clib_memcpy (mp->mac_address, mac_address, sizeof (mac_address)); + 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); + } - S (mp); W (ret); return ret; } @@ -5031,226 +5087,6 @@ api_sw_interface_clear_stats (vat_main_t * vam) return ret; } -#if DPDK >0 -static int -api_sw_interface_set_dpdk_hqos_pipe (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_set_dpdk_hqos_pipe_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - u32 subport; - u8 subport_set = 0; - u32 pipe; - u8 pipe_set = 0; - u32 profile; - u8 profile_set = 0; - int ret; - - /* Parse args required to build the message */ - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "rx %U", api_unformat_sw_if_index, vam, &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "sw_if_index %u", &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "subport %u", &subport)) - subport_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, "pipe %u", &pipe)) - pipe_set = 1; - else if (unformat (i, "profile %u", &profile)) - profile_set = 1; - else - break; - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (subport_set == 0) - { - errmsg ("missing subport "); - return -99; - } - - if (pipe_set == 0) - { - errmsg ("missing pipe"); - return -99; - } - - if (profile_set == 0) - { - errmsg ("missing profile"); - return -99; - } - - M (SW_INTERFACE_SET_DPDK_HQOS_PIPE, mp); - - mp->sw_if_index = ntohl (sw_if_index); - mp->subport = ntohl (subport); - mp->pipe = ntohl (pipe); - mp->profile = ntohl (profile); - - - S (mp); - W (ret); - return ret; -} - -static int -api_sw_interface_set_dpdk_hqos_subport (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_set_dpdk_hqos_subport_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - u32 subport; - u8 subport_set = 0; - u32 tb_rate = 1250000000; /* 10GbE */ - u32 tb_size = 1000000; - u32 tc_rate[] = { 1250000000, 1250000000, 1250000000, 1250000000 }; - u32 tc_period = 10; - int ret; - - /* Parse args required to build the message */ - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "rx %U", api_unformat_sw_if_index, vam, &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "sw_if_index %u", &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "subport %u", &subport)) - subport_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, "rate %u", &tb_rate)) - { - u32 tc_id; - - for (tc_id = 0; tc_id < (sizeof (tc_rate) / sizeof (tc_rate[0])); - tc_id++) - tc_rate[tc_id] = tb_rate; - } - else if (unformat (i, "bktsize %u", &tb_size)) - ; - else if (unformat (i, "tc0 %u", &tc_rate[0])) - ; - else if (unformat (i, "tc1 %u", &tc_rate[1])) - ; - else if (unformat (i, "tc2 %u", &tc_rate[2])) - ; - else if (unformat (i, "tc3 %u", &tc_rate[3])) - ; - else if (unformat (i, "period %u", &tc_period)) - ; - else - break; - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (subport_set == 0) - { - errmsg ("missing subport "); - return -99; - } - - M (SW_INTERFACE_SET_DPDK_HQOS_SUBPORT, mp); - - mp->sw_if_index = ntohl (sw_if_index); - mp->subport = ntohl (subport); - mp->tb_rate = ntohl (tb_rate); - mp->tb_size = ntohl (tb_size); - mp->tc_rate[0] = ntohl (tc_rate[0]); - mp->tc_rate[1] = ntohl (tc_rate[1]); - mp->tc_rate[2] = ntohl (tc_rate[2]); - mp->tc_rate[3] = ntohl (tc_rate[3]); - mp->tc_period = ntohl (tc_period); - - S (mp); - W (ret); - return ret; -} - -static int -api_sw_interface_set_dpdk_hqos_tctbl (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_sw_interface_set_dpdk_hqos_tctbl_t *mp; - u32 sw_if_index; - u8 sw_if_index_set = 0; - u8 entry_set = 0; - u8 tc_set = 0; - u8 queue_set = 0; - u32 entry, tc, queue; - int ret; - - /* Parse args required to build the message */ - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "rx %U", api_unformat_sw_if_index, vam, &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "sw_if_index %u", &sw_if_index)) - sw_if_index_set = 1; - else if (unformat (i, "entry %d", &entry)) - entry_set = 1; - else if (unformat (i, "tc %d", &tc)) - tc_set = 1; - else if (unformat (i, "queue %d", &queue)) - queue_set = 1; - else - break; - } - - if (sw_if_index_set == 0) - { - errmsg ("missing interface name or sw_if_index"); - return -99; - } - - if (entry_set == 0) - { - errmsg ("missing entry "); - return -99; - } - - if (tc_set == 0) - { - errmsg ("missing traffic class "); - return -99; - } - - if (queue_set == 0) - { - errmsg ("missing queue "); - return -99; - } - - M (SW_INTERFACE_SET_DPDK_HQOS_TCTBL, mp); - - mp->sw_if_index = ntohl (sw_if_index); - mp->entry = ntohl (entry); - mp->tc = ntohl (tc); - mp->queue = ntohl (queue); - - S (mp); - W (ret); - return ret; -} -#endif - static int api_sw_interface_add_del_address (vat_main_t * vam) { @@ -7291,7 +7127,6 @@ api_ip_neighbor_add_del (vat_main_t * vam) vl_api_ip_neighbor_add_del_t *mp; u32 sw_if_index; u8 sw_if_index_set = 0; - u32 vrf_id = 0; u8 is_add = 1; u8 is_static = 0; u8 mac_address[6]; @@ -7320,8 +7155,6 @@ api_ip_neighbor_add_del (vat_main_t * vam) sw_if_index_set = 1; else if (unformat (i, "is_static")) is_static = 1; - else if (unformat (i, "vrf %d", &vrf_id)) - ; else if (unformat (i, "dst %U", unformat_ip4_address, &v4address)) v4_address_set = 1; else if (unformat (i, "dst %U", unformat_ip6_address, &v6address)) @@ -7354,7 +7187,6 @@ api_ip_neighbor_add_del (vat_main_t * vam) mp->sw_if_index = ntohl (sw_if_index); mp->is_add = is_add; - mp->vrf_id = ntohl (vrf_id); mp->is_static = is_static; if (mac_set) clib_memcpy (mp->mac_address, mac_address, 6); @@ -8400,6 +8232,64 @@ api_l2_patch_add_del (vat_main_t * vam) 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]; + +static int +api_sr_localsid_add_del (vat_main_t * vam) +{ + unformat_input_t *i = vam->input; + vl_api_sr_localsid_add_del_t *mp; + + u8 is_del; + ip6_address_t localsid; + u8 end_psp = 0; + u8 behavior = ~0; + u32 sw_if_index; + u32 fib_table = ~(u32) 0; + ip6_address_t next_hop; + + bool nexthop_set = 0; + + int ret; + + while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) + { + if (unformat (i, "del")) + is_del = 1; + else if (unformat (i, "address %U", unformat_ip6_address, &localsid)); + else if (unformat (i, "next-hop %U", unformat_ip6_address, &next_hop)) + nexthop_set = 1; + else if (unformat (i, "behavior %u", &behavior)); + else if (unformat (i, "sw_if_index %u", &sw_if_index)); + else if (unformat (i, "fib-table %u", &fib_table)); + else if (unformat (i, "end.psp %u", &behavior)); + else + break; + } + + M (SR_LOCALSID_ADD_DEL, mp); + + clib_memcpy (mp->localsid_addr, &localsid, sizeof (mp->localsid_addr)); + if (nexthop_set) + clib_memcpy (mp->nh_addr, &next_hop, sizeof (mp->nh_addr)); + mp->behavior = behavior; + mp->sw_if_index = ntohl (sw_if_index); + mp->fib_table = ntohl (fib_table); + mp->end_psp = end_psp; + mp->is_del = is_del; + + S (mp); + W (ret); + return ret; +} + static int api_ioam_enable (vat_main_t * vam) { @@ -8450,277 +8340,6 @@ api_ioam_disable (vat_main_t * vam) return ret; } -static int -api_sr_tunnel_add_del (vat_main_t * vam) -{ - unformat_input_t *i = vam->input; - vl_api_sr_tunnel_add_del_t *mp; - int is_del = 0; - int pl_index; - ip6_address_t src_address; - int src_address_set = 0; - ip6_address_t dst_address; - u32 dst_mask_width; - int dst_address_set = 0; - u16 flags = 0; - u32 rx_table_id = 0; - u32 tx_table_id = 0; - ip6_address_t *segments = 0; - ip6_address_t *this_seg; - ip6_address_t *tags = 0; - ip6_address_t *this_tag; - ip6_address_t next_address, tag; - u8 *name = 0; - u8 *policy_name = 0; - int ret; - - while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) - { - if (unformat (i, "del")) - is_del = 1; - else if (unformat (i, "name %s", &name)) - ; - else if (unformat (i, "policy %s", &policy_name)) - ; - else if (unformat (i, "rx_fib_id %d", &rx_table_id)) - ; - else if (unformat (i, "tx_fib_id %d", &tx_table_id)) - ; - else if (unformat (i, "src %U", unformat_ip6_address, &src_address)) - src_address_set = 1; - else if (unformat (i, "dst %U/%d", - unformat_ip6_address, &dst_address, &dst_mask_width)) - dst_address_set = 1; - else if (unformat (i, "next %U", unformat_ip6_address, &next_address)) - { - vec_add2 (segments, this_seg, 1); - clib_memcpy (this_seg->as_u8, next_address.as_u8, - sizeof (*this_seg)); - } - else if (unformat (i, "tag %U", unformat_ip6_address, &tag)) - { - vec_add2 (tags, this_tag, 1); - clib_memcpy (this_tag->as_u8, tag.as_u8, sizeof (*this_tag)); - } - else if (unformat (i, "clean")) - flags |= IP6_SR_HEADER_FLAG_CLEANUP; - else if (unformat (i, "protected")) - flags |= IP6_SR_HEADER_FLAG_PROTECTED; - else if (unformat (i, "InPE %d", &pl_index)) - { - if (pl_index <= 0 || pl_index > 4) - { - pl_index_range_error: - errmsg ("pl index %d out of range", pl_index); - return -99; - } - flags |= - IP6_SR_HEADER_FLAG_PL_ELT_INGRESS_PE << (3 * (pl_index - 1)); - } - else if (unformat (i, "EgPE %d", &pl_index)) - { - if (pl_index <= 0 || pl_index > 4) - goto pl_index_range_error; - flags |= - IP6_SR_HEADER_FLAG_PL_ELT_EGRESS_PE << (3 * (pl_index - 1)); - } - else if (unformat (i, "OrgSrc %d", &pl_index)) - { - if (pl_index <= 0 || pl_index > 4) - goto pl_index_range_error; - flags |= - IP6_SR_HEADER_FLAG_PL_ELT_ORIG_SRC_ADDR << (3 * (pl_index - 1)); - } - else - break; - } - - if (!src_address_set) - { - errmsg ("src address required"); - return -99; - } - - if (!dst_address_set) - { - errmsg ("dst address required"); - return -99; - } - - if (!segments) - { - errmsg ("at least one sr segment required"); - return -99; - } - - M2 (SR_TUNNEL_ADD_DEL, mp, - vec_len (segments) * sizeof (ip6_address_t) - + vec_len (tags) * sizeof (ip6_address_t)); - - clib_memcpy (mp->src_address, &src_address, sizeof (mp->src_address)); - clib_memcpy (mp->dst_address, &dst_address, sizeof (mp->dst_address)); - mp->dst_mask_width = dst_mask_width; - mp->flags_net_byte_order = clib_host_to_net_u16 (flags); - mp->n_segments = vec_len (segments); - mp->n_tags = vec_len (tags); - mp->is_add = is_del == 0; - clib_memcpy (mp->segs_and_tags, segments, - vec_len (segments) * sizeof (ip6_address_t)); - clib_memcpy (mp->segs_and_tags + - vec_len (segments) * sizeof (ip6_address_t), tags, - vec_len (tags) * sizeof (ip6_address_t)); - - mp->outer_vrf_id = ntohl (rx_table_id); - mp->inner_vrf_id = ntohl (tx_table_id); - memcpy (mp->name, name, vec_len (name)); - memcpy (mp->policy_name, policy_name, vec_len (policy_name)); - - vec_free (segments); - vec_free (tags); - - S (mp); - W (ret); - return ret; -} - -static int -api_sr_policy_add_del (vat_main_t * vam) -{ - unformat_input_t *input = vam->input; - vl_api_sr_policy_add_del_t *mp; - int is_del = 0; - u8 *name = 0; - u8 *tunnel_name = 0; - u8 **tunnel_names = 0; - - int name_set = 0; - int tunnel_set = 0; - int j = 0; - int tunnel_names_length = 1; // Init to 1 to offset the #tunnel_names counter byte - int tun_name_len = 0; // Different naming convention used as confusing these would be "bad" (TM) - int ret; - - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) - { - if (unformat (input, "del")) - is_del = 1; - else if (unformat (input, "name %s", &name)) - name_set = 1; - else if (unformat (input, "tunnel %s", &tunnel_name)) - { - if (tunnel_name) - { - vec_add1 (tunnel_names, tunnel_name); - /* For serializer: - - length = #bytes to store in serial vector - - +1 = byte to store that length - */ - tunnel_names_length += (vec_len (tunnel_name) + 1); - tunnel_set = 1; - tunnel_name = 0; - } - } - else - break; - } - - if (!name_set) - { - errmsg ("policy name required"); - return -99; - } - - if ((!tunnel_set) && (!is_del)) - { - errmsg ("tunnel name required"); - return -99; - } - - M2 (SR_POLICY_ADD_DEL, mp, tunnel_names_length); - - - - mp->is_add = !is_del; - - memcpy (mp->name, name, vec_len (name)); - // Since mp->tunnel_names is of type u8[0] and not a u8 *, u8 ** needs to be serialized - u8 *serial_orig = 0; - vec_validate (serial_orig, tunnel_names_length); - *serial_orig = vec_len (tunnel_names); // Store the number of tunnels as length in first byte of serialized vector - serial_orig += 1; // Move along one byte to store the length of first tunnel_name - - for (j = 0; j < vec_len (tunnel_names); j++) - { - tun_name_len = vec_len (tunnel_names[j]); - *serial_orig = tun_name_len; // Store length of tunnel name in first byte of Length/Value pair - serial_orig += 1; // Move along one byte to store the actual tunnel name - memcpy (serial_orig, tunnel_names[j], tun_name_len); - serial_orig += tun_name_len; // Advance past the copy - } - memcpy (mp->tunnel_names, serial_orig - tunnel_names_length, tunnel_names_length); // Regress serial_orig to head then copy fwd - - vec_free (tunnel_names); - vec_free (tunnel_name); - - S (mp); - W (ret); - return ret; -} - -static int -api_sr_multicast_map_add_del (vat_main_t * vam) -{ - unformat_input_t *input = vam->input; - vl_api_sr_multicast_map_add_del_t *mp; - int is_del = 0; - ip6_address_t multicast_address; - u8 *policy_name = 0; - int multicast_address_set = 0; - int ret; - - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) - { - if (unformat (input, "del")) - is_del = 1; - else - if (unformat - (input, "address %U", unformat_ip6_address, &multicast_address)) - multicast_address_set = 1; - else if (unformat (input, "sr-policy %s", &policy_name)) - ; - else - break; - } - - if (!is_del && !policy_name) - { - errmsg ("sr-policy name required"); - return -99; - } - - - if (!multicast_address_set) - { - errmsg ("address required"); - return -99; - } - - M (SR_MULTICAST_MAP_ADD_DEL, mp); - - mp->is_add = !is_del; - memcpy (mp->policy_name, policy_name, vec_len (policy_name)); - clib_memcpy (mp->multicast_address, &multicast_address, - sizeof (mp->multicast_address)); - - - vec_free (policy_name); - - S (mp); - W (ret); - return ret; -} - - #define foreach_tcp_proto_field \ _(src_port) \ _(dst_port) @@ -14863,6 +14482,68 @@ api_one_add_del_adjacency (vat_main_t * vam) #define api_lisp_add_del_adjacency api_one_add_del_adjacency +uword +unformat_gpe_encap_mode (unformat_input_t * input, va_list * args) +{ + u32 *mode = va_arg (*args, u32 *); + + if (unformat (input, "lisp")) + *mode = 0; + else if (unformat (input, "vxlan")) + *mode = 1; + else + return 0; + + return 1; +} + +static int +api_gpe_get_encap_mode (vat_main_t * vam) +{ + vl_api_gpe_get_encap_mode_t *mp; + int ret; + + /* Construct the API message */ + M (GPE_GET_ENCAP_MODE, mp); + + /* send it... */ + S (mp); + + /* Wait for a reply... */ + W (ret); + return ret; +} + +static int +api_gpe_set_encap_mode (vat_main_t * vam) +{ + unformat_input_t *input = vam->input; + vl_api_gpe_set_encap_mode_t *mp; + int ret; + u32 mode = 0; + + /* Parse args required to build the message */ + while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (input, "%U", unformat_gpe_encap_mode, &mode)) + ; + else + break; + } + + /* Construct the API message */ + M (GPE_SET_ENCAP_MODE, mp); + + mp->mode = mode; + + /* send it... */ + S (mp); + + /* Wait for a reply... */ + W (ret); + return ret; +} + static int api_lisp_gpe_add_del_iface (vat_main_t * vam) { @@ -15587,7 +15268,15 @@ api_af_packet_create (vat_main_t * vam) vec_free (host_if_name); S (mp); - W2 (ret, fprintf (vam->ofp, " new sw_if_index = %d ", vam->sw_if_index)); + + /* *INDENT-OFF* */ + W2 (ret, + ({ + if (ret == 0) + fprintf (vam->ofp ? vam->ofp : stderr, + " new sw_if_index = %d\n", vam->sw_if_index); + })); + /* *INDENT-ON* */ return ret; } @@ -18171,7 +17860,7 @@ echo (vat_main_t * vam) /* List of API message constructors, CLI names map to api_xxx */ #define foreach_vpe_api_msg \ -_(create_loopback,"[mac ]") \ +_(create_loopback,"[mac ] [instance ]") \ _(sw_interface_dump,"") \ _(sw_interface_set_flags, \ " | sw_if_index admin-up | admin-down link-up | link down") \ @@ -18269,14 +17958,9 @@ _(set_arp_neighbor_limit, "arp_nbr_limit [ipv6]") \ _(l2_patch_add_del, \ "rx | rx_sw_if_index tx | tx_sw_if_index \n" \ "enable | disable") \ -_(sr_tunnel_add_del, \ - "[name ] src dst / \n" \ - "(next )+ [tag ]* [clean] [reroute] \n" \ - "[policy ]") \ -_(sr_policy_add_del, \ - "name tunnel [tunnel ]* [del]") \ -_(sr_multicast_map_add_del, \ - "address [ip6 multicast address] sr-policy [policy name] [del]") \ +_(sr_localsid_add_del, \ + "(del) address next_hop behavior \n" \ + "fib-table (end.psp) sw_if_index ") \ _(classify_add_del_table, \ "buckets [skip ] [match ] [memory_size ]\n" \ " [del] [del-chain] mask \n" \ @@ -18471,6 +18155,8 @@ _(lisp_map_server_dump, "") \ _(lisp_adjacencies_get, "vni ") \ _(lisp_gpe_fwd_entries_get, "vni ") \ _(lisp_gpe_fwd_entry_path_dump, "index ") \ +_(gpe_set_encap_mode, "lisp|vxlan") \ +_(gpe_get_encap_mode, "") \ _(lisp_gpe_add_del_iface, "up|down") \ _(lisp_gpe_enable_disable, "enable|disable") \ _(lisp_gpe_add_del_fwd_entry, "reid [leid ] vni " \ @@ -18542,18 +18228,6 @@ _(sw_interface_set_mtu, " | sw_if_index mtu ") \ _(ip_neighbor_dump, "[ip6] | sw_if_index ") \ _(sw_interface_get_table, " | sw_if_index [ipv6]") -#if DPDK > 0 -#define foreach_vpe_dpdk_api_msg \ -_(sw_interface_set_dpdk_hqos_pipe, \ - "rx | sw_if_index subport pipe \n" \ - "profile \n") \ -_(sw_interface_set_dpdk_hqos_subport, \ - "rx | sw_if_index subport [rate ]\n" \ - "[bktsize ] [tc0 ] [tc1 ] [tc2 ] [tc3 ] [period ]\n") \ -_(sw_interface_set_dpdk_hqos_tctbl, \ - "rx | sw_if_index entry tc queue \n") -#endif - /* List of command functions, CLI names map directly to functions */ #define foreach_cli_function \ _(comment, "usage: comment ") \ @@ -18589,23 +18263,10 @@ _(unset, "usage: unset ") } \ } foreach_vpe_api_reply_msg; -#undef _ - -#if DPDK > 0 -#define _(N,n) \ - static void vl_api_##n##_t_handler_uni \ - (vl_api_##n##_t * mp) \ - { \ - vat_main_t * vam = &vat_main; \ - if (vam->json_output) { \ - vl_api_##n##_t_handler_json(mp); \ - } else { \ - vl_api_##n##_t_handler(mp); \ - } \ - } -foreach_vpe_dpdk_api_reply_msg; -#undef _ +#if VPP_API_TEST_BUILTIN == 0 +foreach_standalone_reply_msg; #endif +#undef _ void vat_api_hookup (vat_main_t * vam) @@ -18618,19 +18279,10 @@ vat_api_hookup (vat_main_t * vam) vl_api_##n##_t_print, \ sizeof(vl_api_##n##_t), 1); foreach_vpe_api_reply_msg; -#undef _ - -#if DPDK > 0 -#define _(N,n) \ - vl_msg_api_set_handlers(VL_API_##N, #n, \ - vl_api_##n##_t_handler_uni, \ - vl_noop_handler, \ - vl_api_##n##_t_endian, \ - vl_api_##n##_t_print, \ - sizeof(vl_api_##n##_t), 1); - foreach_vpe_dpdk_api_reply_msg; -#undef _ +#if VPP_API_TEST_BUILTIN == 0 + foreach_standalone_reply_msg; #endif +#undef _ #if (VPP_API_TEST_BUILTIN==0) vl_msg_api_set_first_available_msg_id (VL_MSG_FIRST_AVAILABLE); @@ -18646,21 +18298,11 @@ vat_api_hookup (vat_main_t * vam) #define _(n,h) hash_set_mem (vam->function_by_name, #n, api_##n); foreach_vpe_api_msg; #undef _ -#if DPDK >0 -#define _(n,h) hash_set_mem (vam->function_by_name, #n, api_##n); - foreach_vpe_dpdk_api_msg; -#undef _ -#endif /* Help strings */ #define _(n,h) hash_set_mem (vam->help_by_name, #n, h); foreach_vpe_api_msg; #undef _ -#if DPDK >0 -#define _(n,h) hash_set_mem (vam->help_by_name, #n, h); - foreach_vpe_dpdk_api_msg; -#undef _ -#endif /* CLI functions */ #define _(n,h) hash_set_mem (vam->function_by_name, #n, n); @@ -18673,6 +18315,17 @@ vat_api_hookup (vat_main_t * vam) #undef _ } +#if VPP_API_TEST_BUILTIN +static clib_error_t * +vat_api_hookup_shim (vlib_main_t * vm) +{ + vat_api_hookup (&vat_main); + return 0; +} + +VLIB_API_INIT_FUNCTION (vat_api_hookup_shim); +#endif + /* * fd.io coding-style-patch-verification: ON *