.. _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 To disable the sample plugin :: sample macswap disable