From e5ff5a36dd126ee57dca4e0b03da2f7704e0a4f5 Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Fri, 23 Aug 2019 22:55:18 +0200 Subject: api: enforce vla is last and fixed string type Enforce that variable length fields are the last element of API messages. Add a 'fixed' version of string type, since dealing with multiple variable length strings turned out too painful for the C language bindings. The string type is now: { string name[64]; // NUL terminated C-string. Essentially decays to u8 name[64] string name[]; // Variable length string with embedded len field (vl_api_string_t) }; The latter notation could be made available to other types as well. e.g. { vl_api_address_t addresses[]; } instead of { u32 n_addr; vl_api_address_t addresses[n_addr]; }; Type: fix Change-Id: I18fa17ef47227633752ab50453e8d20a652a9f9b Signed-off-by: Ole Troan --- src/plugins/map/map.api | 6 +++--- src/plugins/map/map_api.c | 11 +++++------ 2 files changed, 8 insertions(+), 9 deletions(-) (limited to 'src/plugins/map') diff --git a/src/plugins/map/map.api b/src/plugins/map/map.api index b15b38a3d19..b1f78124c2c 100644 --- a/src/plugins/map/map.api +++ b/src/plugins/map/map.api @@ -13,7 +13,7 @@ * limitations under the License. */ -option version = "4.0.0"; +option version = "4.1.0"; import "vnet/ip/ip_types.api"; @@ -40,7 +40,7 @@ define map_add_domain u8 psid_offset; u8 psid_length; u16 mtu; - string tag[limit=64]; + string tag[64]; }; /** \brief Reply for MAP domain add @@ -121,7 +121,7 @@ define map_domain_details u8 psid_length; u8 flags; u16 mtu; - string tag[limit=64]; + string tag[64]; }; define map_rule_dump diff --git a/src/plugins/map/map_api.c b/src/plugins/map/map_api.c index 1e50ba1b714..394ec243dbf 100644 --- a/src/plugins/map/map_api.c +++ b/src/plugins/map/map_api.c @@ -53,8 +53,8 @@ vl_api_map_add_domain_t_handler (vl_api_map_add_domain_t * mp) int rv = 0; u32 index; u8 flags = 0; - u8 *vtag = 0; - vtag = vl_api_from_api_to_vec (&mp->tag); + + u8 *tag = format (0, "%s", mp->tag); rv = map_create_domain ((ip4_address_t *) & mp->ip4_prefix.address, mp->ip4_prefix.len, @@ -62,9 +62,8 @@ vl_api_map_add_domain_t_handler (vl_api_map_add_domain_t * mp) mp->ip6_prefix.len, (ip6_address_t *) & mp->ip6_src.address, mp->ip6_src.len, mp->ea_bits_len, mp->psid_offset, - mp->psid_length, &index, ntohs (mp->mtu), flags, vtag); - vec_free (vtag); - + mp->psid_length, &index, ntohs (mp->mtu), flags, tag); + vec_free (tag); /* *INDENT-OFF* */ REPLY_MACRO2(VL_API_MAP_ADD_DOMAIN_REPLY, ({ @@ -140,7 +139,7 @@ vl_api_map_domain_dump_t_handler (vl_api_map_domain_dump_t * mp) rmp->flags = d->flags; rmp->mtu = htons(d->mtu); - vl_api_vec_to_api_string (de->tag, &rmp->tag ); + strncpy ((char *) rmp->tag, (char *) de->tag, ARRAY_LEN(rmp->tag)-1); vl_api_send_msg (reg, (u8 *) rmp); })); -- cgit 1.2.3-korg