X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Femacs%2Fplugin-main-skel.el;h=e8969c85488a14a4de72acc5467b426fadf6484f;hb=7c0eb56f4;hp=8d18cff0feedcbb4208b62dab8563f76f40254e8;hpb=f4addbd03a21c6aa2a25d693cfd66988605fff36;p=vpp.git diff --git a/extras/emacs/plugin-main-skel.el b/extras/emacs/plugin-main-skel.el index 8d18cff0fee..e8969c85488 100644 --- a/extras/emacs/plugin-main-skel.el +++ b/extras/emacs/plugin-main-skel.el @@ -22,6 +22,7 @@ nil (setq plugin-name (read-string "Plugin name: "))) '(setq PLUGIN-NAME (upcase plugin-name)) '(setq capital-oh-en "ON") +'(setq main-p (concat (substring plugin-name 0 1) "mp")) "/* * " plugin-name ".c - skeleton vpp engine plug-in * @@ -46,67 +47,44 @@ nil #include #include #include +#include -/* define message IDs */ -#include <" plugin-name "/" plugin-name "_msg_enum.h> +#include <" plugin-name "/" plugin-name ".api_enum.h> +#include <" plugin-name "/" plugin-name ".api_types.h> -/* define message structures */ -#define vl_typedefs -#include <" plugin-name "/" plugin-name "_all_api_h.h> -#undef vl_typedefs - -/* define generated endian-swappers */ -#define vl_endianfun -#include <" plugin-name "/" plugin-name "_all_api_h.h> -#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 <" plugin-name "/" plugin-name "_all_api_h.h> -#undef vl_printfun - -/* Get the API version number */ -#define vl_api_version(n,v) static u32 api_version=(v); -#include <" plugin-name "/" plugin-name "_all_api_h.h> -#undef vl_api_version - -#define REPLY_MSG_ID_BASE sm->msg_id_base +#define REPLY_MSG_ID_BASE " main-p "->msg_id_base #include -extern " plugin-name "_main_t " plugin-name "_main; - -/* List of message types that this plugin understands */ - -#define foreach_" plugin-name "_plugin_api_msg \\ -_(" PLUGIN-NAME "_ENABLE_DISABLE, " plugin-name "_enable_disable) +" plugin-name "_main_t " plugin-name "_main; /* Action function shared between message handler and debug CLI */ -int " plugin-name "_enable_disable (" plugin-name "_main_t * sm, u32 sw_if_index, +int " plugin-name "_enable_disable (" plugin-name "_main_t * " main-p ", u32 sw_if_index, int enable_disable) { vnet_sw_interface_t * sw; int rv = 0; /* Utterly wrong? */ - if (pool_is_free_index (sm->vnet_main->interface_main.sw_interfaces, + if (pool_is_free_index (" main-p "->vnet_main->interface_main.sw_interfaces, sw_if_index)) return VNET_API_ERROR_INVALID_SW_IF_INDEX; /* Not a physical port? */ - sw = vnet_get_sw_interface (sm->vnet_main, sw_if_index); + sw = vnet_get_sw_interface (" main-p "->vnet_main, sw_if_index); if (sw->type != VNET_SW_INTERFACE_TYPE_HARDWARE) return VNET_API_ERROR_INVALID_SW_IF_INDEX; + " plugin-name "_create_periodic_process (" main-p "); + vnet_feature_enable_disable (\"device-input\", \"" plugin-name "\", sw_if_index, enable_disable, 0, 0); /* Send an event to enable/disable the periodic scanner process */ - vlib_process_signal_event (sm->vlib_main, " plugin-name"_periodic_node.index, - " PLUGIN-NAME"_EVENT_PERIODIC_ENABLE_DISABLE, + vlib_process_signal_event (" main-p "->vlib_main, + " main-p"->periodic_node_index, + " PLUGIN-NAME"_EVENT_PERIODIC_ENABLE_DISABLE, (uword)enable_disable); - return rv; } @@ -115,18 +93,18 @@ static clib_error_t * unformat_input_t * input, vlib_cli_command_t * cmd) { - " plugin-name "_main_t * sm = &" plugin-name "_main; + " plugin-name "_main_t * " main-p " = &" plugin-name "_main; u32 sw_if_index = ~0; int enable_disable = 1; int rv; - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { if (unformat (input, \"disable\")) enable_disable = 0; else if (unformat (input, \"%U\", unformat_vnet_sw_interface, - sm->vnet_main, &sw_if_index)) + " main-p "->vnet_main, &sw_if_index)) ; else break; @@ -135,9 +113,9 @@ static clib_error_t * if (sw_if_index == ~0) return clib_error_return (0, \"Please specify an interface...\"); - rv = " plugin-name "_enable_disable (sm, sw_if_index, enable_disable); + rv = " plugin-name "_enable_disable (" main-p ", sw_if_index, enable_disable); - switch(rv) + switch(rv) { case 0: break; @@ -159,7 +137,7 @@ static clib_error_t * } /* *INDENT-OFF* */ -VLIB_CLI_COMMAND (" plugin-name "_enable_disable_command, static) = +VLIB_CLI_COMMAND (" plugin-name "_enable_disable_command, static) = { .path = \"" plugin-name " enable-disable\", .short_help = @@ -173,68 +151,28 @@ static void vl_api_" plugin-name "_enable_disable_t_handler (vl_api_" plugin-name "_enable_disable_t * mp) { vl_api_" plugin-name "_enable_disable_reply_t * rmp; - " plugin-name "_main_t * sm = &" plugin-name "_main; + " plugin-name "_main_t * " main-p " = &" plugin-name "_main; int rv; - rv = " plugin-name "_enable_disable (sm, ntohl(mp->sw_if_index), + rv = " plugin-name "_enable_disable (" main-p ", ntohl(mp->sw_if_index), (int) (mp->enable_disable)); REPLY_MACRO(VL_API_" PLUGIN-NAME "_ENABLE_DISABLE_REPLY); } -/* Set up the API message handling tables */ -static clib_error_t * -" plugin-name "_plugin_api_hookup (vlib_main_t *vm) -{ - " plugin-name "_main_t * sm = &" plugin-name "_main; -#define _(N,n) \\ - vl_msg_api_set_handlers((VL_API_##N + sm->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_" plugin-name "_plugin_api_msg; -#undef _ - - return 0; -} - -#define vl_msg_name_crc_list -#include <" plugin-name "/" plugin-name "_all_api_h.h> -#undef vl_msg_name_crc_list - -static void -setup_message_id_table (" plugin-name "_main_t * sm, api_main_t * am) -{ -#define _(id,n,crc) \ - vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id + sm->msg_id_base); - foreach_vl_msg_name_crc_" plugin-name" ; -#undef _ -} +/* API definitions */ +#include <" plugin-name "/" plugin-name ".api.c> static clib_error_t * " plugin-name "_init (vlib_main_t * vm) { - " plugin-name "_main_t * sm = &" plugin-name "_main; + " plugin-name "_main_t * " main-p " = &" plugin-name "_main; clib_error_t * error = 0; - u8 * name; - sm->vlib_main = vm; - sm->vnet_main = vnet_get_main(); - - name = format (0, \"" plugin-name "_%08x%c\", api_version, 0); - - /* Ask for a correctly-sized block of API message decode slots */ - sm->msg_id_base = vl_msg_api_get_msg_ids - ((char *) name, VL_MSG_FIRST_AVAILABLE); - - error = " plugin-name "_plugin_api_hookup (vm); + " main-p "->vlib_main = vm; + " main-p "->vnet_main = vnet_get_main(); /* Add our API messages to the global name_crc hash table */ - setup_message_id_table (sm, &api_main); - - vec_free(name); + " main-p "->msg_id_base = setup_message_id_table (); return error; } @@ -251,7 +189,7 @@ VNET_FEATURE_INIT (" plugin-name ", static) = /* *INDENT-ON */ /* *INDENT-OFF* */ -VLIB_PLUGIN_REGISTER () = +VLIB_PLUGIN_REGISTER () = { .version = VPP_BUILD_VER, .description = \"" plugin-name " plugin description goes here\", @@ -266,4 +204,3 @@ VLIB_PLUGIN_REGISTER () = * End: */ ") -