-
Notifications
You must be signed in to change notification settings - Fork 707
VPP How_To_Build_The_Sample_Plugin
This page explains how to build the sample vpp-engine plug-in. Anything that can be done by code compiled into the VPP engine itself can also be done from a plug-in.
Test the VPP executable, if you have not done so already. Verify proper operation. We recommend that you do not try to build the sample plug-in until you verify that basic operations of the VPP application work as expected.
Copy the sample plug-in sources to the directory of your choice, and decompress the individual files.
For example:
sudo sh
cd /usr/share/doc/vpp/examples
tar cf - . | (cd /tmp; tar xf -)
cd /tmp/sample-plugin
gunzip -f *gz sample/*gz
libtoolize
aclocal
autoconf
autoheader
automake --add-missing
chmod +x configure
vpp_plugin_configure
make
sudo make install
Check to be sure that make installed sample_plugin.so in /usr/lib/vpp_plugins, and sample_test_plugin.so in /usr/lib/vpp_api_test_plugins.
It's very important to use the "vpp_plugin_configure" script, to compile the plugin with the same CFLAGS settings that were used to compile the vpp engine. Certain data structures change size dpending e.g. on "-DDPDK=[0|1]", leading to subtle misbehavior. You've been warned.
The sample plug-in (generated) Makefile installs the data-plane plug-in in /usr/lib/vpp_plugins. Similarly, it installs the API test harness plug-in in /usr/lib/vpp_api_test_plugins.
Take a look at the sample data-plane and API test client plug-in source code.
Start the VPP data-plane:
# start vpp
Note: if you start the vpp data plane manually ("# vpp unix interactive"), you should see a cheerful message of the form:
load_one_plugin:75: Loaded plugin: /usr/lib/vpp_plugins/sample_plugin.so.0.0.0
Try the sample application, which diverts all packets from specific physical interfaces to a graph node which swaps rx packet src and dst MAC addresses. To configure data plane, execute /usr/bin/vpp_api_test:
# vpp_api_test
load_one_plugin:49: Loaded plugin: /usr/lib/vpp_api_test_plugins/sample_test_plugin.so.0.0.0
vat#
Note the cheerful message which confirms that the api test tool has loaded its plug-in.
vat# dump_interface_table
# displays a list of interfaces, similar to the following:
Interface sw_if_index
GigabitEthernet2/2/0 5
GigabitEthernet2/3/0 6
GigabitEthernet2/4/0 7
GigabitEthernet2/5/0 8
GigabitEthernet2/6/0 9
GigabitEthernet2/7/0 10
local0 0
# to enable the mac-swap plugin on a specific interface:
vat# sample_macswap_enable_disable <interface-name>
# to disable the mac-swap plugin on a specific interface:
vat# sample_macswap_enable_disable <interface-name> disable
# capture a packet trace, with the swap plugin enabled
vat# exec trace add dpdk-input 10
When you inspect the packet trace, you should see something similar to the output shown below. [If the trace buffer is empty, please make sure that the interface is up...]
vat# exec show trace
# Note the "sample" trace, which demonstrates that the plugin is working
# Note also the src and dst mac addresses are swapped...
00:11:32:956278: dpdk-input
GigabitEthernet2/2/0 rx queue 0
buffer 0x18db40: current data 0, length 102, free-list 0,
totlen-nifb 0, trace 0x9
PKT MBUF: port 0, nb_segs 1, pkt_len 102
buf_len 2304, data_len 102, ol_flags 0x0
IP4: 00:55:56:b7:05:03 -> 00:50:56:b7:05:bd
ICMP: 6.0.2.2 -> 6.0.2.6
tos 0x00, ttl 64, length 84, checksum 0x47f1
fragment id 0xe2b0, flags DONT_FRAGMENT
ICMP echo_request checksum 0x245f
00:11:32:956286: sample
SAMPLE: sw_if_index 5 <================
00:11:32:956290: GigabitEthernet2/2/0-output
GigabitEthernet2/2/0
IP4: 00:50:56:b7:05:bd -> 00:55:56:b7:05:03
ICMP: 6.0.2.2 -> 6.0.2.6
tos 0x00, ttl 64, length 84, checksum 0x47f1
fragment id 0xe2b0, flags DONT_FRAGMENT
ICMP echo_request checksum 0x245f
00:11:32:956291: GigabitEthernet2/2/0-tx
GigabitEthernet2/2/0 tx queue 0
buffer 0x18db40: current data 0, length 102, free-list 0,
totlen-nifb 0, trace 0x9
IP4: 00:50:56:b7:05:bd -> 00:55:56:b7:05:03
ICMP: 6.0.2.2 -> 6.0.2.6
tos 0x00, ttl 64, length 84, checksum 0x47f1
fragment id 0xe2b0, flags DONT_FRAGMENT
ICMP echo_request checksum 0x245f
- VPP 2022 Make Test Use Case Poll
- VPP-AArch64
- VPP-ABF
- VPP Alternative Builds
- VPP API Concepts
- VPP API Versioning
- VPP-ApiChangeProcess
- VPP-ArtifactVersioning
- VPP-BIER
- VPP-Bihash
- VPP-BugReports
- VPP Build System Deep Dive
- VPP Build, Install, And Test Images
- VPP-BuildArtifactRetentionPolicy
- VPP-c2cpel
- VPP Code Walkthrough VoD
- VPP Code Walkthrough VoD Topic Index
- VPP Code Walkthrough VoDs
- VPP-CodeStyleConventions
- VPP-CodingTips
- VPP Command Line Arguments
- VPP Command Line Interface CLI Guide
- VPP-CommitMessages
- VPP-Committers-SMEs
- VPP-CommitterTasks-ApiFreeze
- VPP CommitterTasks Compare API Changes
- VPP-CommitterTasks-CutPointRelease
- VPP-CommitterTasks-CutRelease
- VPP-CommitterTasks-FinalReleaseCandidate
- VPP-CommitterTasks-PullThrottleBranch
- VPP-CommitterTasks-ReleasePlan
- VPP Configuration Tool
- VPP Configure An LW46 MAP E Terminator
- VPP Configure VPP As A Router Between Namespaces
- VPP Configure VPP TAP Interfaces For Container Routing
- VPP-CoreFileMismatch
- VPP-cpel
- VPP-cpeldump
- VPP-CurrentData
- VPP-DHCPKit
- VPP-DHCPv6
- VPP-DistributedOwnership
- VPP-Documentation
- VPP DPOs And Feature Arcs
- VPP EC2 Instance With SRIOV
- VPP-elog
- VPP-FAQ
- VPP Feature Arcs
- VPP-Features
- VPP-Features-IPv6
- VPP-FIB
- VPP-g2
- VPP Getting VPP 16.06
- VPP Getting VPP Release Binaries
- VPP-HA
- VPP-HostStack
- VPP-HostStack-BuiltinEchoClientServer
- VPP-HostStack-EchoClientServer
- VPP-HostStack-ExternalEchoClientServer
- VPP HostStack Hs Test
- VPP-HostStack-LDP-iperf
- VPP-HostStack-LDP-nginx
- VPP-HostStack-LDP-sshd
- VPP-HostStack-nginx
- VPP-HostStack-SessionLayerArchitecture
- VPP-HostStack-TestHttpServer
- VPP-HostStack-TestProxy
- VPP-HostStack-TLS
- VPP-HostStack-VCL
- VPP-HostStack-VclEchoClientServer
- VPP-Hotplug
- VPP How To Add A Tunnel Encapsulation
- VPP How To Build The Sample Plugin
- VPP How To Connect A PCI Interface To VPP
- VPP How To Create A VPP Binary Control Plane API
- VPP How To Deploy VPP In EC2 Instance And Use It To Connect Two Different VPCs
- VPP How To Optimize Performance %28System Tuning%29
- VPP How To Use The API Trace Tools
- VPP How To Use The C API
- VPP How To Use The Packet Generator And Packet Tracer
- VPP-Howtos
- VPP-index
- VPP Installing VPP Binaries From Packages
- VPP Interconnecting vRouters With VPP
- VPP Introduction To IP Adjacency
- VPP Introduction To N Tuple Classifiers
- VPP IP Adjacency Introduction
- VPP-IPFIX
- VPP-IPSec
- VPP IPSec And IKEv2
- VPP IPv6 SR VIRL Topology File
- VPP Java API
- VPP Java API Plugin Support
- VPP Jira Workflow
- VPP-Macswapplugin
- VPP-MakeTestFramework
- VPP-Meeting
- VPP-MFIB
- VPP Missing Prefetches
- VPP Modifying The Packet Processing Directed Graph
- VPP MPLS FIB
- VPP-NAT
- VPP Nataas Test
- VPP-OVN
- VPP Per Feature Notes
- VPP Performance Analysis Tools
- VPP-perftop
- VPP Progressive VPP Tutorial
- VPP Project Meeting Minutes
- VPP Pulling, Building, Running, Hacking And Pushing VPP Code
- VPP Pure L3 Between Namespaces With 32s
- VPP Pure L3 Container Networking
- VPP Pushing And Testing A Tag
- VPP Python API
- VPP-PythonVersionPolicy
- VPP-QuickTrexSetup
- VPP Random Hints And Kinks For KVM Usage
- VPP Release Plans Release Plan 16.09
- VPP Release Plans Release Plan 17.01
- VPP Release Plans Release Plan 17.04
- VPP Release Plans Release Plan 17.07
- VPP Release Plans Release Plan 17.10
- VPP Release Plans Release Plan 18.01
- VPP Release Plans Release Plan 18.04
- VPP Release Plans Release Plan 18.07
- VPP Release Plans Release Plan 18.10
- VPP Release Plans Release Plan 19.01
- VPP Release Plans Release Plan 19.04
- VPP Release Plans Release Plan 19.08
- VPP Release Plans Release Plan 20.01
- VPP Release Plans Release Plan 20.05
- VPP Release Plans Release Plan 20.09
- VPP Release Plans Release Plan 21.01
- VPP Release Plans Release Plan 21.06
- VPP Release Plans Release Plan 21.10
- VPP Release Plans Release Plan 22.02
- VPP Release Plans Release Plan 22.06
- VPP Release Plans Release Plan 22.10
- VPP Release Plans Release Plan 23.02
- VPP Release Plans Release Plan 23.06
- VPP Release Plans Release Plan 23.10
- VPP Release Plans Release Plan 24.02
- VPP Release Plans Release Plan 24.06
- VPP Release Plans Release Plan 24.10
- VPP Release Plans Release Plan 25.02
- VPP Release Plans Release Plan 25.06
- VPP Release Plans Release Plan 25.10
- VPP Release Plans Release Plan 26.02
- VPP Release Plans Release Plan 26.06
- VPP-RM
- VPP-SecurityGroups
- VPP Segment Routing For IPv6
- VPP Segment Routing For MPLS
- VPP Setting Up Your Dev Environment
- VPP-SNAT
- VPP Software Architecture
- VPP STN Testing
- VPP The VPP API
- VPP Training Events
- VPP-Troubleshooting
- VPP-Troubleshooting-BuildIssues
- VPP-Troubleshooting-Vagrant
- VPP Tutorial DPDK And MacSwap
- VPP Tutorial Routing And Switching
- VPP-Tutorials
- VPP Use VPP To Chain VMs Using Vhost User Interface
- VPP Use VPP To Connect VMs Using Vhost User Interface
- VPP Using mTCP User Mode TCP Stack With VPP
- VPP Using VPP As A VXLAN Tunnel Terminator
- VPP Using VPP In A Multi Thread Model
- VPP-VOM
- VPP VPP BFD Nexus
- VPP VPP Home Gateway
- VPP VPP WIKI DEPRECATED CONTENT
- VPP-VPPCommunicationsLibrary
- VPP-VPPConfig
- VPP What Is ODP4VPP
- VPP What Is VPP
- VPP Working Environments
- VPP Working With The 16.06 Throttle Branch