Skip to content
Control plane management agent for's VPP
Branch: master
Clone or download
miroslavKovacPantheon and ondrej-fabry Add etcd ansible python plugin (#1336)
* Add etcd ansible python plugin
* Add example ansible playbook
* Fix indentation
* Update example playbook

Signed-off-by: miroslav.kovac <>
Latest commit 400e6c3 May 15, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Add yamllint to our travis-ci runs Aug 23, 2018
ansible Add etcd ansible python plugin (#1336) May 14, 2019
api Support GSO flag for TAP interfaces in VPP (#1332) May 9, 2019
client Interactive example for the kvscheduler framework with mock SB. Feb 20, 2019
clientv2 remove unnecessary readmes (#1333) May 9, 2019
cmd remove unnecessary readmes (#1333) May 9, 2019
docker Install vpp-plugin-dpdk package May 10, 2019
docs tutorial: synchronous/asynchronous configuration Apr 2, 2019
examples Merge branch 'master' into dev May 9, 2019
k8s Improve perf test Mar 15, 2019
pkg Add metrics package and refactor stats collection Mar 19, 2019
plugins remove unnecessary readmes (#1333) May 9, 2019
scripts Add etcd ansible python plugin (#1336) May 14, 2019
tests Move jenkins directory into tests May 9, 2019
vendor update to cn-infra 2.1 (#1334) May 9, 2019
.dockerignore Ignore .git in docker build context and set version through build arg May 24, 2018
.gitignore Update grpc-perf test Mar 6, 2019
.travis.yml travis move to xenial Apr 10, 2019
.yamllint.yml Add yamllint to our travis-ci runs Aug 23, 2018 update changelog for v2.1 and vpp.env May 9, 2019 Update CODINGSTYLE and CONTRIBUTING Jan 30, 2018 Update CODINGSTYLE and CONTRIBUTING Jan 30, 2018
Gopkg.lock Switch cn-infra dependency version to v2.1.0 May 9, 2019
Gopkg.toml Switch cn-infra dependency version to v2.1.0 May 9, 2019
LICENSE Initial commit Jul 14, 2017
Makefile remove old agentctl, deprecate vpp-agent-ctl (#1324) May 9, 2019 Merge branch 'master' into dev May 9, 2019
doc.go Update doc.go Feb 27, 2019

VPP Agent

GitHub contributors Build Status Coverage Status Go Report Card GoDoc GitHub license

Please note that the content of this repository is currently WORK IN PROGRESS!

The VPP Agent is a Go implementation of a control/management plane for VPP based cloud-native Virtual Network Functions (VNFs). The VPP Agent is built on top of CN Infra, a framework for developing cloud-native VNFs (CNFs).

The VPP Agent can be used as-is as a management/control agent for VNFs based on off-the-shelf VPP (e.g. a VPP-based vswitch), or as a framework for developing management agents for VPP-based CNFs. An example of a custom VPP-based CNF is the Contiv-VPP vswitch.


Release Release Date Info
stable Release date latest release
latest Release date last release/pre-release

Have a look at the release notes for a complete list of changes.


Branch Last Commit Info
master GitHub last commit (branch) has moved to v2, introducing several breaking changes ⚠️
dev GitHub last commit (branch) will be used for all the future development

Note: The branch pantheon-dev has been deprecated (v1).


Image Image Size/Layers Info
ligato/vpp-agent MicroBadger Size MicroBadger Layers minimal image for production
ligato/dev-vpp-agent MicroBadger Size MicroBadger Layers image prepared for developers

The image tag latest is built from master branch and dev tag is built from dev branch.


For a quick start with the VPP Agent, you can use the pre-built Docker images on DockerHub that contain the VPP Agent and VPP: ligato/vpp-agent (or for ARM64: ligato/vpp-agent-arm64).

  1. Start ETCD (for image versions lower than 2.0, the Kafka is required as well) on your host (e.g. in Docker as described here). Note: for ARM64 see the information for kafka and for etcd.

  2. Run VPP + VPP Agent in a Docker container:

docker pull ligato/vpp-agent
docker run -it --rm --name vpp --privileged ligato/vpp-agent
  1. Manage VPP agent using agentctl:
docker exec -it vpp agentctl -h
  1. Check the configuration (using agentctl or directly using VPP console):
docker exec -it vpp agentctl -e show
docker exec -it vpp vppctl -s localhost:5002

Next Steps

See README of development docker image for more details.


Detailed documentation for the VPP Agent can be found at


The VPP Agent is basically a set of VPP-specific plugins that use the CN-Infra framework to interact with other services/microservices in the cloud (e.g. a KV data store, messaging, log warehouse, etc.). The VPP Agent exposes VPP functionality to client apps via a higher-level model-driven API. Clients that consume this API may be either external (connecting to the VPP Agent via REST, gRPC API, Etcd or message bus transport), or local Apps and/or Extension plugins running on the same CN-Infra framework in the same Linux process.

The VNF Agent architecture is shown in the following figure:

vpp agent

Each (northbound) VPP API - L2, L3, ACL, ... - is implemented by a specific VNF Agent plugin, which translates northbound API calls/operations into (southbound) low level VPP Binary API calls. Northbound APIs are defined using protobufs, which allow for the same functionality to be accessible over multiple transport protocols (HTTP, gRPC, Etcd, ...). Plugins use the GoVPP library to interact with the VPP.

The following figure shows the VPP Agent in context of a cloud-native VNF, where the VNF's data plane is implemented using VPP/DPDK and its management/control planes are implemented using the VNF agent:



The set of plugins in the VPP Agent is as follows:

  • VPP plugins - core plugins providing northbound APIs to default VPP functionality:
    • ACL: - VPP Access Lists (VPP ACL plugin)
    • Interfaces - VPP network interfaces (e.g. DPDK, MEMIF, AF_Packet, VXLAN, Loopback..)
    • L2 - Bridge Domains, L2 cross-connects..
    • L3 - IP Routes, ARPs, ProxyARPs, VRFs..
    • IPSec - Security policy databases and policy associations
    • Punt - punt to host (directly or via socket), IP redirect
    • NAT - network address translation configuration, DNAT44
    • SR - segment routing
  • Linux plugins (VETH) - allows optional configuration of Linux virtual ethernet interfaces
    • Interfaces - Linux network interfaces (e.g. VETH, TAP..)
    • L3 - IP Routes, ARPs
    • NS - Linux network namespaces
  • GoVPPmux - plugin wrapper around GoVPP. Multiplexes plugins' access to VPP on a single connection.
  • RESTAPI - provides API to retrieve actual state
  • KVScheduler - synchronizes the desired state described by northbound components with the actual state of the southbound.


The VPP agent repository also contains tools for building and troubleshooting of VNFs based on the VPP Agent:

  • agentctl - a CLI tool that shows the state of a set of VPP agents can configure the agents
  • vpp-agent-ctl (DEPRECATED) - a utility for testing VNF Agent configuration. It contains a set of pre-defined configurations that can be sent to the VPP Agent either interactively or in a script.
  • docker - container-based development environment for the VPP agent and for app/extension plugins.


If you are interested in contributing, please see the contribution guidelines.

You can’t perform that action at this time.