View on GitHub rose

Research on Open SRv6 Ecosystem

Segment Routing (SR) is a form of source routing. The SR architecture works by including a list of segments in the packet headers. A segment can represent a topological instruction (e.g. a node to be crossed) or a service instruction (e.g. an operation to be executed on the packet).

The Segment Routing architecture can be implemented using MPLS or IPv6 as data plane. We focus on the IPv6 implementation, called SRv6, in which the segments are identified by IPv6 addresses. SRv6 supports advanced services like Traffic Engineering, Service Function Chaining and Virtual Private Networks in IPv6 backbones and datacenters.

The ROSE project tackles multiple aspects of the SRv6 technology: Data Plane, Control Plane, SRv6 host networking stack, integration with applications, integration with Cloud/Data Center Infrastructures.

ROSE builds up and maintain a Linux based Open Ecosystem for SRv6, composed of several sub-projects, like SRPerf (performance evaluation of SRv6 implementations), SRv6 SDN (gRPC based API for controlling SRv6 Linux routers), SRv6 uSID implementation in Linux and P4 and several others. We list our published papers below and present hereafter our open source SRv6 ecosystem, with a bottom up approach.

If you want to contribute to the ecosystem, provide feedback or get in touch with us, see our contact page.

SREXT kernel module

SRNK SR proxy Native Kernel

pyroute2 extensions to support SRv6

SRPerf performance evaluation for SRv6 implementations

SRv6 uSID (micro segment) implementation in Linux

SRv6 uSID (micro segment) implementation on P4

SRv6 PM - Performance Monitoring

HIKe (HybrId Kernel eBPF forwarding)

SRv6 SDN

k8s-SRv6 - Extending Kubernetes with SRv6

rose-srv6 ready-to-go Virtual Machine (and Tutorials)

Emulation tools

Testbeds IntErconnections with L2 overlays – SRv6 for SFC

SREXT kernel module

SREXT is a kernel module providing the basic Segment Routing functions in addition to more advanced ones. It can be used as a standalone SRv6 implementation or as a complement to the existing SRv6 kernel implementation (kernel 4.10 and later kernels).

SRNK - SR proxy Native Kernel

SRNK is an SR proxy which acts as relay mechanism in order to support SRv6 unaware VNFs. It is implemented extending the current support for SRv6 in Linux kernels (>= 4.14).

pyroute2 extensions to support SRv6

pyroute2 is a lightweight netlink library written in python. We submitted a patch which adds the support for SRv6 basic functionality.

Changelog:

The extension is available from 0.5 release.

SRPerf - a Performance Evaluation Framework for SRv6 implementations

SRPerf is a performance evaluation framework for software and hardware implementations of SRv6.

SRv6 uSID (micro segment) implementation in Linux

This project implements the SRv6 “micro segment” (uSID for short) solution in Linux. This solution corresponds to the NEXT-C-SID Flavor defined in the Internet Draft Compressed SRv6 Segment List Encoding in SRH.

The processing of micro segments is performed by the Linux kernel, extending the existing SRv6 implementation. The iproute2 userspace tool has been modified to support the configuration of the SRv6 uSIDs.

SRv6 uSID (micro segment) implementation on P4

p4-srv6-usid implements the SRv6 “micro segment” (uSID for short) solution using the P4 language and shows a DEMO. This solution corresponds to the NEXT-C-SID Flavor defined in the Internet Draft Compressed SRv6 Segment List Encoding in SRH.

The SRv6 uSID solution is an extension to the SRv6 Network Programming model, which allows expressing SRv6 segments with a very compact and efficient representation.

SRv6-PM (SRv6 Performance monitoring)

srv6-pm accurate Per-Flow Packet Loss Monitoring in Linux kernel

HIKe (HybrId Kernel eBPF forwarding)

HIKe is a programmable data plane architecture that integrates the packet forwarding and processing based on the standard Linux kernel networking with the ones based on custom designed eBPF programs. HIKe does not want to trade the flexibility and generality of Linux kernel networking with eBPF performances, but wants to take the best of both worlds. In the context of the ROSE project, we use HIKe to speed up the performance of SRv6 software routers (altough HIKe is not limited to SRv6!).

SRv6 SDN

SRv6 SDN a collection of modules implementing different functionalities of a SDN controller for SRv6

k8s-SRv6

k8s-SRv6 extends Kubernetes to make use of SRv6. We have extended the Calico-VPP Kubernetes networking plugin with a new SRv6 overlay that supports:

rose-srv6 VM and tutorials

The rose-srv6 VM is a ready-to-go Virtual Machine available for tutorial and development purposes. The rose-srv6 VM includes an emulated network environment based on Mininet and relies on the Linux kernel for implementing the SRv6 data plane. In the control plane, the Linux nodes offer a gRPC southbound API to a controller developed in python.

Download and installation instructions.

Emulation tools

The emulation tools are a collection of projects meant to support SRv6 experiments both over Mininet and IAAS like testbeds. Hereafter the list of projects composing our emulation tools:

Testbeds IntErconnections with L2 overlays – SRv6 for SFC

The work concerns the deployment of arbitrary overlay topologies over multiple testbeds and the Service Function Chaining using SRv6 (IPv6 Segment Routing): “TIE-SR: Testbeds IntErconnections with L2 overlays – SRv6 for SFC” (see slides: https://goo.gl/utvxzF).

VM images

See the rose-srv6 VM

Scientific papers

The Team