View on GitHub

hike

Hybrid Kernel/eBPF data plane

ROSE project

HIKe is a programmable data plane architecture that offers the dynamic composability of micro eBPF programs into “chains”. HIKe provides the abstraction of an execution environment in which the eBPF/HIKe programs can be combined together with programming operations (arithmetical, conditional, jump instructions) with no need of recompiling eBPF/HIKe programs. The HIKe architecture integrates the packet forwarding and processing based on the standard Linux kernel networking with the ones based on the custom designed eBPF/HIke programs in order to speed up performance of SRv6 software routers.

Architectural overview of HIKe

More details about the overall HIKe architecture can be found here. In the paper “Performance Monitoring with H^2: Hybrid Kernel/eBPF data plane for SRv6 based Hybrid SDN” we leveraged HIKe for supporting SRv6 Networking and Performance Monitoring with significant increase in performance with respect to conventional Linux networking stack based solutions.

We have designed and implemented HIKe in the context of the ROSE project.

HIKe Linux implementation source code

HIKe Dependencies

Please follow the link to check out and resolve all the dependecies needed for compiling the HIKe framework and running testbeds.

IPv6 L3 VPN with Performance Monitoring Testbed

Network topology

+--------------+                                        +--------------+
|      h1      |                                        |      h2      |
|              |                                        |              |
|  cafe::1/64  |                                        |  cafe::2/64  |
|              |                                        |              |
|   veth-h1r1  |                                        |   veth-h2r2  |
|              |                                        |              |
+------+-------+                                        +-------+------+
       |                                                        |
       |                                                        |
       |                                                        |
+------+-------------------------+    +-------------------------+------+
|              r1                |    |              r2                |
| veth-r1h1            veth-r1r2 +----+ veth-r2r1            veth-r2h2 |
|                                |    |                                |
| cafe::100/64     fd00:12::1/64 |    | fd00:12::2/64     cafe::100/64 |
|  (hike)                        |    |   (hike)                       |
|                                |    |                                |
+--------------------------------+    +--------------------------------+

In this example, the HIKe framework is used for implementing an IPv6 L3 VPN service based on Segment Routing for IPv6 networks. Moreover, such VPN also provides Performance Monitoring capabilities within the domain of a tenant.

The example is made of 2 hosts (h1 and h2) and 2 routers (r1 and r2). Hosts h1 and h2 are respectively connected to router r1 and router r2. The purpose of IPv6 L3 VPN is to connect h1 and h2 together and make it possible to exchange data between them. Without the VPN service, the communication between the two hosts is not possible due the presence of a public network (the one between r1 and r2).

The IPv6 L3 VPN based on SRv6 networks leverages unidirectional tunnels. Therefore, to connect host h1 with host h2, we need to create a i) SRv6 tunnel which starts from the r1 and terminates on r2 (for short r1->r2) and ii) a SRv6 tunnel which starts from r2 and terminates on r1 (for short r2->r1).

To show the great flexibility of the HIKe framework, we choose to realize such tunnels following two different approaches. The SRv6 tunnel r1->r2 is realized using the HIKe programs and the Linux kernel routing capabilities, while the r2->r1 tunnel is made only using the SRv6 Linux kernel networking infrastructure.

Considering the tunnel r1->r2, in node r1 we use the HIKe framework to apply the SRv6 policy relying on the HIKe SRv6 encap program and the HIKe SRv6 Performance Monitoring program (for monitoring the packet loss). In node r2, we leverage the HIKe framework only for the performance monitoring activities and we use the SRv6 End.DT6 of the SRv6 Linux kernel networking stack for decapsulating the VPN packets.

On the contrary,for the reverse tunnel r2->r1 we do not use any HIKe facilities. On the r2 side, we rely only on the SRv6 Linux kernel networking stack which encapsulates the plain IPv6 packets coming from h2 using the traditional SRv6 Linux kernel encap. On the r1 node we decapsulate packet using the SRv6 End.DT6 made available, also in this case, by the Linux kernel networking stack.

To test first hand how this VPN service works, you can launch the ./testbed_vpn.sh script in the terminal. Therefore, it will present you with 4 different tabs: h1, r1, r2, h2. To facilitate the interaction with those nodes, we use tmux along with the mouse support. In this way you can jump over any node and, using a packet sniffer, you can see the traffic.

To generate VPN traffic, please go into node h1 and ping the h2 node. Private addresses of h1 and h2 are cafe::1 and cafe::2 respectively.

  ping -n cafe::2
  PING cafe::2(cafe::2) 56 data bytes
  64 bytes from cafe::2: icmp_seq=1 ttl=63 time=0.585 ms

Scientific papers

HIKe Linux implementation Team