X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=build-root%2Femacs-lisp%2Fplugin-main-skel.el;h=46615c311c7213ecfeb08deb4e67156007a9f5db;hb=fed79e83910459ed700615d2a5a24024f835a66c;hp=0c9cd512e60ec8a17cf4bf5b279502c40be2c755;hpb=ca46d8c501079414238d998a126cecbabaae138c;p=vpp.git diff --git a/build-root/emacs-lisp/plugin-main-skel.el b/build-root/emacs-lisp/plugin-main-skel.el index 0c9cd512e60..46615c311c7 100644 --- a/build-root/emacs-lisp/plugin-main-skel.el +++ b/build-root/emacs-lisp/plugin-main-skel.el @@ -21,9 +21,9 @@ nil '(if (not (boundp 'plugin-name)) (setq plugin-name (read-string "Plugin name: "))) '(setq PLUGIN-NAME (upcase plugin-name)) -" -/* - * " plugin-name ".c - skeleton vpp engine plug-in +'(setq capital-oh-en "ON") +"/* + * " plugin-name ".c - skeleton vpp engine plug-in * * Copyright (c) * Licensed under the Apache License, Version 2.0 (the \"License\"); @@ -46,24 +46,25 @@ nil #include #include #include +#include /* define message IDs */ #include <" plugin-name "/" plugin-name "_msg_enum.h> /* define message structures */ #define vl_typedefs -#include <" plugin-name "/" plugin-name "_all_api_h.h> +#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> +#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> +#include <" plugin-name "/" plugin-name "_all_api_h.h> #undef vl_printfun /* Get the API version number */ @@ -71,7 +72,7 @@ nil #include <" plugin-name "/" plugin-name "_all_api_h.h> #undef vl_api_version -/* +/* * A handy macro to set up a message reply. * Assumes that the following variables are available: * mp - pointer to request message @@ -100,38 +101,16 @@ do { \\ #define foreach_" plugin-name "_plugin_api_msg \\ _(" PLUGIN-NAME "_ENABLE_DISABLE, " plugin-name "_enable_disable) -/* - * This routine exists to convince the vlib plugin framework that - * we haven't accidentally copied a random .dll into the plugin directory. - * - * Also collects global variable pointers passed from the vpp engine - */ - -clib_error_t * -vlib_plugin_register (vlib_main_t * vm, vnet_plugin_handoff_t * h, - int from_early_init) -{ - " plugin-name "_main_t * sm = &" plugin-name "_main; - clib_error_t * error = 0; - - sm->vlib_main = vm; - sm->vnet_main = h->vnet_main; - sm->ethernet_main = h->ethernet_main; - - return error; -} - /* Action function shared between message handler and debug CLI */ int " plugin-name "_enable_disable (" plugin-name "_main_t * sm, u32 sw_if_index, int enable_disable) { vnet_sw_interface_t * sw; - int rv; - u32 node_index = enable_disable ? " plugin-name "_node.index : ~0; + int rv = 0; /* Utterly wrong? */ - if (pool_is_free_index (sm->vnet_main->interface_main.sw_interfaces, + if (pool_is_free_index (sm->vnet_main->interface_main.sw_interfaces, sw_if_index)) return VNET_API_ERROR_INVALID_SW_IF_INDEX; @@ -139,16 +118,10 @@ int " plugin-name "_enable_disable (" plugin-name "_main_t * sm, u32 sw_if_index sw = vnet_get_sw_interface (sm->vnet_main, sw_if_index); if (sw->type != VNET_SW_INTERFACE_TYPE_HARDWARE) return VNET_API_ERROR_INVALID_SW_IF_INDEX; - - /* - * Redirect pkts from the driver to the macswap node. - * Returns VNET_API_ERROR_UNIMPLEMENTED if the h/w driver - * doesn't implement the API. - * - * Node_index = ~0 => shut off redirection - */ - rv = vnet_hw_interface_rx_redirect_to_node (sm->vnet_main, sw_if_index, - node_index); + + vnet_feature_enable_disable (\"device-input\", \"" plugin-name "\", + sw_if_index, enable_disable, 0, 0); + return rv; } @@ -160,30 +133,32 @@ static clib_error_t * " plugin-name "_main_t * sm = &" plugin-name "_main; u32 sw_if_index = ~0; int enable_disable = 1; - + int rv; - 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)) - ; - else - break; + 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)) + ; + else + break; } 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); - switch(rv) { + switch(rv) + { case 0: break; case VNET_API_ERROR_INVALID_SW_IF_INDEX: - return clib_error_return + return clib_error_return (0, \"Invalid interface, only works on physical ports\"); break; @@ -194,16 +169,19 @@ static clib_error_t * default: return clib_error_return (0, \"" plugin-name "_enable_disable returned %d\", rv); - } + } return 0; } -VLIB_CLI_COMMAND (" plugin-name "_enable_disable_command, static) = { - .path = \"" plugin-name " enable-disable\", - .short_help = - \"" plugin-name " enable-disable [disable]\", - .function = " plugin-name "_enable_disable_command_fn, +/* *INDENT-OFF* */ +VLIB_CLI_COMMAND (" plugin-name "_enable_disable_command, static) = +{ + .path = \"" plugin-name " enable-disable\", + .short_help = + \"" plugin-name " enable-disable [disable]\", + .function = " plugin-name "_enable_disable_command_fn, }; +/* *INDENT-ON* */ /* API message handler */ static void vl_api_" plugin-name "_enable_disable_t_handler @@ -213,9 +191,9 @@ static void vl_api_" plugin-name "_enable_disable_t_handler " plugin-name "_main_t * sm = &" plugin-name "_main; int rv; - rv = " plugin-name "_enable_disable (sm, ntohl(mp->sw_if_index), + rv = " plugin-name "_enable_disable (sm, ntohl(mp->sw_if_index), (int) (mp->enable_disable)); - + REPLY_MACRO(VL_API_" PLUGIN-NAME "_ENABLE_DISABLE_REPLY); } @@ -231,13 +209,26 @@ static clib_error_t * vl_noop_handler, \\ vl_api_##n##_t_endian, \\ vl_api_##n##_t_print, \\ - sizeof(vl_api_##n##_t), 1); + 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 _ +} + static clib_error_t * " plugin-name "_init (vlib_main_t * vm) { " plugin-name "_main_t * sm = &" plugin-name "_main; @@ -247,16 +238,43 @@ static clib_error_t * " plugin-name "_init (vlib_main_t * vm) 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 + sm->msg_id_base = vl_msg_api_get_msg_ids ((char *) name, VL_MSG_FIRST_AVAILABLE); error = " plugin-name "_plugin_api_hookup (vm); + /* Add our API messages to the global name_crc hash table */ + setup_message_id_table (sm, &api_main); + vec_free(name); return error; } VLIB_INIT_FUNCTION (" plugin-name "_init); + +/* *INDENT-OFF* */ +VNET_FEATURE_INIT (" plugin-name ", static) = +{ + .arc_name = \"device-input\", + .node_name = \"" plugin-name "\", + .runs_before = VNET_FEATURES (\"ethernet-input\"), +}; +/* *INDENT-ON */ + +/* *INDENT-OFF* */ +VLIB_PLUGIN_REGISTER () = +{ + .version = VPP_BUILD_VER, +}; +/* *INDENT-ON* */ + +/* + * fd.io coding-style-patch-verification: " capital-oh-en " + * + * Local Variables: + * eval: (c-set-style \"gnu\") + * End: + */ ")