  With the advent of Software Defined Networks (SDN), Network Function
Virtualisation (NFV) or Service Function Chaining (SFC), operators expect
networks to support flexible services beyond the mere forwarding of packets.
The network programmability framework which is being developed within the IETF
by leveraging IPv6 Segment Routing enables the realisation of in-network
functions. In this paper, we demonstrate that this vision of in-network
programmability can be realised. By leveraging the eBPF support in the Linux
kernel, we implement a flexible framework that allows network operators to
encode their own network functions as eBPF code that is automatically executed
while processing specific packets. Our lab measurements indicate that the
overhead of calling such eBPF functions remains acceptable. Thanks to eBPF,
operators can implement a variety of network functions. We describe the
architecture of our implementation in the Linux kernel. This extension has been
released with Linux 4.18. We illustrate the flexibility of our approach with
three different use cases: delay measurements, hybrid networks and network
discovery. Our lab measurements also indicate that the performance penalty of
running eBPF network functions on Linux routers does not incur a significant
overhead.
