diff options
Diffstat (limited to 'src/tools/vppapigen/node.c')
-rw-r--r-- | src/tools/vppapigen/node.c | 59 |
1 files changed, 57 insertions, 2 deletions
diff --git a/src/tools/vppapigen/node.c b/src/tools/vppapigen/node.c index 4c85a11305f..37ba4931a1f 100644 --- a/src/tools/vppapigen/node.c +++ b/src/tools/vppapigen/node.c @@ -832,6 +832,22 @@ node_vft_t node_noversion_vft = { 0, }; +void node_version_print (node_t *this) +{ + primtype_recursive_print (this, "version "); +} + +void node_version_generate (node_t *this, enum passid which, FILE *ofp) +{ + fprintf(stderr, "node_version_generate called...\n"); +} + +node_vft_t node_version_vft = { + node_version_print, + node_version_generate, + 0, +}; + void node_uword_print (node_t *this) { primtype_recursive_print(this, "uword "); @@ -866,6 +882,7 @@ node_vft_t *the_vft[NODE_N_TYPES] = { &node_vector_vft, &node_complex_vft, &node_noversion_vft, + &node_version_vft, &node_uword_vft, }; @@ -1133,7 +1150,8 @@ void generate_top_boilerplate(FILE *fp) fprintf (fp, "#if defined(vl_msg_id)||defined(vl_union_id)||"); fprintf (fp, "defined(vl_printfun) \\\n ||defined(vl_endianfun)||"); fprintf (fp, " defined(vl_api_version)||defined(vl_typedefs) \\\n"); - fprintf (fp, " ||defined(vl_msg_name)||defined(vl_msg_name_crc_list)\n"); + fprintf (fp, " ||defined(vl_msg_name)||defined(vl_msg_name_crc_list) \\\n"); + fprintf (fp, " ||defined(vl_api_version_tuple)\n"); fprintf (fp, "/* ok, something was selected */\n"); fprintf (fp, "#else\n"); fprintf (fp, "#warning no content included from %s\n", input_filename); @@ -1144,7 +1162,8 @@ void generate_top_boilerplate(FILE *fp) void generate_bottom_boilerplate(FILE *fp) { - fprintf (fp, "\n#ifdef vl_api_version\n"); + fprintf(fp, "/****** API CRC (whole file) *****/\n\n"); + fprintf (fp, "#ifdef vl_api_version\n"); if (dont_output_version) { fprintf (fp, "/* WARNING: API FILE VERSION CHECK DISABLED */\n"); @@ -1153,6 +1172,7 @@ void generate_bottom_boilerplate(FILE *fp) fprintf (fp, "vl_api_version(%s, 0x%08x)\n\n", fixed_name, (unsigned int)input_crc); + fprintf (fp, "#endif\n\n"); } @@ -1416,6 +1436,20 @@ void add_msg_ids(YYSTYPE a1) } } +/* + * add_scalar_vbl (char *name) + */ +YYSTYPE add_version (YYSTYPE a1, YYSTYPE a2, YYSTYPE a3) +{ + node_t *np; + + np = make_node(NODE_VERSION); + np->data[0] = (void *) a1; + np->data[1] = (void *) a2; + np->data[2] = (void *) a3; + return ((YYSTYPE) np); +} + void generate_python_msg_definitions(YYSTYPE a1, FILE *fp) { node_t *np = (node_t *)a1; @@ -1517,6 +1551,26 @@ void generate_json(YYSTYPE a1, FILE *fp) fprintf (fp, "}\n"); } +void generate_version_tuple(YYSTYPE a1, FILE *fp) +{ + node_t *this = (node_t *)a1; + + fprintf(fp, "/****** Version tuple *****/\n\n"); + + fprintf(fp, "#ifdef vl_api_version_tuple\n\n"); + + /* Walk the top-level node-list */ + while (this) { + if (this->type == NODE_VERSION) { + fprintf (fp, "vl_api_version_tuple(%s, %d, %d, %d)\n", + fixed_name, IDATA0, IDATA1, IDATA2); + } + this = this->peer; + } + + fprintf(fp, "\n#endif /* vl_api_version_tuple */\n\n"); +} + void generate(YYSTYPE a1) { if (dump_tree) { @@ -1535,6 +1589,7 @@ void generate(YYSTYPE a1) generate_uniondefs(a1, ofp); generate_printfun(a1, ofp); generate_endianfun(a1, ofp); + generate_version_tuple(a1, ofp); generate_bottom_boilerplate(ofp); } |