- vat_json_init_object (node);
- vat_json_object_add_uint (node, "sw_if_index", ntohl (mp->sw_if_index));
- if (mp->is_ipv6)
- {
- struct in6_addr ip6;
-
- clib_memcpy (&ip6, mp->src_address, sizeof (ip6));
- vat_json_object_add_ip6 (node, "src_address", ip6);
- clib_memcpy (&ip6, mp->dst_address, sizeof (ip6));
- vat_json_object_add_ip6 (node, "dst_address", ip6);
- }
- else
- {
- struct in_addr ip4;
-
- clib_memcpy (&ip4, mp->src_address, sizeof (ip4));
- vat_json_object_add_ip4 (node, "src_address", ip4);
- clib_memcpy (&ip4, mp->dst_address, sizeof (ip4));
- vat_json_object_add_ip4 (node, "dst_address", ip4);
- }
- vat_json_object_add_uint (node, "encap_vrf_id", ntohl (mp->encap_vrf_id));
- vat_json_object_add_uint (node, "decap_next_index",
- ntohl (mp->decap_next_index));
- vat_json_object_add_uint (node, "vni", ntohl (mp->vni));
- vat_json_object_add_uint (node, "is_ipv6", mp->is_ipv6 ? 1 : 0);
- vat_json_object_add_uint (node, "mcast_sw_if_index",
- ntohl (mp->mcast_sw_if_index));
-}
-
-static int
-api_geneve_tunnel_dump (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_geneve_tunnel_dump_t *mp;
- vl_api_control_ping_t *mp_ping;
- 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, "sw_if_index %d", &sw_if_index))
- sw_if_index_set = 1;
- else
- break;
- }
-
- if (sw_if_index_set == 0)
- {
- sw_if_index = ~0;
- }
-
- if (!vam->json_output)
- {
- print (vam->ofp, "%11s%24s%24s%14s%18s%13s%19s",
- "sw_if_index", "local_address", "remote_address",
- "encap_vrf_id", "decap_next_index", "vni", "mcast_sw_if_index");
- }
-
- /* Get list of geneve-tunnel interfaces */
- M (GENEVE_TUNNEL_DUMP, mp);
-
- mp->sw_if_index = htonl (sw_if_index);
-
- S (mp);
-
- /* Use a control ping for synchronization */
- M (CONTROL_PING, mp_ping);
- S (mp_ping);
-
- W (ret);
- return ret;
-}
-
-static int
-api_gre_add_del_tunnel (vat_main_t * vam)
-{
- unformat_input_t *line_input = vam->input;
- vl_api_gre_add_del_tunnel_t *mp;
- ip4_address_t src4, dst4;
- ip6_address_t src6, dst6;
- u8 is_add = 1;
- u8 ipv4_set = 0;
- u8 ipv6_set = 0;
- u8 teb = 0;
- u8 src_set = 0;
- u8 dst_set = 0;
- u32 outer_fib_id = 0;
- int ret;
-
- memset (&src4, 0, sizeof src4);
- memset (&dst4, 0, sizeof dst4);
- memset (&src6, 0, sizeof src6);
- memset (&dst6, 0, sizeof dst6);
-
- while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (line_input, "del"))
- is_add = 0;
- else if (unformat (line_input, "src %U", unformat_ip4_address, &src4))
- {
- src_set = 1;
- ipv4_set = 1;
- }
- else if (unformat (line_input, "dst %U", unformat_ip4_address, &dst4))
- {
- dst_set = 1;
- ipv4_set = 1;
- }
- else if (unformat (line_input, "src %U", unformat_ip6_address, &src6))
- {
- src_set = 1;
- ipv6_set = 1;
- }
- else if (unformat (line_input, "dst %U", unformat_ip6_address, &dst6))
- {
- dst_set = 1;
- ipv6_set = 1;
- }
- else if (unformat (line_input, "outer-fib-id %d", &outer_fib_id))
- ;
- else if (unformat (line_input, "teb"))
- teb = 1;
- else
- {
- errmsg ("parse error '%U'", format_unformat_error, line_input);
- return -99;
- }
- }
-
- if (src_set == 0)
- {
- errmsg ("tunnel src address not specified");
- return -99;
- }
- if (dst_set == 0)
- {
- errmsg ("tunnel dst address not specified");
- return -99;
- }
- if (ipv4_set && ipv6_set)
- {
- errmsg ("both IPv4 and IPv6 addresses specified");
- return -99;
- }
-
-
- M (GRE_ADD_DEL_TUNNEL, mp);
-
- if (ipv4_set)
- {
- clib_memcpy (&mp->src_address, &src4, 4);
- clib_memcpy (&mp->dst_address, &dst4, 4);
- }
- else
- {
- clib_memcpy (&mp->src_address, &src6, 16);
- clib_memcpy (&mp->dst_address, &dst6, 16);
- }
- mp->outer_fib_id = ntohl (outer_fib_id);
- mp->is_add = is_add;
- mp->teb = teb;
- mp->is_ipv6 = ipv6_set;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static void vl_api_gre_tunnel_details_t_handler
- (vl_api_gre_tunnel_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- ip46_address_t src = to_ip46 (mp->is_ipv6, mp->src_address);
- ip46_address_t dst = to_ip46 (mp->is_ipv6, mp->dst_address);
-
- print (vam->ofp, "%11d%24U%24U%6d%14d",
- ntohl (mp->sw_if_index),
- format_ip46_address, &src, IP46_TYPE_ANY,
- format_ip46_address, &dst, IP46_TYPE_ANY,
- mp->teb, ntohl (mp->outer_fib_id));
-}
-
-static void vl_api_gre_tunnel_details_t_handler_json
- (vl_api_gre_tunnel_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- vat_json_node_t *node = NULL;
- struct in_addr ip4;
- struct in6_addr ip6;
-
- 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));
- if (!mp->is_ipv6)
- {
- clib_memcpy (&ip4, &mp->src_address, sizeof (ip4));
- vat_json_object_add_ip4 (node, "src_address", ip4);
- clib_memcpy (&ip4, &mp->dst_address, sizeof (ip4));
- vat_json_object_add_ip4 (node, "dst_address", ip4);
- }
- else
- {
- clib_memcpy (&ip6, &mp->src_address, sizeof (ip6));
- vat_json_object_add_ip6 (node, "src_address", ip6);
- clib_memcpy (&ip6, &mp->dst_address, sizeof (ip6));
- vat_json_object_add_ip6 (node, "dst_address", ip6);
- }
- vat_json_object_add_uint (node, "teb", mp->teb);
- vat_json_object_add_uint (node, "outer_fib_id", ntohl (mp->outer_fib_id));
- vat_json_object_add_uint (node, "is_ipv6", mp->is_ipv6);
-}
-
-static int
-api_gre_tunnel_dump (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_gre_tunnel_dump_t *mp;
- vl_api_control_ping_t *mp_ping;
- 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, "sw_if_index %d", &sw_if_index))
- sw_if_index_set = 1;
- else
- break;
- }
-
- if (sw_if_index_set == 0)
- {
- sw_if_index = ~0;
- }
-
- if (!vam->json_output)
- {
- print (vam->ofp, "%11s%24s%24s%6s%14s",
- "sw_if_index", "src_address", "dst_address", "teb",
- "outer_fib_id");
- }
-
- /* Get list of gre-tunnel interfaces */
- M (GRE_TUNNEL_DUMP, mp);
-
- mp->sw_if_index = htonl (sw_if_index);
-
- S (mp);
-
- /* Use a control ping for synchronization */
- MPING (CONTROL_PING, mp_ping);
- S (mp_ping);
-
- W (ret);
- return ret;
-}
-
-static int
-api_l2_fib_clear_table (vat_main_t * vam)
-{
-// unformat_input_t * i = vam->input;
- vl_api_l2_fib_clear_table_t *mp;
- int ret;
-
- M (L2_FIB_CLEAR_TABLE, mp);
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_l2_interface_efp_filter (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_l2_interface_efp_filter_t *mp;
- u32 sw_if_index;
- u8 enable = 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, "enable"))
- enable = 1;
- else if (unformat (i, "disable"))
- enable = 0;
- else
- {
- clib_warning ("parse error '%U'", format_unformat_error, i);
- return -99;
- }
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing sw_if_index");
- return -99;
- }
-
- M (L2_INTERFACE_EFP_FILTER, mp);
-
- mp->sw_if_index = ntohl (sw_if_index);
- mp->enable_disable = enable;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-#define foreach_vtr_op \
-_("disable", L2_VTR_DISABLED) \
-_("push-1", L2_VTR_PUSH_1) \
-_("push-2", L2_VTR_PUSH_2) \
-_("pop-1", L2_VTR_POP_1) \
-_("pop-2", L2_VTR_POP_2) \
-_("translate-1-1", L2_VTR_TRANSLATE_1_1) \
-_("translate-1-2", L2_VTR_TRANSLATE_1_2) \
-_("translate-2-1", L2_VTR_TRANSLATE_2_1) \
-_("translate-2-2", L2_VTR_TRANSLATE_2_2)
-
-static int
-api_l2_interface_vlan_tag_rewrite (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_l2_interface_vlan_tag_rewrite_t *mp;
- u32 sw_if_index;
- u8 sw_if_index_set = 0;
- u8 vtr_op_set = 0;
- u32 vtr_op = 0;
- u32 push_dot1q = 1;
- u32 tag1 = ~0;
- u32 tag2 = ~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, "vtr_op %d", &vtr_op))
- vtr_op_set = 1;
-#define _(n,v) else if (unformat(i, n)) {vtr_op = v; vtr_op_set = 1;}
- foreach_vtr_op
-#undef _
- else if (unformat (i, "push_dot1q %d", &push_dot1q))
- ;
- else if (unformat (i, "tag1 %d", &tag1))
- ;
- else if (unformat (i, "tag2 %d", &tag2))
- ;
- else
- {
- clib_warning ("parse error '%U'", format_unformat_error, i);
- return -99;
- }
- }
-
- if ((sw_if_index_set == 0) || (vtr_op_set == 0))
- {
- errmsg ("missing vtr operation or sw_if_index");
- return -99;
- }
-
- M (L2_INTERFACE_VLAN_TAG_REWRITE, mp);
- mp->sw_if_index = ntohl (sw_if_index);
- mp->vtr_op = ntohl (vtr_op);
- mp->push_dot1q = ntohl (push_dot1q);
- mp->tag1 = ntohl (tag1);
- mp->tag2 = ntohl (tag2);
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_create_vhost_user_if (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_create_vhost_user_if_t *mp;
- u8 *file_name;
- u8 is_server = 0;
- u8 file_name_set = 0;
- u32 custom_dev_instance = ~0;
- u8 hwaddr[6];
- u8 use_custom_mac = 0;
- u8 *tag = 0;
- int ret;
-
- /* Shut up coverity */
- memset (hwaddr, 0, sizeof (hwaddr));
-
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "socket %s", &file_name))
- {
- file_name_set = 1;
- }
- else if (unformat (i, "renumber %" PRIu32, &custom_dev_instance))
- ;
- else if (unformat (i, "mac %U", unformat_ethernet_address, hwaddr))
- use_custom_mac = 1;
- else if (unformat (i, "server"))
- is_server = 1;
- else if (unformat (i, "tag %s", &tag))
- ;
- else
- break;
- }
-
- if (file_name_set == 0)
- {
- errmsg ("missing socket file name");
- return -99;
- }
-
- if (vec_len (file_name) > 255)
- {
- errmsg ("socket file name too long");
- return -99;
- }
- vec_add1 (file_name, 0);
-
- M (CREATE_VHOST_USER_IF, mp);
-
- mp->is_server = is_server;
- clib_memcpy (mp->sock_filename, file_name, vec_len (file_name));
- vec_free (file_name);
- if (custom_dev_instance != ~0)
- {
- mp->renumber = 1;
- mp->custom_dev_instance = ntohl (custom_dev_instance);
- }
- mp->use_custom_mac = use_custom_mac;
- clib_memcpy (mp->mac_address, hwaddr, 6);
- if (tag)
- strncpy ((char *) mp->tag, (char *) tag, ARRAY_LEN (mp->tag) - 1);
- vec_free (tag);
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_modify_vhost_user_if (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_modify_vhost_user_if_t *mp;
- u8 *file_name;
- u8 is_server = 0;
- u8 file_name_set = 0;
- u32 custom_dev_instance = ~0;
- u8 sw_if_index_set = 0;
- u32 sw_if_index = (u32) ~ 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, "socket %s", &file_name))
- {
- file_name_set = 1;
- }
- else if (unformat (i, "renumber %" PRIu32, &custom_dev_instance))
- ;
- else if (unformat (i, "server"))
- is_server = 1;
- else
- break;
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing sw_if_index or interface name");
- return -99;
- }
-
- if (file_name_set == 0)
- {
- errmsg ("missing socket file name");
- return -99;
- }
-
- if (vec_len (file_name) > 255)
- {
- errmsg ("socket file name too long");
- return -99;
- }
- vec_add1 (file_name, 0);
-
- M (MODIFY_VHOST_USER_IF, mp);
-
- mp->sw_if_index = ntohl (sw_if_index);
- mp->is_server = is_server;
- clib_memcpy (mp->sock_filename, file_name, vec_len (file_name));
- vec_free (file_name);
- if (custom_dev_instance != ~0)
- {
- mp->renumber = 1;
- mp->custom_dev_instance = ntohl (custom_dev_instance);
- }
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_delete_vhost_user_if (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_delete_vhost_user_if_t *mp;
- u32 sw_if_index = ~0;
- 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
- break;
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing sw_if_index or interface name");
- return -99;
- }
-
-
- M (DELETE_VHOST_USER_IF, mp);
-
- mp->sw_if_index = ntohl (sw_if_index);
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static void vl_api_sw_interface_vhost_user_details_t_handler
- (vl_api_sw_interface_vhost_user_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
-
- print (vam->ofp, "%-25s %3" PRIu32 " %6" PRIu32 " %8x %6d %7d %s",
- (char *) mp->interface_name,
- ntohl (mp->sw_if_index), ntohl (mp->virtio_net_hdr_sz),
- clib_net_to_host_u64 (mp->features), mp->is_server,
- ntohl (mp->num_regions), (char *) mp->sock_filename);
- print (vam->ofp, " Status: '%s'", strerror (ntohl (mp->sock_errno)));
-}
-
-static void vl_api_sw_interface_vhost_user_details_t_handler_json
- (vl_api_sw_interface_vhost_user_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, "virtio_net_hdr_sz",
- ntohl (mp->virtio_net_hdr_sz));
- vat_json_object_add_uint (node, "features",
- clib_net_to_host_u64 (mp->features));
- vat_json_object_add_uint (node, "is_server", mp->is_server);
- vat_json_object_add_string_copy (node, "sock_filename", mp->sock_filename);
- vat_json_object_add_uint (node, "num_regions", ntohl (mp->num_regions));
- vat_json_object_add_uint (node, "sock_errno", ntohl (mp->sock_errno));
-}
-
-static int
-api_sw_interface_vhost_user_dump (vat_main_t * vam)
-{
- vl_api_sw_interface_vhost_user_dump_t *mp;
- vl_api_control_ping_t *mp_ping;
- int ret;
- print (vam->ofp,
- "Interface name idx hdr_sz features server regions filename");
-
- /* Get list of vhost-user interfaces */
- M (SW_INTERFACE_VHOST_USER_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_show_version (vat_main_t * vam)
-{
- vl_api_show_version_t *mp;
- int ret;
-
- M (SHOW_VERSION, mp);
-
- S (mp);
- W (ret);
- return ret;
-}
-
-
-static int
-api_vxlan_gpe_add_del_tunnel (vat_main_t * vam)
-{
- unformat_input_t *line_input = vam->input;
- vl_api_vxlan_gpe_add_del_tunnel_t *mp;
- ip4_address_t local4, remote4;
- ip6_address_t local6, remote6;
- u8 is_add = 1;
- u8 ipv4_set = 0, ipv6_set = 0;
- u8 local_set = 0;
- u8 remote_set = 0;
- u8 grp_set = 0;
- u32 mcast_sw_if_index = ~0;
- u32 encap_vrf_id = 0;
- u32 decap_vrf_id = 0;
- u8 protocol = ~0;
- u32 vni;
- u8 vni_set = 0;
- int ret;
-
- /* Can't "universally zero init" (={0}) due to GCC bug 53119 */
- memset (&local4, 0, sizeof local4);
- memset (&remote4, 0, sizeof remote4);
- memset (&local6, 0, sizeof local6);
- memset (&remote6, 0, sizeof remote6);
-
- while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (line_input, "del"))
- is_add = 0;
- else if (unformat (line_input, "local %U",
- unformat_ip4_address, &local4))
- {
- local_set = 1;
- ipv4_set = 1;
- }
- else if (unformat (line_input, "remote %U",
- unformat_ip4_address, &remote4))
- {
- remote_set = 1;
- ipv4_set = 1;
- }
- else if (unformat (line_input, "local %U",
- unformat_ip6_address, &local6))
- {
- local_set = 1;
- ipv6_set = 1;
- }
- else if (unformat (line_input, "remote %U",
- unformat_ip6_address, &remote6))
- {
- remote_set = 1;
- ipv6_set = 1;
- }
- else if (unformat (line_input, "group %U %U",
- unformat_ip4_address, &remote4,
- api_unformat_sw_if_index, vam, &mcast_sw_if_index))
- {
- grp_set = remote_set = 1;
- ipv4_set = 1;
- }
- else if (unformat (line_input, "group %U",
- unformat_ip4_address, &remote4))
- {
- grp_set = remote_set = 1;
- ipv4_set = 1;
- }
- else if (unformat (line_input, "group %U %U",
- unformat_ip6_address, &remote6,
- api_unformat_sw_if_index, vam, &mcast_sw_if_index))
- {
- grp_set = remote_set = 1;
- ipv6_set = 1;
- }
- else if (unformat (line_input, "group %U",
- unformat_ip6_address, &remote6))
- {
- grp_set = remote_set = 1;
- ipv6_set = 1;
- }
- else
- if (unformat (line_input, "mcast_sw_if_index %u", &mcast_sw_if_index))
- ;
- else if (unformat (line_input, "encap-vrf-id %d", &encap_vrf_id))
- ;
- else if (unformat (line_input, "decap-vrf-id %d", &decap_vrf_id))
- ;
- else if (unformat (line_input, "vni %d", &vni))
- vni_set = 1;
- else if (unformat (line_input, "next-ip4"))
- protocol = 1;
- else if (unformat (line_input, "next-ip6"))
- protocol = 2;
- else if (unformat (line_input, "next-ethernet"))
- protocol = 3;
- else if (unformat (line_input, "next-nsh"))
- protocol = 4;
- else
- {
- errmsg ("parse error '%U'", format_unformat_error, line_input);
- return -99;
- }
- }
-
- if (local_set == 0)
- {
- errmsg ("tunnel local address not specified");
- return -99;
- }
- if (remote_set == 0)
- {
- errmsg ("tunnel remote address not specified");
- return -99;
- }
- if (grp_set && mcast_sw_if_index == ~0)
- {
- errmsg ("tunnel nonexistent multicast device");
- return -99;
- }
- if (ipv4_set && ipv6_set)
- {
- errmsg ("both IPv4 and IPv6 addresses specified");
- return -99;
- }
-
- if (vni_set == 0)
- {
- errmsg ("vni not specified");
- return -99;
- }
-
- M (VXLAN_GPE_ADD_DEL_TUNNEL, mp);
-
-
- if (ipv6_set)
- {
- clib_memcpy (&mp->local, &local6, sizeof (local6));
- clib_memcpy (&mp->remote, &remote6, sizeof (remote6));
- }
- else
- {
- clib_memcpy (&mp->local, &local4, sizeof (local4));
- clib_memcpy (&mp->remote, &remote4, sizeof (remote4));
- }
-
- mp->mcast_sw_if_index = ntohl (mcast_sw_if_index);
- mp->encap_vrf_id = ntohl (encap_vrf_id);
- mp->decap_vrf_id = ntohl (decap_vrf_id);
- mp->protocol = protocol;
- mp->vni = ntohl (vni);
- mp->is_add = is_add;
- mp->is_ipv6 = ipv6_set;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static void vl_api_vxlan_gpe_tunnel_details_t_handler
- (vl_api_vxlan_gpe_tunnel_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- ip46_address_t local = to_ip46 (mp->is_ipv6, mp->local);
- ip46_address_t remote = to_ip46 (mp->is_ipv6, mp->remote);
-
- print (vam->ofp, "%11d%24U%24U%13d%12d%19d%14d%14d",
- ntohl (mp->sw_if_index),
- format_ip46_address, &local, IP46_TYPE_ANY,
- format_ip46_address, &remote, IP46_TYPE_ANY,
- ntohl (mp->vni), mp->protocol,
- ntohl (mp->mcast_sw_if_index),
- ntohl (mp->encap_vrf_id), ntohl (mp->decap_vrf_id));
-}
-
-
-static void vl_api_vxlan_gpe_tunnel_details_t_handler_json
- (vl_api_vxlan_gpe_tunnel_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- vat_json_node_t *node = NULL;
- struct in_addr ip4;
- struct in6_addr ip6;
-
- 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));
- if (mp->is_ipv6)
- {
- clib_memcpy (&ip6, &(mp->local[0]), sizeof (ip6));
- vat_json_object_add_ip6 (node, "local", ip6);
- clib_memcpy (&ip6, &(mp->remote[0]), sizeof (ip6));
- vat_json_object_add_ip6 (node, "remote", ip6);
- }
- else
- {
- clib_memcpy (&ip4, &(mp->local[0]), sizeof (ip4));
- vat_json_object_add_ip4 (node, "local", ip4);
- clib_memcpy (&ip4, &(mp->remote[0]), sizeof (ip4));
- vat_json_object_add_ip4 (node, "remote", ip4);
- }
- vat_json_object_add_uint (node, "vni", ntohl (mp->vni));
- vat_json_object_add_uint (node, "protocol", ntohl (mp->protocol));
- vat_json_object_add_uint (node, "mcast_sw_if_index",
- ntohl (mp->mcast_sw_if_index));
- vat_json_object_add_uint (node, "encap_vrf_id", ntohl (mp->encap_vrf_id));
- vat_json_object_add_uint (node, "decap_vrf_id", ntohl (mp->decap_vrf_id));
- vat_json_object_add_uint (node, "is_ipv6", mp->is_ipv6 ? 1 : 0);
-}
-
-static int
-api_vxlan_gpe_tunnel_dump (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_vxlan_gpe_tunnel_dump_t *mp;
- vl_api_control_ping_t *mp_ping;
- 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, "sw_if_index %d", &sw_if_index))
- sw_if_index_set = 1;
- else
- break;
- }
-
- if (sw_if_index_set == 0)
- {
- sw_if_index = ~0;
- }
-
- if (!vam->json_output)
- {
- print (vam->ofp, "%11s%24s%24s%13s%15s%19s%14s%14s",
- "sw_if_index", "local", "remote", "vni",
- "protocol", "mcast_sw_if_index", "encap_vrf_id", "decap_vrf_id");
- }
-
- /* Get list of vxlan-tunnel interfaces */
- M (VXLAN_GPE_TUNNEL_DUMP, mp);
-
- mp->sw_if_index = htonl (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_l2_fib_table_details_t_handler
- (vl_api_l2_fib_table_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
-
- print (vam->ofp, "%3" PRIu32 " %U %3" PRIu32
- " %d %d %d",
- ntohl (mp->bd_id), format_ethernet_address, mp->mac,
- ntohl (mp->sw_if_index), mp->static_mac, mp->filter_mac,
- mp->bvi_mac);
-}
-
-static void vl_api_l2_fib_table_details_t_handler_json
- (vl_api_l2_fib_table_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, "bd_id", ntohl (mp->bd_id));
- vat_json_object_add_bytes (node, "mac", mp->mac, 6);
- vat_json_object_add_uint (node, "sw_if_index", ntohl (mp->sw_if_index));
- vat_json_object_add_uint (node, "static_mac", mp->static_mac);
- vat_json_object_add_uint (node, "filter_mac", mp->filter_mac);
- vat_json_object_add_uint (node, "bvi_mac", mp->bvi_mac);
-}
-
-static int
-api_l2_fib_table_dump (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_l2_fib_table_dump_t *mp;
- vl_api_control_ping_t *mp_ping;
- u32 bd_id;
- u8 bd_id_set = 0;
- int ret;
-
- /* Parse args required to build the message */
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "bd_id %d", &bd_id))
- bd_id_set = 1;
- else
- break;
- }
-
- if (bd_id_set == 0)
- {
- errmsg ("missing bridge domain");
- return -99;
- }
-
- print (vam->ofp, "BD-ID Mac Address sw-ndx Static Filter BVI");
-
- /* Get list of l2 fib entries */
- M (L2_FIB_TABLE_DUMP, mp);
-
- mp->bd_id = ntohl (bd_id);
- S (mp);
-
- /* Use a control ping for synchronization */
- MPING (CONTROL_PING, mp_ping);
- S (mp_ping);
-
- W (ret);
- return ret;
-}
-
-
-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_want_ip4_arp_events (vat_main_t * vam)
-{
- unformat_input_t *line_input = vam->input;
- vl_api_want_ip4_arp_events_t *mp;
- ip4_address_t address;
- int address_set = 0;
- u32 enable_disable = 1;
- int ret;
-
- while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (line_input, "address %U", unformat_ip4_address, &address))
- address_set = 1;
- else if (unformat (line_input, "del"))
- enable_disable = 0;
- else
- break;
- }
-
- if (address_set == 0)
- {
- errmsg ("missing addresses");
- return -99;
- }
-
- M (WANT_IP4_ARP_EVENTS, mp);
- mp->enable_disable = enable_disable;
- mp->pid = htonl (getpid ());
- mp->address = address.as_u32;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_want_ip6_nd_events (vat_main_t * vam)
-{
- unformat_input_t *line_input = vam->input;
- vl_api_want_ip6_nd_events_t *mp;
- ip6_address_t address;
- int address_set = 0;
- u32 enable_disable = 1;
- int ret;
-
- while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (line_input, "address %U", unformat_ip6_address, &address))
- address_set = 1;
- else if (unformat (line_input, "del"))
- enable_disable = 0;
- else
- break;
- }
-
- if (address_set == 0)
- {
- errmsg ("missing addresses");
- return -99;
- }
-
- M (WANT_IP6_ND_EVENTS, mp);
- mp->enable_disable = enable_disable;
- mp->pid = htonl (getpid ());
- clib_memcpy (mp->address, &address, sizeof (ip6_address_t));
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_want_l2_macs_events (vat_main_t * vam)
-{
- unformat_input_t *line_input = vam->input;
- vl_api_want_l2_macs_events_t *mp;
- u8 enable_disable = 1;
- u32 scan_delay = 0;
- u32 max_macs_in_event = 0;
- u32 learn_limit = 0;
- int ret;
-
- while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (line_input, "learn-limit %d", &learn_limit))
- ;
- else if (unformat (line_input, "scan-delay %d", &scan_delay))
- ;
- else if (unformat (line_input, "max-entries %d", &max_macs_in_event))
- ;
- else if (unformat (line_input, "disable"))
- enable_disable = 0;
- else
- break;
- }
-
- M (WANT_L2_MACS_EVENTS, mp);
- mp->enable_disable = enable_disable;
- mp->pid = htonl (getpid ());
- mp->learn_limit = htonl (learn_limit);
- mp->scan_delay = (u8) scan_delay;
- mp->max_macs_in_event = (u8) (max_macs_in_event / 10);
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_input_acl_set_interface (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_input_acl_set_interface_t *mp;
- u32 sw_if_index;
- int sw_if_index_set;
- u32 ip4_table_index = ~0;
- u32 ip6_table_index = ~0;
- u32 l2_table_index = ~0;
- u8 is_add = 1;
- 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, "del"))
- is_add = 0;
- else if (unformat (i, "ip4-table %d", &ip4_table_index))
- ;
- else if (unformat (i, "ip6-table %d", &ip6_table_index))
- ;
- else if (unformat (i, "l2-table %d", &l2_table_index))
- ;
- 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 (INPUT_ACL_SET_INTERFACE, mp);
-
- mp->sw_if_index = ntohl (sw_if_index);
- mp->ip4_table_index = ntohl (ip4_table_index);
- mp->ip6_table_index = ntohl (ip6_table_index);
- mp->l2_table_index = ntohl (l2_table_index);
- mp->is_add = is_add;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_ip_address_dump (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_ip_address_dump_t *mp;
- vl_api_control_ping_t *mp_ping;
- u32 sw_if_index = ~0;
- u8 sw_if_index_set = 0;
- u8 ipv4_set = 0;
- u8 ipv6_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, "ipv4"))
- ipv4_set = 1;
- else if (unformat (i, "ipv6"))
- ipv6_set = 1;
- else
- break;
- }
-
- if (ipv4_set && ipv6_set)
- {
- errmsg ("ipv4 and ipv6 flags cannot be both set");
- return -99;
- }
-
- if ((!ipv4_set) && (!ipv6_set))
- {
- errmsg ("no ipv4 nor ipv6 flag set");
- return -99;
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing interface name or sw_if_index");
- return -99;
- }
-
- vam->current_sw_if_index = sw_if_index;
- vam->is_ipv6 = ipv6_set;
-
- M (IP_ADDRESS_DUMP, mp);
- mp->sw_if_index = ntohl (sw_if_index);
- mp->is_ipv6 = ipv6_set;
- S (mp);