Sample plugin: Add sample plugin documentation

Added some user documentation to sample plugin.

Change-Id: I518910f80499307e8fcac8dcef7baaeab5ea8e35
Signed-off-by: Ray Kinsella <ray.kinsella@intel.com>
This commit is contained in:
Ray Kinsella
2017-06-08 15:54:19 +01:00
committed by Chris Luke
parent 7d5fae861e
commit 583dc8d3e2
5 changed files with 92 additions and 10 deletions

View File

@ -45,7 +45,7 @@ Directory name | Description
@ref src/vppinfra | VPP core library
test | Unit tests
@ref src/vpp/api | Not-yet-relocated API bindings
@ref src/examples | VPP example code
## Getting started

View File

@ -74,8 +74,7 @@ DOXY_INPUT := $(subst $(WS_ROOT)/,,$(DOXY_INPUT))
# These must be left-anchored paths for the regexp below to work.
DOXY_EXCLUDE ?= \
$(DOXY_SRC)/vlib/buffer.c \
$(DOXY_SRC)/vpp-api/lua \
$(DOXY_SRC)/examples/sample-plugin
$(DOXY_SRC)/vpp-api/lua
# Generate a regexp for filenames to exclude
DOXY_EXCLUDE_REGEXP = ($(subst .,\.,$(shell echo '$(strip $(DOXY_EXCLUDE))' | sed -e 's/ /|/g')))

View File

@ -16,3 +16,4 @@ Several modules provide operational, dataplane-user focused documentation.
- @subpage span_doc
- @subpage srv6_doc
- @subpage srmpls_doc
- @subpage sample_plugin_doc

View File

@ -12,10 +12,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
*------------------------------------------------------------------
* sample.c - simple MAC-swap API / debug CLI handling
*------------------------------------------------------------------
/**
* @file
* @brief Sample Plugin, plugin API / trace / CLI handling.
*/
#include <vnet/vnet.h>
@ -65,7 +64,11 @@ VLIB_PLUGIN_REGISTER () = {
};
/* *INDENT-ON* */
/* Action function shared between message handler and debug CLI */
/**
* @brief Enable/disable the macswap plugin.
*
* Action function shared between message handler and debug CLI.
*/
int sample_macswap_enable_disable (sample_main_t * sm, u32 sw_if_index,
int enable_disable)
@ -135,6 +138,9 @@ macswap_enable_disable_command_fn (vlib_main_t * vm,
return 0;
}
/**
* @brief CLI command to enable/disable the sample macswap plugin.
*/
VLIB_CLI_COMMAND (sr_content_command, static) = {
.path = "sample macswap",
.short_help =
@ -142,7 +148,9 @@ VLIB_CLI_COMMAND (sr_content_command, static) = {
.function = macswap_enable_disable_command_fn,
};
/* API message handler */
/**
* @brief Plugin API message handler.
*/
static void vl_api_sample_macswap_enable_disable_t_handler
(vl_api_sample_macswap_enable_disable_t * mp)
{
@ -156,7 +164,9 @@ static void vl_api_sample_macswap_enable_disable_t_handler
REPLY_MACRO(VL_API_SAMPLE_MACSWAP_ENABLE_DISABLE_REPLY);
}
/* Set up the API message handling tables */
/**
* @brief Set up the API message handling tables.
*/
static clib_error_t *
sample_plugin_api_hookup (vlib_main_t *vm)
{
@ -188,6 +198,9 @@ setup_message_id_table (sample_main_t * sm, api_main_t *am)
#undef _
}
/**
* @brief Initialize the sample plugin.
*/
static clib_error_t * sample_init (vlib_main_t * vm)
{
sample_main_t * sm = &sample_main;
@ -214,6 +227,9 @@ static clib_error_t * sample_init (vlib_main_t * vm)
VLIB_INIT_FUNCTION (sample_init);
/**
* @brief Hook the sample plugin into the VPP graph hierarchy.
*/
VNET_FEATURE_INIT (sample, static) =
{
.arc_name = "device-input",

View File

@ -0,0 +1,66 @@
# Sample plugin for VPP {#sample_plugin_doc}
## Overview
This is the VPP sample plugin demonstrates how to create a new plugin that integrates
with VPP. The sample code implements a trival macswap algorithim that demonstrates plugin
runtime integration with the VPP graph hierachy, api and cli.
For deeper dive information see the annotations in the sample code itself. See [sample.c](@ref sample.c)
## How to build and run the sample plugin.
Now (re)build VPP.
$ make wipe
Define environmental variable 'VPP_WITH_SAMPLE_PLUGIN=yes' with a process scope
$ VPP_WITH_SAMPLE_PLUGIN=yes make build
or a session scope, and build VPP.
$ export VPP_WITH_SAMPLE_PLUGIN=yes
& make build
Now run VPP and make sure the plugin is loaded.
$ make run
...
load_one_plugin:184: Loaded plugin: memif_plugin.so (Packet Memory Interface (experimetal))
load_one_plugin:184: Loaded plugin: sample_plugin.so (Sample of VPP Plugin)
load_one_plugin:184: Loaded plugin: snat_plugin.so (Network Address Translation)
...
DBGvpp#
## How to create a new plugin
To create a new plugin based on the sample plugin, copy and rename the sample plugin directory and automake config.
cp -r src/examples/sample-plugin/sample src/plugins/newplugin
cp src/examples/sample-plugin/sample.am src/plugins/newplugin.am
Add the following entry to the plugins section of `src/configure.ac`.
PLUGIN_ENABLED(newplugin)
Add the following entry to the plugins section of `src/plugins/Makefile.am`
if ENABLE_NEWPLUGIN
include newplugin.am
endif
Now (re)build VPP.
$ make wipe
$ make build
## Configuration
To enable the sample plugin
sample macswap <interface name>
To disable the sample plugin
sample macswap <interface name> disable