aboutsummaryrefslogtreecommitdiffstats
path: root/vpp-api-test/vat/api_format.c
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2016-11-28 11:41:35 -0500
committerDave Wallace <dwallacelf@gmail.com>2016-12-01 22:27:31 +0000
commit7be864ad0d8e3b139a277fb4a0234480f0cc3daa (patch)
tree75e69823c8cca3b780f27b54f2753f4ba7a987a5 /vpp-api-test/vat/api_format.c
parente245d5ecef9a7b0969d160943b0a817c46e09f71 (diff)
Add a 64-byte interface "tag" for vhost and tap interfaces
This patch should dispose of spurious objections around interface tag requirements, currently in use as excuses not to support the vpp ML2 plugin. Add "u8 tag[64];" to the sw_interface_details message sent by vpp to control-plane clients. Add u8 tag[64] to the create_vhost_user_if and tap_connect APIs. Added debug CLI to set/show/clear the interface tag on any vnet sw interface. Added the sw_interface_tag_add_del API to set/clear tags on any vnet sw interface. There can be no expectation of "tag atomicity" with respect to physical hardware. Vpp discovers devices before establishing a control-plane connection. This patch upload verifies using the csit oper-161128 branch Change-Id: If8520119e7a586c5ccf0fdda82484ac205622855 Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'vpp-api-test/vat/api_format.c')
-rw-r--r--vpp-api-test/vat/api_format.c80
1 files changed, 76 insertions, 4 deletions
diff --git a/vpp-api-test/vat/api_format.c b/vpp-api-test/vat/api_format.c
index 448ae75c3ae..958f75f5fa0 100644
--- a/vpp-api-test/vat/api_format.c
+++ b/vpp-api-test/vat/api_format.c
@@ -3547,7 +3547,8 @@ _(ip_source_and_port_range_check_interface_add_del_reply)\
_(delete_subif_reply) \
_(l2_interface_pbb_tag_rewrite_reply) \
_(punt_reply) \
-_(feature_enable_disable_reply)
+_(feature_enable_disable_reply) \
+_(sw_interface_tag_add_del_reply)
#define _(n) \
static void vl_api_##n##_t_handler \
@@ -3791,7 +3792,8 @@ _(L2_INTERFACE_PBB_TAG_REWRITE_REPLY, l2_interface_pbb_tag_rewrite_reply) \
_(PUNT_REPLY, punt_reply) \
_(IP_FIB_DETAILS, ip_fib_details) \
_(IP6_FIB_DETAILS, ip6_fib_details) \
-_(FEATURE_ENABLE_DISABLE_REPLY, feature_enable_disable_reply)
+_(FEATURE_ENABLE_DISABLE_REPLY, feature_enable_disable_reply) \
+_(SW_INTERFACE_TAG_ADD_DEL_REPLY, sw_interface_tag_add_del_reply)
/* M: construct, but don't yet send a message */
@@ -5629,6 +5631,7 @@ api_tap_connect (vat_main_t * vam)
u8 random_mac = 1;
u8 name_set = 0;
u8 *tap_name;
+ u8 *tag = 0;
memset (mac_address, 0, sizeof (mac_address));
@@ -5643,6 +5646,7 @@ api_tap_connect (vat_main_t * vam)
random_mac = 1;
else if (unformat (i, "tapname %s", &tap_name))
name_set = 1;
+ else if (unformat (i, "tag %s", &tag));
else
break;
}
@@ -5655,16 +5659,28 @@ api_tap_connect (vat_main_t * vam)
if (vec_len (tap_name) > 63)
{
errmsg ("tap name too long\n");
+ return -99;
}
vec_add1 (tap_name, 0);
+ if (vec_len (tag) > 63)
+ {
+ errmsg ("tag too long\n");
+ return -99;
+ }
+ vec_add1 (tag, 0);
+
/* Construct the API message */
M (TAP_CONNECT, tap_connect);
mp->use_random_mac = random_mac;
clib_memcpy (mp->mac_address, mac_address, 6);
clib_memcpy (mp->tap_name, tap_name, vec_len (tap_name));
+ if (tag)
+ clib_memcpy (mp->tag, tag, vec_len (tag));
+
vec_free (tap_name);
+ vec_free (tag);
/* send it... */
S;
@@ -10666,6 +10682,7 @@ api_create_vhost_user_if (vat_main_t * vam)
u32 custom_dev_instance = ~0;
u8 hwaddr[6];
u8 use_custom_mac = 0;
+ u8 *tag = 0;
/* Shut up coverity */
memset (hwaddr, 0, sizeof (hwaddr));
@@ -10682,6 +10699,8 @@ api_create_vhost_user_if (vat_main_t * vam)
use_custom_mac = 1;
else if (unformat (i, "server"))
is_server = 1;
+ else if (unformat (i, "tag %s", &tag))
+ ;
else
break;
}
@@ -10711,6 +10730,9 @@ api_create_vhost_user_if (vat_main_t * vam)
}
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;
W;
@@ -16410,6 +16432,54 @@ api_feature_enable_disable (vat_main_t * vam)
}
static int
+api_sw_interface_tag_add_del (vat_main_t * vam)
+{
+ unformat_input_t *i = vam->input;
+ vl_api_sw_interface_tag_add_del_t *mp;
+ f64 timeout;
+ u32 sw_if_index = ~0;
+ u8 *tag = 0;
+ u8 enable = 1;
+
+ while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (i, "tag %s", &tag))
+ ;
+ if (unformat (i, "%U", unformat_sw_if_index, vam, &sw_if_index))
+ ;
+ else if (unformat (i, "sw_if_index %d", &sw_if_index))
+ ;
+ else if (unformat (i, "del"))
+ enable = 0;
+ else
+ break;
+ }
+
+ if (sw_if_index == ~0)
+ {
+ errmsg ("missing interface name or sw_if_index\n");
+ return -99;
+ }
+
+ if (enable && (tag == 0))
+ {
+ errmsg ("no tag specified\n");
+ return -99;
+ }
+
+ /* Construct the API message */
+ M (SW_INTERFACE_TAG_ADD_DEL, sw_interface_tag_add_del);
+ mp->sw_if_index = ntohl (sw_if_index);
+ mp->is_add = enable;
+ if (enable)
+ strncpy ((char *) mp->tag, (char *) tag, ARRAY_LEN (mp->tag) - 1);
+ vec_free (tag);
+
+ S;
+ W;
+}
+
+static int
q_or_quit (vat_main_t * vam)
{
longjmp (vam->jump_buf, 1);
@@ -16807,7 +16877,7 @@ _(l2_flags, \
_(bridge_flags, \
"bd_id <bridge-domain-id> [learn] [forward] [uu-flood] [flood] [arp-term] [disable]\n") \
_(tap_connect, \
- "tapname <name> mac <mac-addr> | random-mac") \
+ "tapname <name> mac <mac-addr> | random-mac [tag <string>]") \
_(tap_modify, \
"<vpp-if-name> | sw_if_index <id> tapname <name> mac <mac-addr> | random-mac") \
_(tap_delete, \
@@ -17085,7 +17155,9 @@ _(flow_classify_dump, "type [ip4|ip6]") \
_(ip_fib_dump, "") \
_(ip6_fib_dump, "") \
_(feature_enable_disable, "arc_name <arc_name> " \
- "feature_name <feature_name> <intfc> | sw_if_index <nn> [disable]")
+ "feature_name <feature_name> <intfc> | sw_if_index <nn> [disable]") \
+_(sw_interface_tag_add_del, "<intfc> | sw_if_index <nn> tag <text>" \
+"[disable]")
/* List of command functions, CLI names map directly to functions */
#define foreach_cli_function \