From ff47fb64569ddbd65ef34c33e7cafc030c69a34e Mon Sep 17 00:00:00 2001 From: Paul Vinciguerra Date: Tue, 6 Aug 2019 19:58:24 -0400 Subject: [PATCH] vppapigen map: raise ValueError when fieldname is python keyword When working on the lb api, one of the field names was chosen as 'as' (application server). Since 'as' is a python keyword, the field was renamed to _1 in vpp_papi. This changeset instead fails early with a descriptive message, hopefully saving others time troubleshooting the issue. ValueError: Fieldname 'as' is a python keyword and is not accessible via the python API. Type: feature Change-Id: Ib048d97de0e392645540092e356cf8989848c947 Signed-off-by: Paul Vinciguerra --- src/plugins/map/map.api | 10 +++++----- src/plugins/map/map_api.c | 2 +- src/tools/vppapigen/vppapigen.py | 4 ++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/plugins/map/map.api b/src/plugins/map/map.api index f751f5c9ef7..b15b38a3d19 100644 --- a/src/plugins/map/map.api +++ b/src/plugins/map/map.api @@ -13,7 +13,7 @@ * limitations under the License. */ -option version = "3.1.0"; +option version = "4.0.0"; import "vnet/ip/ip_types.api"; @@ -281,19 +281,19 @@ autoreply define map_param_set_security_check /** \brief Set MAP traffic class parameters @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request - @param copy - 1 = copy packet class/TOS field, 0 = use class instead - @param class - class field value when copy == 0 + @param copy - 1 = copy packet class/TOS field, 0 = use tc_class instead + @param tc_class - class field value when copy == 0 */ autoreply define map_param_set_traffic_class { u32 client_index; u32 context; bool copy; - u8 class; + u8 tc_class; }; -/** \brief Set MAP TCP parammeters +/** \brief Set MAP TCP parameters @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request @parma tcp_mss - TCP MSS clamping value diff --git a/src/plugins/map/map_api.c b/src/plugins/map/map_api.c index 4a0834d786b..1e50ba1b714 100644 --- a/src/plugins/map/map_api.c +++ b/src/plugins/map/map_api.c @@ -523,7 +523,7 @@ static void vl_api_map_param_set_traffic_class_reply_t *rmp; int rv; - rv = map_param_set_traffic_class (mp->copy, mp->class); + rv = map_param_set_traffic_class (mp->copy, mp->tc_class); REPLY_MACRO (VL_API_MAP_PARAM_SET_TRAFFIC_CLASS_REPLY); } diff --git a/src/tools/vppapigen/vppapigen.py b/src/tools/vppapigen/vppapigen.py index 8ae991c9c95..52ffb6a18f1 100755 --- a/src/tools/vppapigen/vppapigen.py +++ b/src/tools/vppapigen/vppapigen.py @@ -5,6 +5,7 @@ import ply.lex as lex import ply.yacc as yacc import sys import argparse +import keyword import logging import binascii import os @@ -293,6 +294,9 @@ class Field(): def __init__(self, fieldtype, name, limit=None): self.type = 'Field' self.fieldtype = fieldtype + if name in keyword.kwlist: + raise ValueError("Fieldname {!r} is a python keyword and is not " + "accessible via the python API. ".format(name)) self.fieldname = name self.limit = limit -- 2.16.6