From a8691754d2f7cdd960c3d8dc5fbff6367e9c36b8 Mon Sep 17 00:00:00 2001 From: Andrej Kozemcak Date: Wed, 27 Jul 2016 10:33:38 +0200 Subject: VAT add_locator_set api support multiple locators Change-Id: I22df3d4407bd7fdd953783f00605380a2d6fb46e Signed-off-by: Andrej Kozemcak --- vpp-api-test/vat/api_format.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'vpp-api-test/vat') diff --git a/vpp-api-test/vat/api_format.c b/vpp-api-test/vat/api_format.c index 3b2c91cf..a2200660 100644 --- a/vpp-api-test/vat/api_format.c +++ b/vpp-api-test/vat/api_format.c @@ -10488,6 +10488,14 @@ static int api_get_node_graph (vat_main_t * vam) W; } +/** Used for transferring locators via VPP API */ +typedef CLIB_PACKED(struct +{ + u32 sw_if_index; /**< locator sw_if_index */ + u8 priority; /**< locator priority */ + u8 weight; /**< locator weight */ +}) ls_locator_t; + static int api_lisp_add_del_locator_set(vat_main_t * vam) { @@ -10497,6 +10505,8 @@ api_lisp_add_del_locator_set(vat_main_t * vam) u8 is_add = 1; u8 *locator_set_name = NULL; u8 locator_set_name_set = 0; + ls_locator_t locator, * locators = 0; + u32 sw_if_index, priority, weight; /* Parse args required to build the message */ while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { @@ -10504,18 +10514,32 @@ api_lisp_add_del_locator_set(vat_main_t * vam) is_add = 0; } else if (unformat(input, "locator-set %s", &locator_set_name)) { locator_set_name_set = 1; + } else if (unformat(input, "sw_if_index %u p %u w %u", + &sw_if_index, &priority, &weight)) { + locator.sw_if_index = htonl(sw_if_index); + locator.priority = priority; + locator.weight = weight; + vec_add1(locators, locator); + } else if (unformat(input, "iface %U p %u w %u", unformat_sw_if_index, + vam, &sw_if_index, &priority, &weight)) { + locator.sw_if_index = htonl(sw_if_index); + locator.priority = priority; + locator.weight = weight; + vec_add1(locators, locator); } else break; } if (locator_set_name_set == 0) { errmsg ("missing locator-set name"); + vec_free(locators); return -99; } if (vec_len(locator_set_name) > 64) { errmsg ("locator-set name too long\n"); vec_free(locator_set_name); + vec_free(locators); return -99; } vec_add1(locator_set_name, 0); @@ -10528,6 +10552,11 @@ api_lisp_add_del_locator_set(vat_main_t * vam) vec_len(locator_set_name)); vec_free(locator_set_name); + mp->locator_num = vec_len (locators); + clib_memcpy (mp->locators, locators, + (sizeof (ls_locator_t) * vec_len (locators))); + vec_free (locators); + /* send it... */ S; @@ -13147,7 +13176,9 @@ _(trace_profile_add, "id trace-type <0x1f|0x3|0x9|0x11|0x19> " \ _(trace_profile_apply, "id /" \ " vrf_id add | pop | none") \ _(trace_profile_del, "") \ -_(lisp_add_del_locator_set, "locator-set [del]") \ +_(lisp_add_del_locator_set, "locator-set [iface |"\ + " sw_if_index p " \ + "w ] [del]") \ _(lisp_add_del_locator, "locator-set " \ "iface | sw_if_index " \ "p w [del]") \ -- cgit 1.2.3-korg