From 3ae9f5a90ac23ceaa1d5052cfdab417c1ef8dfdc Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Wed, 9 Oct 2019 12:39:32 +0200 Subject: [PATCH] memif: remove api boilerplate Type: refactor Signed-off-by: Ole Troan Change-Id: Icab769607c4a5890dc80b8f2661faa7e297c2a27 --- src/plugins/memif/CMakeLists.txt | 2 - src/plugins/memif/memif.api | 3 + src/plugins/memif/memif_all_api_h.h | 22 ------ src/plugins/memif/memif_api.c | 73 ++----------------- src/plugins/memif/memif_msg_enum.h | 31 -------- src/plugins/memif/memif_test.c | 136 ++---------------------------------- src/tools/vppapigen/vppapigen_c.py | 2 + 7 files changed, 17 insertions(+), 252 deletions(-) delete mode 100644 src/plugins/memif/memif_all_api_h.h delete mode 100644 src/plugins/memif/memif_msg_enum.h diff --git a/src/plugins/memif/CMakeLists.txt b/src/plugins/memif/CMakeLists.txt index c0d6f0d6338..b86d30adb97 100644 --- a/src/plugins/memif/CMakeLists.txt +++ b/src/plugins/memif/CMakeLists.txt @@ -32,6 +32,4 @@ add_vpp_plugin(memif INSTALL_HEADERS memif.h - memif_all_api_h.h - memif_msg_enum.h ) diff --git a/src/plugins/memif/memif.api b/src/plugins/memif/memif.api index 4c4b587aac7..1f2c547c740 100644 --- a/src/plugins/memif/memif.api +++ b/src/plugins/memif/memif.api @@ -48,6 +48,7 @@ autoreply define memif_socket_filename_add_del bool is_add; /* 0 = remove, 1 = add association */ u32 socket_id; /* unique non-0 id for given socket file name */ string socket_filename[108]; /* NUL terminated filename */ + option vat_help = "[add|del] id filename "; }; /** \brief Create memory interface @@ -83,6 +84,7 @@ define memif_create bool no_zero_copy; /* disable zero copy */ vl_api_mac_address_t hw_addr; /* optional, randomly generated if zero */ string secret[24]; /* optional, default is "", max length 24 */ + option vat_help = "[id ] [socket-id ] [ring_size ] [buffer_size ] [hw_addr ] [secret ] [mode ip] "; }; /** \brief Create memory interface response @@ -108,6 +110,7 @@ autoreply define memif_delete u32 context; vl_api_interface_index_t sw_if_index; + option vat_help = ""; }; /** \brief Memory interface details structure diff --git a/src/plugins/memif/memif_all_api_h.h b/src/plugins/memif/memif_all_api_h.h deleted file mode 100644 index b4a93724848..00000000000 --- a/src/plugins/memif/memif_all_api_h.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * memif_all_api_h.h - plug-in api #include file - * - * Copyright (c) - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* Include the generated file, see BUILT_SOURCES in Makefile.am */ - -#ifdef vl_printfun -#include -#endif -#include diff --git a/src/plugins/memif/memif_api.c b/src/plugins/memif/memif_api.c index 60b9d5f75a3..00edc7ac2d7 100644 --- a/src/plugins/memif/memif_api.c +++ b/src/plugins/memif/memif_api.c @@ -30,40 +30,13 @@ #include /* define message IDs */ -#include - -/* define message structures */ -#define vl_typedefs -#include -#undef vl_typedefs - -/* define generated endian-swappers */ -#define vl_endianfun -#include -#undef vl_endianfun - -/* instantiate all the print functions we know about */ -#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) -#define vl_printfun -#include -#undef vl_printfun - -/* Get the API version number */ -#define vl_api_version(n,v) static u32 api_version=(v); -#include -#undef vl_api_version +#include +#include +#include #define REPLY_MSG_ID_BASE mm->msg_id_base #include -#define foreach_memif_plugin_api_msg \ -_(MEMIF_SOCKET_FILENAME_ADD_DEL, memif_socket_filename_add_del) \ -_(MEMIF_CREATE, memif_create) \ -_(MEMIF_DELETE, memif_delete) \ -_(MEMIF_SOCKET_FILENAME_DUMP, memif_socket_filename_dump) \ -_(MEMIF_DUMP, memif_dump) \ - - /** * @brief Message handler for memif_socket_filename_add_del API. * @param mp the vl_api_memif_socket_filename_add_del_t API message @@ -375,51 +348,15 @@ void /* *INDENT-ON* */ } -#define vl_msg_name_crc_list -#include -#undef vl_msg_name_crc_list - -static void -setup_message_id_table (memif_main_t * mm, api_main_t * am) -{ -#define _(id,n,crc) \ - vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id + mm->msg_id_base); - foreach_vl_msg_name_crc_memif; -#undef _ -} - /* Set up the API message handling tables */ +#include clib_error_t * memif_plugin_api_hookup (vlib_main_t * vm) { memif_main_t *mm = &memif_main; - api_main_t *am = &api_main; - u8 *name; - - /* Construct the API name */ - name = format (0, "memif_%08x%c", api_version, 0); /* Ask for a correctly-sized block of API message decode slots */ - mm->msg_id_base = vl_msg_api_get_msg_ids - ((char *) name, VL_MSG_FIRST_AVAILABLE); - -#define _(N,n) \ - vl_msg_api_set_handlers((VL_API_##N + mm->msg_id_base), \ - #n, \ - vl_api_##n##_t_handler, \ - vl_noop_handler, \ - vl_api_##n##_t_endian, \ - vl_api_##n##_t_print, \ - sizeof(vl_api_##n##_t), 1); - foreach_memif_plugin_api_msg; -#undef _ - - /* - * Set up the (msg_name, crc, message-id) table - */ - setup_message_id_table (mm, am); - - vec_free (name); + mm->msg_id_base = setup_message_id_table (); return 0; } diff --git a/src/plugins/memif/memif_msg_enum.h b/src/plugins/memif/memif_msg_enum.h deleted file mode 100644 index 74efee00604..00000000000 --- a/src/plugins/memif/memif_msg_enum.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * memif_msg_enum.h - vpp engine plug-in message enumeration - * - * Copyright (c) - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef included_memif_msg_enum_h -#define included_memif_msg_enum_h - -#include - -#define vl_msg_id(n,h) n, -typedef enum -{ -#include - /* We'll want to know how many messages IDs we need... */ - VL_MSG_FIRST_AVAILABLE, -} vl_msg_id_t; -#undef vl_msg_id - -#endif /* included_memif_msg_enum_h */ diff --git a/src/plugins/memif/memif_test.c b/src/plugins/memif/memif_test.c index 2dda6d35f2b..9ee0035a2d7 100644 --- a/src/plugins/memif/memif_test.c +++ b/src/plugins/memif/memif_test.c @@ -30,35 +30,11 @@ #include /* declare message IDs */ -#include - -/* Get CRC codes of the messages defined outside of this plugin */ -#define vl_msg_name_crc_list -#include -#undef vl_msg_name_crc_list - -/* define message structures */ -#define vl_typedefs -#include -#include -#undef vl_typedefs - -/* declare message handlers for each api */ - -#define vl_endianfun /* define message structures */ -#include -#undef vl_endianfun - -/* instantiate all the print functions we know about */ -#define vl_print(handle, ...) -#define vl_printfun -#include -#undef vl_printfun - -/* Get the API version number. */ -#define vl_api_version(n,v) static u32 api_version=(v); -#include -#undef vl_api_version +#include +#include +#include +#include +//#include typedef struct { @@ -70,37 +46,6 @@ typedef struct memif_test_main_t memif_test_main; -/* standard reply handlers */ -#define foreach_standard_reply_retval_handler \ -_(memif_delete_reply) - -#define _(n) \ - static void vl_api_##n##_t_handler \ - (vl_api_##n##_t * mp) \ - { \ - vat_main_t * vam = memif_test_main.vat_main; \ - i32 retval = ntohl(mp->retval); \ - if (vam->async_mode) { \ - vam->async_errors += (retval < 0); \ - } else { \ - vam->retval = retval; \ - vam->result_ready = 1; \ - } \ - } -foreach_standard_reply_retval_handler; -#undef _ - -/* - * Table of message reply handlers, must include boilerplate handlers - * we just generated - */ -#define foreach_vpe_api_reply_msg \ -_(MEMIF_CREATE_REPLY, memif_create_reply) \ -_(MEMIF_DELETE_REPLY, memif_delete_reply) \ -_(MEMIF_DETAILS, memif_details) \ -_(MEMIF_SOCKET_FILENAME_DETAILS, memif_socket_filename_details) \ -_(MEMIF_SOCKET_FILENAME_ADD_DEL_REPLY, memif_socket_filename_add_del_reply) - static uword unformat_memif_queues (unformat_input_t * input, va_list * args) { @@ -180,6 +125,7 @@ api_memif_socket_filename_add_del (vat_main_t * vam) } /* memif_socket_filename_add_del reply handler */ +#define VL_API_MEMIF_SOCKET_FILENAME_ADD_DEL_REPLY_T_HANLDER static void vl_api_memif_socket_filename_add_del_reply_t_handler (vl_api_memif_socket_filename_add_del_reply_t * mp) { @@ -434,75 +380,7 @@ static void vl_api_memif_socket_filename_details_t_handler ntohl (mp->socket_id), mp->socket_filename); } -/* - * List of messages that the api test plugin sends, - * and that the data plane plugin processes - */ -#define foreach_vpe_api_msg \ -_(memif_create, "[id ] [socket-id ] [ring_size ] " \ - "[buffer_size ] [hw_addr ] " \ - "[secret ] [mode ip] ") \ -_(memif_delete, "") \ -_(memif_dump, "") \ -_(memif_socket_filename_dump, "") \ -_(memif_socket_filename_add_del, "[add|del] id filename ") - -static void -memif_vat_api_hookup (vat_main_t * vam) -{ - memif_test_main_t *mm __attribute__ ((unused)) = &memif_test_main; - /* Hook up handlers for replies from the data plane plug-in */ -#define _(N,n) \ - vl_msg_api_set_handlers((VL_API_##N + mm->msg_id_base), \ - #n, \ - vl_api_##n##_t_handler, \ - vl_noop_handler, \ - vl_api_##n##_t_endian, \ - vl_api_##n##_t_print, \ - sizeof(vl_api_##n##_t), 1); - foreach_vpe_api_reply_msg; -#undef _ - - /* API messages we can send */ -#define _(n,h) \ - hash_set_mem (vam->function_by_name, #n, api_##n); - foreach_vpe_api_msg; -#undef _ - - /* Help strings */ -#define _(n,h) hash_set_mem (vam->help_by_name, #n, h); - foreach_vpe_api_msg; -#undef _ -} - -clib_error_t * -vat_plugin_register (vat_main_t * vam) -{ - memif_test_main_t *mm = &memif_test_main; - u8 *name; - - mm->vat_main = vam; - - /* Ask the vpp engine for the first assigned message-id */ - name = format (0, "memif_%08x%c", api_version, 0); - mm->msg_id_base = vl_client_get_first_plugin_msg_id ((char *) name); - vec_free (name); - - if (mm->msg_id_base == (u16) ~ 0) - return clib_error_return (0, "memif plugin not loaded..."); - - /* Get the control ping ID */ -#define _(id,n,crc) \ - const char *id ## _CRC __attribute__ ((unused)) = #n "_" #crc; - foreach_vl_msg_name_crc_vpe; -#undef _ - mm->ping_id = vl_msg_api_get_msg_index ((u8 *) (VL_API_CONTROL_PING_CRC)); - - if (mm->msg_id_base != (u16) ~ 0) - memif_vat_api_hookup (vam); - - return 0; -} +#include /* * fd.io coding-style-patch-verification: ON diff --git a/src/tools/vppapigen/vppapigen_c.py b/src/tools/vppapigen/vppapigen_c.py index e85a8980592..00b804dc853 100644 --- a/src/tools/vppapigen/vppapigen_c.py +++ b/src/tools/vppapigen/vppapigen_c.py @@ -661,6 +661,7 @@ def generate_c_test_plugin_boilerplate(services, defines, file_crc, module, stre write('/* Only autoreply is supported (vl_api_{n}_t_hander()) */\n' .format(n=s.reply)) continue + write('#ifndef VL_API_{n}_T_HANLDER\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)) @@ -672,6 +673,7 @@ def generate_c_test_plugin_boilerplate(services, defines, file_crc, module, stre write(' vam->result_ready = 1;\n') write(' }\n') write('}\n') + write('#endif\n') for e in s.events: if define_hash[e].manual_print: -- 2.16.6