vppagent

package module
v2.4.0-alpha+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 7, 2019 License: Apache-2.0 Imports: 0 Imported by: 0

README

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.

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

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

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

Quickstart

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 on your host (e.g. in Docker as described here).

    Note: for ARM64 see the information for etcd.

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

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 172.17.0.1:2379 show
docker exec -it vpp vppctl -s localhost:5002

Next Steps

See README of development docker image for more details.

Documentation

Extensive documentation for the VPP Agent can be found at docs.ligato.io.

Architecture

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:

context

Contributing

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

Documentation

Overview

Package vppagent is the parent for vpp-specific packages used to build VPP Agent, a control/management plane for VPP-based cloud-native VNFs. VPP Agent is built on the cn-infra framework.

Directories

Path Synopsis
api
Package clientv2 provides clients for local and remote management of VPP and Linux configuration via VPP Agent plugins.
Package clientv2 provides clients for local and remote management of VPP and Linux configuration via VPP Agent plugins.
linux
Package linuxclient contains clients for local and remote management of both VPP and Linux configuration via Linux and default plugins.
Package linuxclient contains clients for local and remote management of both VPP and Linux configuration via Linux and default plugins.
linux/dbadapter
Package dbadapter implements Domain Specific Language (DSL) for resync and change of VPP and Linux configuration.
Package dbadapter implements Domain Specific Language (DSL) for resync and change of VPP and Linux configuration.
linux/localclient
Package localclient implements client for local management of VPP and Linux configuration.
Package localclient implements client for local management of VPP and Linux configuration.
linux/remoteclient
Package remoteclient implements client for remote management of VPP and Linux configuration.
Package remoteclient implements client for remote management of VPP and Linux configuration.
vpp
Package vppclient contains clients for local and remote management of VPP configuration via default plugins.
Package vppclient contains clients for local and remote management of VPP configuration via default plugins.
vpp/dbadapter
Package dbadapter implements Domain Specific Language (DSL) for resync and change of VPP configuration using Data Broker (by writing to key value store).
Package dbadapter implements Domain Specific Language (DSL) for resync and change of VPP configuration using Data Broker (by writing to key value store).
vpp/localclient
Package localclient implements client for local management of VPP configuration.
Package localclient implements client for local management of VPP configuration.
vpp/remoteclient
Package remoteclient implements the client for remote management of VPP configuration.
Package remoteclient implements the client for remote management of VPP configuration.
cmd
Package cmd is the parent of packages that are used to build various executables from VPP Agent sources.
Package cmd is the parent of packages that are used to build various executables from VPP Agent sources.
vpp-agent
Package vpp-agent implements the main entry point into the VPP Agent and it is used to build the VPP Agent executable.
Package vpp-agent implements the main entry point into the VPP Agent and it is used to build the VPP Agent executable.
Package examples contains several examples that illustrate various aspects of VPP Agent's functionality.
Package examples contains several examples that illustrate various aspects of VPP Agent's functionality.
govpp_call
Example govpp_call shows how to use govpp library to communicate with VPP over the binary API.
Example govpp_call shows how to use govpp library to communicate with VPP over the binary API.
grpc_vpp/notifications
Example statistics app demonstrates usage of grpc to stream vpp statistics.
Example statistics app demonstrates usage of grpc to stream vpp statistics.
grpc_vpp/remote_client
Example remote_client demonstrates remote VPP config management via clientv1 using GPRC transport.
Example remote_client demonstrates remote VPP config management via clientv1 using GPRC transport.
localclient_linux/tap
Example localclient_linux demonstrates local Linux (linux-tap) and VPP (tap) config management via clientv1.
Example localclient_linux demonstrates local Linux (linux-tap) and VPP (tap) config management via clientv1.
localclient_linux/veth
Example localclient_linux demonstrates local Linux (veth) and VPP (af-packet) config management via clientv1.
Example localclient_linux demonstrates local Linux (veth) and VPP (af-packet) config management via clientv1.
localclient_vpp/nat
Example localclient_vpp_nat demonstrates NAT VPP configuration managed via clientv1.
Example localclient_vpp_nat demonstrates NAT VPP configuration managed via clientv1.
localclient_vpp/plugins
Example localclient_vpp_plugins demonstrates local VPP config management via clientv1.
Example localclient_vpp_plugins demonstrates local VPP config management via clientv1.
pkg
idxvpp
Package idxvpp extends NamedMapping from cn-infra to provide a map between VPP/Linux items with integer handles and northbound string-based identifiers (logical names).
Package idxvpp extends NamedMapping from cn-infra to provide a map between VPP/Linux items with integer handles and northbound string-based identifiers (logical names).
plugins
govppmux
Package govppmux implements the GoVPPMux plugin that allows multiple plugins to share a single connection to VPP.
Package govppmux implements the GoVPPMux plugin that allows multiple plugins to share a single connection to VPP.
linux/ifplugin/ifaceidx
Package ifaceidx implements name-to-index mapping for Linux interfaces.
Package ifaceidx implements name-to-index mapping for Linux interfaces.
linux/ifplugin/linuxcalls
Package linuxcalls contains wrappers over Netlink APIs related to Linux VETH interfaces or Linux interfaces in general.
Package linuxcalls contains wrappers over Netlink APIs related to Linux VETH interfaces or Linux interfaces in general.
linux/nsplugin/linuxcalls
Package linuxcalls contains wrappers over Netlink & OS APIs related to Linux namespaces.
Package linuxcalls contains wrappers over Netlink & OS APIs related to Linux namespaces.
vpp/abfplugin/vppcalls
Package vppcalls contains wrappers over VPP ABF binary APIs and helpers to dump ABFs configured in VPP
Package vppcalls contains wrappers over VPP ABF binary APIs and helpers to dump ABFs configured in VPP
vpp/aclplugin/vppcalls
Package vppcalls contains wrappers over VPP ACL binary APIs and helpers to dump ACLs configured in VPP - per interface and total.
Package vppcalls contains wrappers over VPP ACL binary APIs and helpers to dump ACLs configured in VPP - per interface and total.
vpp/binapi/vpp1904/abf
Package abf is a generated VPP binary API for 'abf' module.
Package abf is a generated VPP binary API for 'abf' module.
vpp/binapi/vpp1904/acl
Package acl is a generated VPP binary API for 'acl' module.
Package acl is a generated VPP binary API for 'acl' module.
vpp/binapi/vpp1904/af_packet
Package af_packet is a generated VPP binary API for 'af_packet' module.
Package af_packet is a generated VPP binary API for 'af_packet' module.
vpp/binapi/vpp1904/bond
Package bond is a generated VPP binary API for 'bond' module.
Package bond is a generated VPP binary API for 'bond' module.
vpp/binapi/vpp1904/dhcp
Package dhcp is a generated VPP binary API for 'dhcp' module.
Package dhcp is a generated VPP binary API for 'dhcp' module.
vpp/binapi/vpp1904/gre
Package gre is a generated VPP binary API for 'gre' module.
Package gre is a generated VPP binary API for 'gre' module.
vpp/binapi/vpp1904/interfaces
Package interfaces is a generated VPP binary API for 'interface' module.
Package interfaces is a generated VPP binary API for 'interface' module.
vpp/binapi/vpp1904/ip
Package ip is a generated VPP binary API for 'ip' module.
Package ip is a generated VPP binary API for 'ip' module.
vpp/binapi/vpp1904/ipsec
Package ipsec is a generated VPP binary API for 'ipsec' module.
Package ipsec is a generated VPP binary API for 'ipsec' module.
vpp/binapi/vpp1904/l2
Package l2 is a generated VPP binary API for 'l2' module.
Package l2 is a generated VPP binary API for 'l2' module.
vpp/binapi/vpp1904/memclnt
Package memclnt is a generated VPP binary API for 'memclnt' module.
Package memclnt is a generated VPP binary API for 'memclnt' module.
vpp/binapi/vpp1904/memif
Package memif is a generated VPP binary API for 'memif' module.
Package memif is a generated VPP binary API for 'memif' module.
vpp/binapi/vpp1904/nat
Package nat is a generated VPP binary API for 'nat' module.
Package nat is a generated VPP binary API for 'nat' module.
vpp/binapi/vpp1904/punt
Package punt is a generated VPP binary API for 'punt' module.
Package punt is a generated VPP binary API for 'punt' module.
vpp/binapi/vpp1904/span
Package span is a generated VPP binary API for 'span' module.
Package span is a generated VPP binary API for 'span' module.
vpp/binapi/vpp1904/sr
Package sr is a generated VPP binary API for 'sr' module.
Package sr is a generated VPP binary API for 'sr' module.
vpp/binapi/vpp1904/stn
Package stn is a generated VPP binary API for 'stn' module.
Package stn is a generated VPP binary API for 'stn' module.
vpp/binapi/vpp1904/tapv2
Package tapv2 is a generated VPP binary API for 'tapv2' module.
Package tapv2 is a generated VPP binary API for 'tapv2' module.
vpp/binapi/vpp1904/vmxnet3
Package vmxnet3 is a generated VPP binary API for 'vmxnet3' module.
Package vmxnet3 is a generated VPP binary API for 'vmxnet3' module.
vpp/binapi/vpp1904/vpe
Package vpe is a generated VPP binary API for 'vpe' module.
Package vpe is a generated VPP binary API for 'vpe' module.
vpp/binapi/vpp1904/vxlan
Package vxlan is a generated VPP binary API for 'vxlan' module.
Package vxlan is a generated VPP binary API for 'vxlan' module.
vpp/binapi/vpp1904/vxlan_gpe
Package vxlan_gpe is a generated VPP binary API for 'vxlan_gpe' module.
Package vxlan_gpe is a generated VPP binary API for 'vxlan_gpe' module.
vpp/binapi/vpp1908/abf
Package abf is a generated VPP binary API for 'abf' module.
Package abf is a generated VPP binary API for 'abf' module.
vpp/binapi/vpp1908/acl
Package acl is a generated VPP binary API for 'acl' module.
Package acl is a generated VPP binary API for 'acl' module.
vpp/binapi/vpp1908/af_packet
Package af_packet is a generated VPP binary API for 'af_packet' module.
Package af_packet is a generated VPP binary API for 'af_packet' module.
vpp/binapi/vpp1908/bond
Package bond is a generated VPP binary API for 'bond' module.
Package bond is a generated VPP binary API for 'bond' module.
vpp/binapi/vpp1908/dhcp
Package dhcp is a generated VPP binary API for 'dhcp' module.
Package dhcp is a generated VPP binary API for 'dhcp' module.
vpp/binapi/vpp1908/gre
Package gre is a generated VPP binary API for 'gre' module.
Package gre is a generated VPP binary API for 'gre' module.
vpp/binapi/vpp1908/interfaces
Package interfaces is a generated VPP binary API for 'interface' module.
Package interfaces is a generated VPP binary API for 'interface' module.
vpp/binapi/vpp1908/ip
Package ip is a generated VPP binary API for 'ip' module.
Package ip is a generated VPP binary API for 'ip' module.
vpp/binapi/vpp1908/ipsec
Package ipsec is a generated VPP binary API for 'ipsec' module.
Package ipsec is a generated VPP binary API for 'ipsec' module.
vpp/binapi/vpp1908/l2
Package l2 is a generated VPP binary API for 'l2' module.
Package l2 is a generated VPP binary API for 'l2' module.
vpp/binapi/vpp1908/memclnt
Package memclnt is a generated VPP binary API for 'memclnt' module.
Package memclnt is a generated VPP binary API for 'memclnt' module.
vpp/binapi/vpp1908/memif
Package memif is a generated VPP binary API for 'memif' module.
Package memif is a generated VPP binary API for 'memif' module.
vpp/binapi/vpp1908/nat
Package nat is a generated VPP binary API for 'nat' module.
Package nat is a generated VPP binary API for 'nat' module.
vpp/binapi/vpp1908/punt
Package punt is a generated VPP binary API for 'punt' module.
Package punt is a generated VPP binary API for 'punt' module.
vpp/binapi/vpp1908/span
Package span is a generated VPP binary API for 'span' module.
Package span is a generated VPP binary API for 'span' module.
vpp/binapi/vpp1908/sr
Package sr is a generated VPP binary API for 'sr' module.
Package sr is a generated VPP binary API for 'sr' module.
vpp/binapi/vpp1908/stn
Package stn is a generated VPP binary API for 'stn' module.
Package stn is a generated VPP binary API for 'stn' module.
vpp/binapi/vpp1908/tapv2
Package tapv2 is a generated VPP binary API for 'tapv2' module.
Package tapv2 is a generated VPP binary API for 'tapv2' module.
vpp/binapi/vpp1908/vmxnet3
Package vmxnet3 is a generated VPP binary API for 'vmxnet3' module.
Package vmxnet3 is a generated VPP binary API for 'vmxnet3' module.
vpp/binapi/vpp1908/vpe
Package vpe is a generated VPP binary API for 'vpe' module.
Package vpe is a generated VPP binary API for 'vpe' module.
vpp/binapi/vpp1908/vxlan
Package vxlan is a generated VPP binary API for 'vxlan' module.
Package vxlan is a generated VPP binary API for 'vxlan' module.
vpp/binapi/vpp1908/vxlan_gpe
Package vxlan_gpe is a generated VPP binary API for 'vxlan_gpe' module.
Package vxlan_gpe is a generated VPP binary API for 'vxlan_gpe' module.
vpp/binapi/vpp2001/abf
Package abf is a generated VPP binary API for 'abf' module.
Package abf is a generated VPP binary API for 'abf' module.
vpp/binapi/vpp2001/acl
Package acl is a generated VPP binary API for 'acl' module.
Package acl is a generated VPP binary API for 'acl' module.
vpp/binapi/vpp2001/af_packet
Package af_packet is a generated VPP binary API for 'af_packet' module.
Package af_packet is a generated VPP binary API for 'af_packet' module.
vpp/binapi/vpp2001/bond
Package bond is a generated VPP binary API for 'bond' module.
Package bond is a generated VPP binary API for 'bond' module.
vpp/binapi/vpp2001/dhcp
Package dhcp is a generated VPP binary API for 'dhcp' module.
Package dhcp is a generated VPP binary API for 'dhcp' module.
vpp/binapi/vpp2001/gre
Package gre is a generated VPP binary API for 'gre' module.
Package gre is a generated VPP binary API for 'gre' module.
vpp/binapi/vpp2001/interfaces
Package interfaces is a generated VPP binary API for 'interface' module.
Package interfaces is a generated VPP binary API for 'interface' module.
vpp/binapi/vpp2001/ip
Package ip is a generated VPP binary API for 'ip' module.
Package ip is a generated VPP binary API for 'ip' module.
vpp/binapi/vpp2001/ipsec
Package ipsec is a generated VPP binary API for 'ipsec' module.
Package ipsec is a generated VPP binary API for 'ipsec' module.
vpp/binapi/vpp2001/l2
Package l2 is a generated VPP binary API for 'l2' module.
Package l2 is a generated VPP binary API for 'l2' module.
vpp/binapi/vpp2001/memclnt
Package memclnt is a generated VPP binary API for 'memclnt' module.
Package memclnt is a generated VPP binary API for 'memclnt' module.
vpp/binapi/vpp2001/memif
Package memif is a generated VPP binary API for 'memif' module.
Package memif is a generated VPP binary API for 'memif' module.
vpp/binapi/vpp2001/nat
Package nat is a generated VPP binary API for 'nat' module.
Package nat is a generated VPP binary API for 'nat' module.
vpp/binapi/vpp2001/punt
Package punt is a generated VPP binary API for 'punt' module.
Package punt is a generated VPP binary API for 'punt' module.
vpp/binapi/vpp2001/span
Package span is a generated VPP binary API for 'span' module.
Package span is a generated VPP binary API for 'span' module.
vpp/binapi/vpp2001/sr
Package sr is a generated VPP binary API for 'sr' module.
Package sr is a generated VPP binary API for 'sr' module.
vpp/binapi/vpp2001/stn
Package stn is a generated VPP binary API for 'stn' module.
Package stn is a generated VPP binary API for 'stn' module.
vpp/binapi/vpp2001/tapv2
Package tapv2 is a generated VPP binary API for 'tapv2' module.
Package tapv2 is a generated VPP binary API for 'tapv2' module.
vpp/binapi/vpp2001/vmxnet3
Package vmxnet3 is a generated VPP binary API for 'vmxnet3' module.
Package vmxnet3 is a generated VPP binary API for 'vmxnet3' module.
vpp/binapi/vpp2001/vpe
Package vpe is a generated VPP binary API for 'vpe' module.
Package vpe is a generated VPP binary API for 'vpe' module.
vpp/binapi/vpp2001/vxlan
Package vxlan is a generated VPP binary API for 'vxlan' module.
Package vxlan is a generated VPP binary API for 'vxlan' module.
vpp/binapi/vpp2001/vxlan_gpe
Package vxlan_gpe is a generated VPP binary API for 'vxlan_gpe' module.
Package vxlan_gpe is a generated VPP binary API for 'vxlan_gpe' module.
vpp/ifplugin/ifaceidx
Package ifaceidx implements name-to-index mapping registry and cache for VPP interfaces.
Package ifaceidx implements name-to-index mapping registry and cache for VPP interfaces.
vpp/ifplugin/vppcalls/vpp1904
Package vppcalls contains wrappers over VPP binary APIs for all supported interface types and for dumping all interfaces configured in VPP.
Package vppcalls contains wrappers over VPP binary APIs for all supported interface types and for dumping all interfaces configured in VPP.
vpp/ifplugin/vppcalls/vpp1908
Package vppcalls contains wrappers over VPP binary APIs for all supported interface types and for dumping all interfaces configured in VPP.
Package vppcalls contains wrappers over VPP binary APIs for all supported interface types and for dumping all interfaces configured in VPP.
vpp/ifplugin/vppcalls/vpp2001
Package vppcalls contains wrappers over VPP binary APIs for all supported interface types and for dumping all interfaces configured in VPP.
Package vppcalls contains wrappers over VPP binary APIs for all supported interface types and for dumping all interfaces configured in VPP.
vpp/l2plugin/vppcalls/vpp1904
Package vppcalls contains wrappers over VPP binary APIs for bridge-domains, and L2 FIBs and XConnect pairs and helpers for dumping them.
Package vppcalls contains wrappers over VPP binary APIs for bridge-domains, and L2 FIBs and XConnect pairs and helpers for dumping them.
vpp/l2plugin/vppcalls/vpp1908
Package vppcalls contains wrappers over VPP binary APIs for bridge-domains, and L2 FIBs and XConnect pairs and helpers for dumping them.
Package vppcalls contains wrappers over VPP binary APIs for bridge-domains, and L2 FIBs and XConnect pairs and helpers for dumping them.
vpp/l2plugin/vppcalls/vpp2001
Package vppcalls contains wrappers over VPP binary APIs for bridge-domains, and L2 FIBs and XConnect pairs and helpers for dumping them.
Package vppcalls contains wrappers over VPP binary APIs for bridge-domains, and L2 FIBs and XConnect pairs and helpers for dumping them.
vpp/l3plugin/vppcalls/vpp1904
Package vppcalls contains wrappers over VPP binary APIs for ARPs, proxy ARPs, L3 FIBs and helpers for dumping them.
Package vppcalls contains wrappers over VPP binary APIs for ARPs, proxy ARPs, L3 FIBs and helpers for dumping them.
vpp/l3plugin/vppcalls/vpp1908
Package vppcalls contains wrappers over VPP binary APIs for ARPs, proxy ARPs, L3 FIBs and helpers for dumping them.
Package vppcalls contains wrappers over VPP binary APIs for ARPs, proxy ARPs, L3 FIBs and helpers for dumping them.
vpp/l3plugin/vppcalls/vpp2001
Package vppcalls contains wrappers over VPP binary APIs for ARPs, proxy ARPs, L3 FIBs and helpers for dumping them.
Package vppcalls contains wrappers over VPP binary APIs for ARPs, proxy ARPs, L3 FIBs and helpers for dumping them.
vpp/l3plugin/vrfidx
Package vrfidx implements name-to-index mapping registry and cache for VPP VRFs.
Package vrfidx implements name-to-index mapping registry and cache for VPP VRFs.
vpp/natplugin/vppcalls
Package vppcalls contains wrappers over VPP binary APIs for NAT configuration.
Package vppcalls contains wrappers over VPP binary APIs for NAT configuration.
vpp/srplugin/vppcalls/vpp1904
Package vpp1904 contains wrappers over VPP (version 19.01) binary APIs to simplify their usage
Package vpp1904 contains wrappers over VPP (version 19.01) binary APIs to simplify their usage
vpp/srplugin/vppcalls/vpp1908
Package vpp1908 contains wrappers over VPP (version 19.01) binary APIs to simplify their usage
Package vpp1908 contains wrappers over VPP (version 19.01) binary APIs to simplify their usage
vpp/srplugin/vppcalls/vpp2001
Package vpp2001 contains wrappers over VPP (version 19.01) binary APIs to simplify their usage
Package vpp2001 contains wrappers over VPP (version 19.01) binary APIs to simplify their usage
tests
e2e

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL