FD.io (Fast data - Input/Output) is a collection of several projects and libraries to amplify the transformation that began with Data Plane Development Kit (DPDK) to support flexible, programmable and composable services on a generic hardware platform. FD.io offers the Software Defined Infrastructure developer community a landing site with multiple projects fostering innovations in software-based packet processing towards the creation of high-throughput, low-latency and resource-efficient IO services suitable to many architectures (x86, ARM, and PowerPC) and deployment environments (bare metal, VM, container).
The heart of the project is Vector Packet Processing (VPP) technology donated by Cisco. This code is already running in products on the market today. The design of VPP is hardware, kernel, and deployment (bare metal, VM, container) agnostic. It runs completely in userspace. VPP has been benchmarked against top-shelf traffic generators yielding results never seen before in software-based packet processing.
The key characteristic of VPP is the fact that rather than processing the first packet through the whole graph, and then the second packet through the whole graph, VPP instead processes an entire vector of packets through a graph node before moving on to the next graph node. Because the first packet in the vector warms up the instruction cache, the remaining packets tend to be processed at extreme performance. The fixed costs of processing the vector of packets are amortized across the entire vector. This lead not only to very high performance, but also statistically reliable performance.
Segment Routing in VPP
The Segment Routing team at Cisco has funded an implementation of Segment Routing for IPv6 in VPP. The objective of this implementation is to provide an outstanding open software support for SR with the same behavior specs as the different hardware platforms such as IOS XR and IOS XE.
SR behaviors support
The following tables show the availability in VPP of each SRv6 behavior defined in draft-filsfils-spring-srv6-network-programming.
New entries will be added to these tables as more SRv6 behaviors are defined in IETF documents.
Endpoint functions are triggered when the IPv6 Destination Address of an incoming packet matches an entry in the My Local SIDs table of an SRv6-enabled node.
|End||Endpoint function||17.04 (April 2017)|
|End.X||Endpoint function with Layer-3 cross-connect||17.04 (April 2017)|
|End.T||Endpoint function with specific IPv6 table lookup||In development|
|End.DX2||Endpoint with decapsulation and Layer-2 cross-connect||17.04 (April 2017)|
|End.DX6||Endpoint with decapsulation and IPv6 cross-connect||17.04 (April 2017)|
|End.DX4||Endpoint with decapsulation and IPv4 cross-connect||17.04 (April 2017)|
|End.DT6||Endpoint with decapsulation and IPv6 table lookup||17.04 (April 2017)|
|End.DT4||Endpoint with decapsulation and IPv4 table lookup||17.04 (April 2017)|
|End.B6||Endpoint bound to an SRv6 policy||17.04 (April 2017)|
|End.B6.Encaps||Endpoint bound to an SRv6 encapsulation Policy||17.04 (April 2017)|
|End.BM||Endpoint bound to an SR-MPLS Policy||In development|
|End.S||Endpoint in search of a target in table T||In development|
|End.AS||Endpoint to SR-unaware APP via static proxy||In development|
|End.AM||Endpoint to SR-unaware APP via masquerading||In development|
Transit behaviors are triggered when an in-transit packet matches a steering rule on an SRv6-enabled node. Examples of steering rules are packets arriving on a specific incoming interface or whose Destination Address belongs in a given prefix.
|T.Insert||Transit behavior with insertion of an SRv6 Policy||17.04 (April 2017)|
|T.Encaps||Transit behavior with encapsulation in an SRv6 policy||17.04 (April 2017)|
|T.Encaps.L2||T.Encaps behavior of the received L2 frame||17.04 (April 2017)|
Configure IPv6 Segment Routing with VPP
An example of SRv6-based overlay VPN with underlay optimization, for both IPv4 and IPv6 traffic, is provided on the Segment Routing page of the FD.io wiki. This page includes a sample topology and all the necessary configurations.
An extensive documentation of the SRv6 code, with all the behaviors and their respective CLI commands, is also available on the dedicated page of the VPP manual.