Bonaventure, OlivierXhonneux, MathieuMathieuXhonneux2025-05-142025-05-142025-05-142018https://hdl.handle.net/2078.2/5974In modern networks, operators often deploy intermediate network functions capable of analyzing and altering traffic. IP networks have been built upon the key principle that routers must forward packets along the shortest path between source and destination. This behavior is not always adapted to the deployment of network functions. A recent network architecture, Segment Routing, allows traffic flows to be steered across specific paths and opens up new possibilities for the development of network functions. This architecture operates at the network layer, as a consequence, network functions leveraging Segment Routing must be developed in the kernel of the operating system, network layer mechanisms being usually implemented there. However, developing features at the kernel level is a cumbersome process. The purpose of this work is to study how the development of Segment Routing network functions can be facilitated. To this end, we implement an interface for programmable IPv6 Segment Routing (SRv6) functions in Linux. This interface leverages BPF, an in-kernel virtual machine allowing to inject at runtime user-specific code in kernel components. SRv6 network functions can be developed as independent C programs and dynamically loaded into the network stack using this interface. They can then leverage the functionalities of the SRv6 data plane. The flexibility and performance of this interface is assessed through the development of three use-cases, implementing OAM and load balancing services. The implementation of these use-cases demonstrate that the SRv6 BPF interface provides the required flexibility to implement a wide range of network functions. Experimental results show that the use of BPF induces almost no performance overhead. Finally, this feature has been sent upstream and will be released in Linux 4.18.NetworkIPv6LinuxKernelSegment-routingAn interface for programmable IPv6 Segment Routing network functions in Linuxtext::thesis::master thesisthesis:14865