blob: 23023e21bfba44b119cb5790470cce3457ba9064 [file] [log] [blame]
.. _sample_plugin_doc:
Sample plugin for VPP
=====================
Overview
--------
This is the VPP sample plugin demonstrates how to create a new plugin
that integrates with VPP. The sample code implements a trivial macswap
algorithm that demonstrates plugin runtime integration with the VPP
graph hierarchy, api and cli.
For deeper dive information see the annotations in the sample code
itself. See `sample.c <@ref%20sample.c>`__
How to build and run the sample plugin.
---------------------------------------
Now (re)build VPP.
::
$ make wipe
Define environmental variable SAMPLE_PLUGIN=yes with a process scope
::
$ SAMPLE_PLUGIN=yes make build
or a session scope, and build VPP.
::
$ export 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: nat_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