X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp-api%2Fvapi%2Fvapi_c_gen.py;h=1a5665e5500369b2444352e2c3c8acd2ec8ee7d1;hb=f0e67d78ae23ff3d5751ea10e9e76cb6e81ba4a5;hp=b9b9aa750a8c03dda63bde01597d2b8fe40fbaff;hpb=e5ff5a36dd126ee57dca4e0b03da2f7704e0a4f5;p=vpp.git diff --git a/src/vpp-api/vapi/vapi_c_gen.py b/src/vpp-api/vapi/vapi_c_gen.py index b9b9aa750a8..1a5665e5500 100755 --- a/src/vpp-api/vapi/vapi_c_gen.py +++ b/src/vpp-api/vapi/vapi_c_gen.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 import argparse import os @@ -19,13 +19,13 @@ class CField(Field): else: return "vl_api_string_t %s;" % (self.name) else: - if self.len is not None: + if self.len is not None and type(self.len) != dict: return "%s %s[%d];" % (self.type.get_c_name(), self.name, self.len) else: return "%s %s;" % (self.type.get_c_name(), self.name) def get_swap_to_be_code(self, struct, var): - if self.len is not None: + if self.len is not None and type(self.len) != dict: if self.len > 0: return "do { unsigned i; for (i = 0; i < %d; ++i) { %s } }"\ " while(0);" % ( @@ -46,7 +46,7 @@ class CField(Field): return self.type.get_swap_to_be_code(struct, "%s" % var) def get_swap_to_host_code(self, struct, var): - if self.len is not None: + if self.len is not None and type(self.len) != dict: if self.len > 0: return "do { unsigned i; for (i = 0; i < %d; ++i) { %s } }"\ " while(0);" % ( @@ -153,6 +153,12 @@ class CSimpleType (SimpleType): 'i64': 'be64toh', 'u64': 'be64toh', } + __packed = "__attribute__((packed))" + pack_dict = { + 'i8': __packed, 'u8': __packed, + 'i16': __packed, 'u16': __packed, + } + def get_c_name(self): return self.name @@ -162,6 +168,9 @@ class CSimpleType (SimpleType): def get_swap_to_host_func_name(self): return self.swap_to_host_dict[self.name] + def get_packed_string(self): + return self.pack_dict[self.name] + def get_swap_to_be_code(self, struct, var, cast=None): x = "%s%s" % (struct, var) return "%s = %s%s(%s);" % (x, @@ -182,14 +191,18 @@ class CSimpleType (SimpleType): pass return False + def get_packed(self): + return self.pack_dict.get(self.name, "") + class CEnum(Enum): def get_c_name(self): return "vapi_enum_%s" % self.name def get_c_def(self): - return "typedef enum {\n%s\n} %s;" % ( + return "typedef enum {\n%s\n} %s %s;" % ( "\n".join([" %s = %s," % (i, j) for i, j in self.value_pairs]), + self.type.get_packed(), self.get_c_name() ) @@ -678,7 +691,7 @@ def gen_json_unified_header(parser, logger, j, io, name): orig_stdout = sys.stdout sys.stdout = io include_guard = "__included_%s" % ( - j.replace(".", "_").replace("/", "_").replace("-", "_")) + j.replace(".", "_").replace("/", "_").replace("-", "_").replace("+", "_")) print("#ifndef %s" % include_guard) print("#define %s" % include_guard) print("") @@ -692,12 +705,12 @@ def gen_json_unified_header(parser, logger, j, io, name): print("#ifdef __cplusplus") print("extern \"C\" {") print("#endif") - if name == "vpe.api.vapi.h": + if name == "memclnt.api.vapi.h": print("") print("static inline vapi_error_e vapi_send_with_control_ping " "(vapi_ctx_t ctx, void * msg, u32 context);") else: - print("#include ") + print("#include ") print("") for m in parser.messages_by_json[j].values(): print("extern vapi_msg_id_t %s;" % m.get_msg_id_name()) @@ -713,18 +726,18 @@ def gen_json_unified_header(parser, logger, j, io, name): emitted = [] for e in parser.enums_by_json[j]: emit_definition(parser, j, emitted, e) - for a in parser.aliases_by_json[j]: - emit_definition(parser, j, emitted, a) for u in parser.unions_by_json[j]: emit_definition(parser, j, emitted, u) for t in parser.types_by_json[j]: emit_definition(parser, j, emitted, t) + for a in parser.aliases_by_json[j]: + emit_definition(parser, j, emitted, a) for m in parser.messages_by_json[j].values(): emit_definition(parser, j, emitted, m) print("") - if name == "vpe.api.vapi.h": + if name == "vlib.api.vapi.h": print("%s" % vapi_send_with_control_ping) print("")