vppagent

package module
v1.0.7 Latest Latest
Warning

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

Go to latest
Published: Oct 31, 2017 License: Apache-2.0 Imports: 0 Imported by: 0

README

VPP Agent

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 Golang 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 Virtual Network Functions (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"):
    • NET 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.

  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.

  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

Extensibility:

VPP Agent Extensibility

Design & architecture:

VPP agent 10.000 feet

Contribution:

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

Directories

Path Synopsis
Package clientv1 provides clients for local and remote management of VPP and Linux configuration via vpp-agent plugins.
Package clientv1 provides clients for local and remote management of VPP and Linux configuration via vpp-agent plugins.
defaultplugins
Package defaultplugins contains clients for local and remote management of VPP configuration via default plugins.
Package defaultplugins contains clients for local and remote management of VPP configuration via default plugins.
defaultplugins/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).
defaultplugins/grpcadapter
Package grpcadapter implements Domain Specific Language (DSL) for resync and change of VPP configuration using GRPC client.
Package grpcadapter implements Domain Specific Language (DSL) for resync and change of VPP configuration using GRPC client.
defaultplugins/localclient
Package localclient implements client for local management of VPP configuration.
Package localclient implements client for local management of VPP configuration.
defaultplugins/remoteclient
Package remoteclient implements client for remote management of VPP configuration.
Package remoteclient implements client for remote management of VPP configuration.
linux
Package linux contains clients for local and remote management of both VPP and Linux configuration via Linux+default plugins.
Package linux contains clients for local and remote management of both VPP and Linux configuration via Linux+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.
cmd
Package cmd is the parent for packages that are used to build various executables from vpp-agent sources.
Package cmd is the parent for packages that are used to build various executables from vpp-agent sources.
agentctl
agentctl is a command-line tool for monitoring and configuring VPP Agents.
agentctl is a command-line tool for monitoring and configuring VPP Agents.
agentctl/cmd
Package cmd implements the command line interface (CLI) for the agentctl tool.
Package cmd implements the command line interface (CLI) for the agentctl tool.
agentctl/impl
Package impl implements handlers for agentctl commands.
Package impl implements handlers for agentctl commands.
agentctl/testing
Package testing contains agentctl unit tests.
Package testing contains agentctl unit tests.
agentctl/testing/then
Package then contains methods for verification of agentctl unit test outcomes.
Package then contains methods for verification of agentctl unit test outcomes.
agentctl/utils
Package utils provides utility functions used in agentctl commands.
Package utils provides utility functions used in agentctl commands.
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.
vpp-agent-ctl
package vpp-agent-ctl implements the vpp-agent-ctl test tool for testing of VPP Agent plugins.
package vpp-agent-ctl implements the vpp-agent-ctl test tool for testing of VPP Agent plugins.
vpp-agent-grpc
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.
examples
govpp_call
Example govpp_call shows how to use the govpp library to communicate with VPP over the binary API.
Example govpp_call shows how to use the govpp library to communicate with VPP over the binary API.
idx_bd_cache
Example idx_bd_cache demonstrates the use of the "bridge-domain name-to-index cache" to watch for bridge-domain config changes across agents.
Example idx_bd_cache demonstrates the use of the "bridge-domain name-to-index cache" to watch for bridge-domain config changes across agents.
idx_iface_cache
Example idx_iface_cache demonstrates the use of the "interface name-to-index cache" to watch for VPP interface config changes across agents.
Example idx_iface_cache demonstrates the use of the "interface name-to-index cache" to watch for VPP interface config changes across agents.
idx_mapping_lookup
Example idx_mapping_lookup shows how to use the name-to-index mapping registry to create a new mapping and how to add and lookup mapping items.
Example idx_mapping_lookup shows how to use the name-to-index mapping registry to create a new mapping and how to add and lookup mapping items.
idx_mapping_watcher
Example idx_mapping_watcher shows how to watch on changes done in name-to-index mapping registry.
Example idx_mapping_watcher shows how to watch on changes done in name-to-index mapping registry.
idx_veth_cache
Example idx_veth_cache demonstrates the use of the "VETH name-to-index cache" to watch for Linux VETH interface config changes across agents.
Example idx_veth_cache demonstrates the use of the "VETH name-to-index cache" to watch for Linux VETH interface config changes across agents.
localclient_linux
Example localclient_linux is a demonstration of local Linux and VPP config management via clientv1.
Example localclient_linux is a demonstration of local Linux and VPP config management via clientv1.
localclient_vpp
Example localclient_vpp is a demonstration of local VPP config management via clientv1.
Example localclient_vpp is a demonstration of local VPP config management via clientv1.
remoteclient_grpc_vpp
Example remoteclient_vpp is a demonstration of remote VPP config management via clientv1 (using GPRC transport).
Example remoteclient_vpp is a demonstration of remote VPP config management via clientv1 (using GPRC transport).
Package flavors contains predefined vpp-agent flavors.
Package flavors contains predefined vpp-agent flavors.
local
Package local defines flavor used for VPP agents managed only locally.
Package local defines flavor used for VPP agents managed only locally.
rpc
Package rpc defines flavor used for VPP agents managed using GPRC service.
Package rpc defines flavor used for VPP agents managed using GPRC service.
rpc/model
Package model is the parent for packages that define various GRPC services generated from protobuf data models.
Package model is the parent for packages that define various GRPC services generated from protobuf data models.
rpc/model/vppsvc
Package vppsvc is a generated protocol buffer package.
Package vppsvc is a generated protocol buffer package.
vpp
Package vpp defines the standard flavor used for full-featured VPP agents.
Package vpp defines the standard flavor used for full-featured VPP agents.
Package idxvpp implements name-to-index mapping used by VPP plugins to keep a map between VPP interface handles and northbound string-based identifiers.
Package idxvpp implements name-to-index mapping used by VPP plugins to keep a map between VPP interface handles and northbound string-based identifiers.
cacheutil
Package cacheutil is a base implementation of name-to-index cache on top of which all typesafe caches are built.
Package cacheutil is a base implementation of name-to-index cache on top of which all typesafe caches are built.
nametoidx
Package nametoidx is an in-memory implementation of the name-to-index mapping registry.
Package nametoidx is an in-memory implementation of the name-to-index mapping registry.
persist
Package persist asynchronously writes changes in the map (name->idx) to file.
Package persist asynchronously writes changes in the map (name->idx) to file.
Package plugins is the parent package for all vpp-agent plugins.
Package plugins is the parent package for all vpp-agent plugins.
defaultplugins
Package defaultplugins is the parent package for all "default" VPP-related plugins.
Package defaultplugins is the parent package for all "default" VPP-related plugins.
defaultplugins/aclplugin
Package aclplugin implements the ACL Plugin that handles management of VPP Access lists.
Package aclplugin implements the ACL Plugin that handles management of VPP Access lists.
defaultplugins/aclplugin/bin_api
Package binapi defines the aclplugin's southbound API.
Package binapi defines the aclplugin's southbound API.
defaultplugins/aclplugin/bin_api/acl
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/aclplugin/model
Package model defines the acplugin's northbound API.
Package model defines the acplugin's northbound API.
defaultplugins/aclplugin/model/acl
Package acl is a generated protocol buffer package.
Package acl is a generated protocol buffer package.
defaultplugins/aclplugin/vppcalls
Package vppcalls contains wrappers over VPP ACL binary APIs.
Package vppcalls contains wrappers over VPP ACL binary APIs.
defaultplugins/ifplugin
Package ifplugin implements the Interface plugin that handles management of VPP interfaces.
Package ifplugin implements the Interface plugin that handles management of VPP interfaces.
defaultplugins/ifplugin/bin_api
Package binapi is the parent for packages that define various ifplugin southbound APIs.
Package binapi is the parent for packages that define various ifplugin southbound APIs.
defaultplugins/ifplugin/bin_api/af_packet
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/ifplugin/bin_api/bfd
Package bfd represents the VPP binary API of the 'bfd' VPP module.
Package bfd represents the VPP binary API of the 'bfd' VPP module.
defaultplugins/ifplugin/bin_api/interfaces
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/ifplugin/bin_api/ip
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/ifplugin/bin_api/memif
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/ifplugin/bin_api/stats
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/ifplugin/bin_api/tap
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/ifplugin/bin_api/vpe
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/ifplugin/bin_api/vxlan
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/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.
defaultplugins/ifplugin/model
Package model is the parent for packages that define various if_plugin northbound APIs generated from protobuf data models.
Package model is the parent for packages that define various if_plugin northbound APIs generated from protobuf data models.
defaultplugins/ifplugin/model/bfd
Package bfd is a generated protocol buffer package.
Package bfd is a generated protocol buffer package.
defaultplugins/ifplugin/model/interfaces
Package interfaces is a generated protocol buffer package.
Package interfaces is a generated protocol buffer package.
defaultplugins/ifplugin/vppcalls
Package vppcalls contains wrappers over VPP binary APIs for all supported interface types.
Package vppcalls contains wrappers over VPP binary APIs for all supported interface types.
defaultplugins/ifplugin/vppdump
Package vppdump provides helpers to dump all interfaces configured in VPP.
Package vppdump provides helpers to dump all interfaces configured in VPP.
defaultplugins/l2plugin
Package l2plugin implements the L2 plugin that handles Bridge Domains and L2 FIBs.
Package l2plugin implements the L2 plugin that handles Bridge Domains and L2 FIBs.
defaultplugins/l2plugin/bdidx
Package bdidx implements name-to-index mapping registry and cache for bridge-domains.
Package bdidx implements name-to-index mapping registry and cache for bridge-domains.
defaultplugins/l2plugin/bin_api
Package binapi is the parent for packages that define various l2plugin southbound APIs.
Package binapi is the parent for packages that define various l2plugin southbound APIs.
defaultplugins/l2plugin/bin_api/l2
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/l2plugin/bin_api/vpe
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/l2plugin/model
Package model defines the l2lugin's northbound API.
Package model defines the l2lugin's northbound API.
defaultplugins/l2plugin/model/l2
Package l2 is a generated protocol buffer package.
Package l2 is a generated protocol buffer package.
defaultplugins/l2plugin/vppcalls
Package vppcalls contains wrappers over VPP binary APIs for bridge-domains, L2 FIBs and XConnect pairs.
Package vppcalls contains wrappers over VPP binary APIs for bridge-domains, L2 FIBs and XConnect pairs.
defaultplugins/l2plugin/vppdump
Package vppdump provides helpers to dump all bridge-domains, L2 FIBs and XConnect pairs configured in VPP.
Package vppdump provides helpers to dump all bridge-domains, L2 FIBs and XConnect pairs configured in VPP.
defaultplugins/l3plugin
Package l3plugin implements the L3 plugin that handles L3 FIBs.
Package l3plugin implements the L3 plugin that handles L3 FIBs.
defaultplugins/l3plugin/bin_api
Package binapi defines the l3plugin's southbound API.
Package binapi defines the l3plugin's southbound API.
defaultplugins/l3plugin/bin_api/ip
Code generated by govpp binapi-generator DO NOT EDIT.
Code generated by govpp binapi-generator DO NOT EDIT.
defaultplugins/l3plugin/model
Package model defines the l3plugin's northbound API.
Package model defines the l3plugin's northbound API.
defaultplugins/l3plugin/model/l3
Package l3 is a generated protocol buffer package.
Package l3 is a generated protocol buffer package.
defaultplugins/l3plugin/vppcalls
Package vppcalls contains wrappers over VPP binary APIs for L3 FIBs.
Package vppcalls contains wrappers over VPP binary APIs for L3 FIBs.
defaultplugins/l3plugin/vppdump
Package vppdump provides helpers to dump all L3 FIBs configured in VPP.
Package vppdump provides helpers to dump all L3 FIBs configured in VPP.
govppmux
Package govppmux implements the GoVPPMux plugin that allows multiple plugins to share single connection to VPP.
Package govppmux implements the GoVPPMux plugin that allows multiple plugins to share single connection to VPP.
linuxplugin
Package linuxplugin implements the Linux plugin that handles management of Linux VETH interfaces.
Package linuxplugin implements the Linux plugin that handles management of Linux VETH interfaces.
linuxplugin/ifplugin/ifaceidx
Package ifaceidx implements name-to-index mapping registry and cache for Linux interfaces.
Package ifaceidx implements name-to-index mapping registry and cache for Linux interfaces.
linuxplugin/ifplugin/linuxcalls
Package linuxcalls contains wrappers over Netlink APIs related to Linux VETH interfaces or to Linux interfaces in general.
Package linuxcalls contains wrappers over Netlink APIs related to Linux VETH interfaces or to Linux interfaces in general.
linuxplugin/ifplugin/model
Package model defines the linuxplugin's northbound API.
Package model defines the linuxplugin's northbound API.
linuxplugin/ifplugin/model/interfaces
Package interfaces is a generated protocol buffer package.
Package interfaces is a generated protocol buffer package.
linuxplugin/l3plugin/l3idx
Package l3idx implements name-to-index mapping registry and cache for Linux static arp entries and static routes.
Package l3idx implements name-to-index mapping registry and cache for Linux static arp entries and static routes.
linuxplugin/l3plugin/model/l3
Package l3 is a generated protocol buffer package.
Package l3 is a generated protocol buffer package.
tests
go/itest/iftst
Package iftst provides tools and input data for unit testing of ifplugin.
Package iftst provides tools and input data for unit testing of ifplugin.
go/itest/l2tst
Package l2tst provides tools and input data for unit testing of the l2plugin.
Package l2tst provides tools and input data for unit testing of the l2plugin.

Jump to

Keyboard shortcuts

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