User:Otroan/sandbox

Vector Packet Processing (VPP) is a software framework for building network functions. It includes a fully functional virtual router and virtual switch. It has very high performance and scale. It is implemented purely in user-space. It can be deployed stand-alone, as a complete router or switch, or it can be used as a virtual network function (VNF). It can be run in a container, a VM or directly on bare-metal.

The VPP project is organised under the FD.io umbrella; - a Linux Foundation project.

VPP is built from the ground up with both source code and run-time modularity. It is written for modern CPU platforms (x86_64, ARMv8, PowerPC...), with a great deal of care given to optimizing the software - hardware interface for real-time network I/O and packet processing. The result is a minimal number of CPU instructions and clock cycles spent per packet, with near linear scaling per core - enabling Terabit performance on a single modern Intel® XEON® server.

Overview
The VPP platform is built on a ‘packet processing graph’. This modular approach means that anyone can ‘plugin’ new graph nodes. This makes extensibility simple, and it means that plugins can be customised for specific purposes.

How does the plugin come into play? At runtime, the VPP platform grabs all available packets from RX rings to form a vector of packets. A packet processing graph is applied, node by node (including plugins) to the entire packet vector. Graph nodes are small and modular. Graph nodes are loosely coupled. This makes it easy to introduce new graph nodes. It also makes it relatively easy to rewire existing graph nodes.

A plugin can introduce new graph nodes or rearrange the packet processing graph. You can also build a plugin independently of the VPP source tree - which means you can treat it as an independent component. A plugin can be installed by adding it to a plugin directory.

The VPP platform can be used to build any kind of packet processing application. It can be used as the basis for a Load Balancer, a Firewall, an IDS, or a Host Stack. You could also create a combination of applications. For example, you could add load balancing to a vSwitch.

The engine runs in pure user-space. This means that plugins do not require changing core code - you can extend the capabilities of the packet processing engine without the need to change code running at the kernel level. Through the creation of a plugin, anyone can extend functionality with:


 * New custom graph nodes
 * Rearrangement of graph nodes
 * New low level APIs

History
VPP was invented by David Barach and Eliot Dresselhaus while working at cisco.