#include "vat/json_format.h"
#include <vnet/ip/ip_types_api.h>
#include <vnet/ethernet/ethernet_types_api.h>
-#include <vlibapi/api_types_inlines.h>
#include <inttypes.h>
#include <sys/stat.h>
vat_json_object_add_prefix (vat_json_node_t * node,
const vl_api_prefix_t * prefix)
{
- vat_json_object_add_uint (node, "address_length", prefix->address_length);
- vat_json_object_add_address (node, "prefix", &prefix->address);
+ vat_json_object_add_uint (node, "len", prefix->len);
+ vat_json_object_add_address (node, "address", &prefix->address);
}
static void vl_api_create_loopback_reply_t_handler
p +=
vl_api_string_len ((vl_api_string_t *) p) + sizeof (vl_api_string_t);
s = vl_api_from_api_to_vec ((vl_api_string_t *) p);
- vec_free (s);
-
errmsg ("build directory: %v\n", s);
+ vec_free (s);
}
vam->retval = retval;
vam->result_ready = 1;
address = vec_elt_at_index (addresses, vec_len (addresses) - 1);
clib_memcpy (&address->ip, &mp->prefix.address.un, sizeof (address->ip));
- address->prefix_length = mp->prefix.address_length;
+ address->prefix_length = mp->prefix.len;
#undef addresses
}
vat_json_object_add_uint (node, "table_index", ntohl (mp->table_index));
}
-static void vl_api_ipsec_gre_tunnel_add_del_reply_t_handler
- (vl_api_ipsec_gre_tunnel_add_del_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;
- }
- vam->regenerate_interface_table = 1;
-}
-
-static void vl_api_ipsec_gre_tunnel_add_del_reply_t_handler_json
- (vl_api_ipsec_gre_tunnel_add_del_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_flow_classify_details_t_handler
(vl_api_flow_classify_details_t * mp)
{
ip_source_and_port_range_check_add_del_reply) \
_(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL_REPLY, \
ip_source_and_port_range_check_interface_add_del_reply) \
-_(IPSEC_GRE_TUNNEL_ADD_DEL_REPLY, ipsec_gre_tunnel_add_del_reply) \
-_(IPSEC_GRE_TUNNEL_DETAILS, ipsec_gre_tunnel_details) \
_(DELETE_SUBIF_REPLY, delete_subif_reply) \
_(L2_INTERFACE_PBB_TAG_REWRITE_REPLY, l2_interface_pbb_tag_rewrite_reply) \
_(SET_PUNT_REPLY, set_punt_reply) \
M (BD_IP_MAC_ADD_DEL, mp);
- mp->bd_id = ntohl (bd_id);
+ mp->entry.bd_id = ntohl (bd_id);
mp->is_add = is_add;
- clib_memcpy (&mp->ip, &ip, sizeof (ip));
- clib_memcpy (&mp->mac, &mac, sizeof (mac));
+ clib_memcpy (&mp->entry.ip, &ip, sizeof (ip));
+ clib_memcpy (&mp->entry.mac, &mac, sizeof (mac));
S (mp);
W (ret);
(vl_api_bd_ip_mac_details_t * mp)
{
vat_main_t *vam = &vat_main;
- u8 *ip = 0;
-
- if (!mp->is_ipv6)
- ip =
- format (0, "%U", format_ip4_address, (ip4_address_t *) mp->ip_address);
- else
- ip =
- format (0, "%U", format_ip6_address, (ip6_address_t *) mp->ip_address);
print (vam->ofp,
- "\n%-5d %-7s %-20U %-30s",
- ntohl (mp->bd_id), mp->is_ipv6 ? "ip6" : "ip4",
- format_ethernet_address, mp->mac_address, ip);
-
- vec_free (ip);
+ "\n%-5d %U %U",
+ ntohl (mp->entry.bd_id),
+ format_vl_api_mac_address, mp->entry.mac,
+ format_vl_api_address, &mp->entry.ip);
}
static void vl_api_bd_ip_mac_details_t_handler_json
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_uint (node, "is_ipv6", mp->is_ipv6);
+ vat_json_object_add_uint (node, "bd_id", ntohl (mp->entry.bd_id));
vat_json_object_add_string_copy (node, "mac_address",
- format (0, "%U", format_ethernet_address,
- &mp->mac_address));
+ format (0, "%U", format_vl_api_mac_address,
+ &mp->entry.mac));
u8 *ip = 0;
- if (!mp->is_ipv6)
- ip =
- format (0, "%U", format_ip4_address, (ip4_address_t *) mp->ip_address);
- else
- ip =
- format (0, "%U", format_ip6_address, (ip6_address_t *) mp->ip_address);
+ ip = format (0, "%U", format_vl_api_address, &mp->entry.ip);
vat_json_object_add_string_copy (node, "ip_address", ip);
vec_free (ip);
}
{
unformat_input_t *i = vam->input;
vl_api_tap_create_v2_t *mp;
+#define TAP_FLAG_GSO (1 << 0)
u8 mac_address[6];
u8 random_mac = 1;
u32 id = ~0;
ip6_address_t host_ip6_gw;
u8 host_ip6_gw_set = 0;
u32 host_ip6_prefix_len = 0;
+ u8 host_mtu_set = 0;
+ u32 host_mtu_size = 0;
+ u32 tap_flags = 0;
int ret;
u32 rx_ring_sz = 0, tx_ring_sz = 0;
;
else if (unformat (i, "tx-ring-size %d", &tx_ring_sz))
;
+ else if (unformat (i, "host-mtu-size %d", &host_mtu_size))
+ host_mtu_set = 1;
+ else if (unformat (i, "no-gso"))
+ tap_flags &= ~TAP_FLAG_GSO;
+ else if (unformat (i, "gso"))
+ tap_flags |= TAP_FLAG_GSO;
else
break;
}
errmsg ("tx ring size must be 32768 or lower. ");
return -99;
}
+ if (host_mtu_set && (host_mtu_size < 64 || host_mtu_size > 65355))
+ {
+ errmsg ("host MTU size must be in between 64 and 65355. ");
+ return -99;
+ }
/* Construct the API message */
M (TAP_CREATE_V2, mp);
mp->host_ip6_addr_set = host_ip6_prefix_len != 0;
mp->rx_ring_sz = ntohs (rx_ring_sz);
mp->tx_ring_sz = ntohs (tx_ring_sz);
+ mp->host_mtu_set = host_mtu_set;
+ mp->host_mtu_size = ntohl (host_mtu_size);
+ mp->tap_flags = ntohl (tap_flags);
if (random_mac == 0)
clib_memcpy (mp->mac_address, mac_address, 6);
print (vam->ofp,
"table-id %d, prefix %U/%d",
ntohl (mp->route.table_id),
- format_ip46_address,
- mp->route.prefix.address, mp->route.prefix.address_length);
+ format_ip46_address, mp->route.prefix.address, mp->route.prefix.len);
for (i = 0; i < count; i++)
{
fp = &mp->route.paths[i];
clib_memcpy (&ip4, &mp->route.prefix.address.un.ip4, sizeof (ip4));
vat_json_object_add_ip4 (node, "prefix", ip4);
}
- vat_json_object_add_uint (node, "mask_length",
- mp->route.prefix.address_length);
+ vat_json_object_add_uint (node, "mask_length", mp->route.prefix.len);
vat_json_object_add_uint (node, "path_count", count);
for (i = 0; i < count; i++)
{
return ret;
}
-static int
-api_ipsec_gre_tunnel_add_del (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_ipsec_gre_tunnel_add_del_t *mp;
- u32 local_sa_id = 0;
- u32 remote_sa_id = 0;
- vl_api_ip4_address_t src_address;
- vl_api_ip4_address_t dst_address;
- u8 is_add = 1;
- int ret;
-
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "local_sa %d", &local_sa_id))
- ;
- else if (unformat (i, "remote_sa %d", &remote_sa_id))
- ;
- else
- if (unformat (i, "src %U", unformat_vl_api_ip4_address, &src_address))
- ;
- else
- if (unformat (i, "dst %U", unformat_vl_api_ip4_address, &dst_address))
- ;
- else if (unformat (i, "del"))
- is_add = 0;
- else
- {
- clib_warning ("parse error '%U'", format_unformat_error, i);
- return -99;
- }
- }
-
- M (IPSEC_GRE_TUNNEL_ADD_DEL, mp);
-
- mp->tunnel.local_sa_id = ntohl (local_sa_id);
- mp->tunnel.remote_sa_id = ntohl (remote_sa_id);
- clib_memcpy (mp->tunnel.src, &src_address, sizeof (src_address));
- clib_memcpy (mp->tunnel.dst, &dst_address, sizeof (dst_address));
- mp->is_add = is_add;
-
- S (mp);
- W (ret);
- return ret;
-}
-
static int
api_set_punt (vat_main_t * vam)
{
return ret;
}
-static void vl_api_ipsec_gre_tunnel_details_t_handler
- (vl_api_ipsec_gre_tunnel_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
-
- print (vam->ofp, "%11d%15U%15U%14d%14d",
- ntohl (mp->tunnel.sw_if_index),
- format_vl_api_ip4_address, mp->tunnel.src,
- format_vl_api_ip4_address, mp->tunnel.dst,
- ntohl (mp->tunnel.local_sa_id), ntohl (mp->tunnel.remote_sa_id));
-}
-
-static void
-vat_json_object_add_vl_api_ip4 (vat_json_node_t * node,
- const char *name,
- const vl_api_ip4_address_t addr)
-{
- struct in_addr ip4;
-
- clib_memcpy (&ip4, addr, sizeof (ip4));
- vat_json_object_add_ip4 (node, name, ip4);
-}
-
-static void vl_api_ipsec_gre_tunnel_details_t_handler_json
- (vl_api_ipsec_gre_tunnel_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->tunnel.sw_if_index));
- vat_json_object_add_vl_api_ip4 (node, "src", mp->tunnel.src);
- vat_json_object_add_vl_api_ip4 (node, "src", mp->tunnel.dst);
- vat_json_object_add_uint (node, "local_sa_id",
- ntohl (mp->tunnel.local_sa_id));
- vat_json_object_add_uint (node, "remote_sa_id",
- ntohl (mp->tunnel.remote_sa_id));
-}
-
-static int
-api_ipsec_gre_tunnel_dump (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_ipsec_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%15s%15s%14s%14s",
- "sw_if_index", "src_address", "dst_address",
- "local_sa_id", "remote_sa_id");
- }
-
- /* Get list of gre-tunnel interfaces */
- M (IPSEC_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_delete_subif (vat_main_t * vam)
{
else
break;
}
- if (sw_if_index == ~0 || pfx.address_length == 0)
+ if (sw_if_index == ~0 || pfx.len == 0)
{
errmsg ("address and sw_if_index must be set");
return -99;
_(bridge_flags, \
"bd_id <bridge-domain-id> [learn] [forward] [uu-flood] [flood] [arp-term] [disable]\n") \
_(tap_create_v2, \
- "id <num> [hw-addr <mac-addr>] [host-ns <name>] [rx-ring-size <num> [tx-ring-size <num>]") \
+ "id <num> [hw-addr <mac-addr>] [host-ns <name>] [rx-ring-size <num> [tx-ring-size <num>] [host-mtu-size <mtu>] [gso | no-gso]") \
_(tap_delete_v2, \
"<vpp-if-name> | sw_if_index <id>") \
_(sw_interface_tap_v2_dump, "") \
_(ip_source_and_port_range_check_interface_add_del, \
"<intf> | sw_if_index <nn> [tcp-out-vrf <id>] [tcp-in-vrf <id>]" \
"[udp-in-vrf <id>] [udp-out-vrf <id>]") \
-_(ipsec_gre_tunnel_add_del, \
- "src <addr> dst <addr> local_sa <sa-id> remote_sa <sa-id> [del]") \
-_(ipsec_gre_tunnel_dump, "[sw_if_index <nn>]") \
_(delete_subif,"<intfc> | sw_if_index <nn>") \
_(l2_interface_pbb_tag_rewrite, \
"<intfc> | sw_if_index <nn> \n" \