X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fjapi%2Fjava%2Fjvpp%2Fgen%2Fjvppgen%2Fjvpp_model.py;h=16099689880886ce582db19a453e04ccdcba4a4a;hb=1f0dd7a0664bc217b7d69773574ac7eae3813bd7;hp=299796b908b3d31a6033ade29b17cf6f63930f38;hpb=cc4a5e8089967f0c266e9c5ed319c38c111004cd;p=vpp.git diff --git a/extras/japi/java/jvpp/gen/jvppgen/jvpp_model.py b/extras/japi/java/jvpp/gen/jvppgen/jvpp_model.py index 299796b908b..16099689880 100755 --- a/extras/japi/java/jvpp/gen/jvppgen/jvpp_model.py +++ b/extras/japi/java/jvpp/gen/jvppgen/jvpp_model.py @@ -17,6 +17,8 @@ import json import pprint from collections import OrderedDict +import binascii + BASE_PACKAGE = "io.fd.vpp.jvpp" @@ -303,6 +305,11 @@ def is_control_ping_reply(msg): return msg.name == u'control_ping_reply' +def crc(block): + s = str(block).encode() + return binascii.crc32(s) & 0xffffffff + + class JVppModel(object): def __init__(self, logger, json_api_files, plugin_name): self.logger = logger @@ -320,6 +327,7 @@ class JVppModel(object): types = {} self._messages = [] self._services = {} + self._aliases = {} for file_name in json_api_files: with open(file_name) as f: j = json.load(f) @@ -328,10 +336,47 @@ class JVppModel(object): types.update({d[0]: {'type': 'union', 'data': d} for d in j['unions']}) self._messages.extend(j['messages']) self._services.update(j['services']) + self._aliases.update(j['aliases']) + self._parse_types(types) + def _parse_aliases(self, types): + for alias_name in self._aliases: + alias = self._aliases[alias_name] + alias_type = {"type": "type"} + java_name_lower = _underscore_to_camelcase_lower(alias_name) + vpp_type = alias["type"] + crc_value = '0x%08x' % crc(alias_name) + if "length" in alias: + length = alias["length"] + alias_type["data"] = [ + alias_name, + [ + vpp_type, + java_name_lower, + length + ], + { + "crc": crc_value + } + ] + else: + alias_type["data"] = [ + alias_name, + [ + vpp_type, + java_name_lower + ], + { + "crc": crc_value + } + ] + + types[alias_name] = alias_type + def _parse_types(self, types): self._parse_simple_types() + self._parse_aliases(types) i = 0 while True: unresolved = {} @@ -481,6 +526,7 @@ class JVppModel(object): def _parse_field(self, field, fields): type_name = _extract_type_name(field[0]) + if type_name in self._types_by_name: if len(field) > 2: # Array field @@ -517,6 +563,7 @@ class JVppModel(object): self.messages = self._messages_by_name.values() + _ARRAY_SUFFIX = '[]'