'u32': '%u',
'i32': '%ld',
'u64': '%llu',
- 'i64': '%llu',
+ 'i64': '%lld',
'f64': '%.2f'}
noprint_fields = {'_vl_msg_id': None,
if o.modern_vla:
write(' if (vl_api_string_len(&a->{f}) > 0) {{\n'
.format(f=o.fieldname))
- write(' s = format(s, "\\n%U{f}: %.*s", '
+ write(' s = format(s, "\\n%U{f}: %U", '
'format_white_space, indent, '
- 'vl_api_string_len(&a->{f}) - 1, '
- 'vl_api_from_api_string(&a->{f}));\n'.format(f=o.fieldname))
+ 'vl_api_format_string, (&a->{f}));\n'.format(f=o.fieldname))
write(' } else {\n')
write(' s = format(s, "\\n%U{f}:", '
'format_white_space, indent);\n'.format(f=o.fieldname))
'u16': 'clib_net_to_host_u16',
'u32': 'clib_net_to_host_u32',
'u64': 'clib_net_to_host_u64',
- 'i16': 'clib_net_to_host_u16',
- 'i32': 'clib_net_to_host_u32',
- 'i64': 'clib_net_to_host_u64',
- 'f64': 'clib_net_to_host_u64',
+ 'i16': 'clib_net_to_host_i16',
+ 'i32': 'clib_net_to_host_i32',
+ 'i64': 'clib_net_to_host_i64',
+ 'f64': 'clib_net_to_host_f64',
}
output += "/***** manual: vl_api_%s_t_endian *****/\n\n" % t.name
continue
-
if t.__class__.__name__ == 'Using':
output += signature.format(name=t.name)
if ('length' in t.alias and t.alias['length'] and
write(' VL_MSG_FIRST_AVAILABLE\n')
write('}} vl_api_{}_enum_t;\n'.format(module))
+
#
# Generate separate API _types file.
#
write('} vl_api_%s_t;\n' % o.name)
+ for t in s['Define']:
+ write('#define VL_API_{ID}_CRC "{n}_{crc:08x}"\n'
+ .format(n=t.name, ID=t.name.upper(), crc=t.crc))
+
write("\n#endif\n")
write(hdr.format(module=module))
write('static u16\n')
write('setup_message_id_table (void) {\n')
- write(' api_main_t *am = &api_main;\n')
+ write(' api_main_t *am = my_api_main;\n')
write(' u16 msg_id_base = vl_msg_api_get_msg_ids ("{}_{crc:08x}", VL_MSG_FIRST_AVAILABLE);\n'
.format(module, crc=file_crc))
except:
continue
if d.manual_print:
- write('/* Manual definition requested for: vl_api_{n}_t_hander() */\n'
+ write('/* Manual definition requested for: vl_api_{n}_t_handler() */\n'
.format(n=s.reply))
continue
if not define_hash[s.caller].autoreply:
- write('/* Only autoreply is supported (vl_api_{n}_t_hander()) */\n'
+ write('/* Only autoreply is supported (vl_api_{n}_t_handler()) */\n'
.format(n=s.reply))
continue
+ write('#ifndef VL_API_{n}_T_HANDLER\n'.format(n=s.reply.upper()))
write('static void\n')
write('vl_api_{n}_t_handler (vl_api_{n}_t * mp) {{\n'.format(n=s.reply))
write(' vat_main_t * vam = {}_test_main.vat_main;\n'.format(module))
write(' vam->result_ready = 1;\n')
write(' }\n')
write('}\n')
+ write('#endif\n')
+
+ for e in s.events:
+ if define_hash[e].manual_print:
+ continue
+ write('static void\n')
+ write('vl_api_{n}_t_handler (vl_api_{n}_t * mp) {{\n'.format(n=e))
+ write(' vl_print(0, "{n} event called:");\n'.format(n=e))
+ write(' vl_api_{n}_t_print(mp, 0);\n'.format(n=e))
+ write('}\n')
write('static void\n')
write('setup_message_id_table (vat_main_t * vam, u16 msg_id_base) {\n')
except:
pass
+ # Events
+ for e in s.events:
+ write(' vl_msg_api_set_handlers(VL_API_{ID} + msg_id_base, "{n}",\n'
+ ' vl_api_{n}_t_handler, vl_noop_handler,\n'
+ ' vl_api_{n}_t_endian, vl_api_{n}_t_print,\n'
+ ' sizeof(vl_api_{n}_t), 1);\n'
+ .format(n=e, ID=e.upper()))
+
write('}\n')
write('clib_error_t * vat_plugin_register (vat_main_t *vam)\n')
write(' if (mainp->msg_id_base == (u16) ~0)\n')
write(' return clib_error_return (0, "{} plugin not loaded...");\n'.format(module))
write(' setup_message_id_table (vam, mainp->msg_id_base);\n')
+ write('#ifdef VL_API_LOCAL_SETUP_MESSAGE_ID_TABLE\n')
+ write(' VL_API_LOCAL_SETUP_MESSAGE_ID_TABLE(vam);\n')
+ write('#endif\n')
write(' return 0;\n')
write('}\n')