VNF management agent for VPP (FD.io) powered by cn-infra
VladoLavor Merge pull request #1023 from VladoLavor/master
update VPP to v19.01-rc0~234-gb11175d7
Latest commit 8b1a1ca Nov 20, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Add yamllint to our travis-ci runs Aug 23, 2018
app Merge branch 'pantheon-dev' into linux-rest Sep 21, 2018
clientv1 Satisfy linter Aug 28, 2018
cmd debug the tool of agentctl PutLookback API Oct 10, 2018
docker change the logs.conf's defaultLevel to default-level in order to matc… Oct 11, 2018
docs Small corrections in docs. Added information about push_docker.sh. Sep 28, 2018
examples ARM64 documentation moved to separate file. Sep 27, 2018
idxvpp Add options for essential plugins to make base of vpp-agent work Jul 24, 2018
k8s Add yamllint to our travis-ci runs Aug 23, 2018
plugins update VPP to v19.01-rc0~234-gb11175d7 Nov 20, 2018
scripts Fix go tags for go vet linter Aug 22, 2018
tests ssh_read Oct 4, 2018
vendor Update cn-infra to v1.6.0 Oct 4, 2018
.dockerignore Ignore .git in docker build context and set version through build arg May 24, 2018
.gitignore Exclude vendor dir from .gitignore and add previously ignored file Aug 28, 2018
.travis.yml Use go 1.11 Aug 28, 2018
.yamllint.yml Add yamllint to our travis-ci runs Aug 23, 2018
CHANGELOG.md fixed grammar/typos in changelog Oct 3, 2018
CODINGSTYLE.md Update CODINGSTYLE and CONTRIBUTING Jan 30, 2018
CONTRIBUTING.md Update CODINGSTYLE and CONTRIBUTING Jan 30, 2018
Gopkg.lock Update cn-infra to v1.6.0 Oct 4, 2018
Gopkg.toml Update GoVPP Sep 13, 2018
LICENSE Initial commit Jul 14, 2017
Makefile Pass DATE to docker build Oct 3, 2018
README.md ARM64 documents are put into docs/arm64 folder. From other documents … Sep 26, 2018
doc.go updated changelog to version 1.0.6 + master Oct 17, 2017
vpp.env update VPP to v19.01-rc0~234-gb11175d7 Nov 20, 2018

README.md

VPP Agent

Latest release 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 the CN-Infra platform for developing cloud-native VNFs.

The VPP Agent can be used as-is as a management/control agent for VNFs based on off-the-shelf VPP (for example, a VPP-based vswitch), or as a platform for developing customized VNFs with customized VPP-based data.

Architecture

The VPP Agent is basically a set of VPP-specific plugins that use the CN-Infra platform 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 platform 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:

context

Plugins

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

  • Default VPP Plugins - plugins providing northbound APIs to "default" VPP functionality (i.e. VPP functions available "out-of-the-box"):
    • Interfaces - network interface configuration (PCI Ethernet, MEMIF, AF_Packet, VXLAN, Loopback...) + BFD
    • L2 - Bridge Domains, L2 cross-connects
    • L3 - IP Routes, VRFs...
    • ACL - VPP access lists (VPP ACL plugin)
  • GOVPPmux - plugin wrapper around GoVPP. Multiplexes plugins' access to VPP on a single connection.
  • Linux (VETH) - allows optional configuration of Linux virtual ethernet interfaces
  • CN-Infra datasync - data synchronization after HA events
  • CN-Infra core - lifecycle management of plugins (loading, initialization, unloading)
  • RESTAPI - allows to run VPP CLI commands and also provides API to expose existing Northbound objects

Tools

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 - 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.

Quickstart

For a quick start with the VPP Agent, you can use pre-built Docker images with the Agent and VPP on Dockerhub (or this for ARM64).

  1. Start ETCD and Kafka on your host (e.g. in Docker as described here). Note: The Agent in the pre-built Docker image will not start if it can't connect to both Etcd and Kafka.

    Note: For ARM64 see the information for kafka and for etcd.

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

docker pull ligato/vpp-agent
docker run -it --name vpp --rm ligato/vpp-agent
  1. Configure the 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 172.17.0.1:2379 show
docker exec -it vpp vppctl -s localhost:5002

Documentation

GoDoc can be browsed online.

Next Steps

Read the README for the Development Docker Image for more details.

Deployment:

K8s integration

Design & architecture:

VPP agent 10.000 feet

Contribution:

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