Wiki » History » Version 1

Version 1/3 - Next » - Current version
laforge, 07/28/2016 06:55 PM

Linux Kernel GTP-U Implementation

The GTP (GPRS Tunneling Protocol) is split into a control plane and a user plane. While the control plane is concerned with the signalling, i.e. the establishment and tear-down of tunnels for PDP-contexts, the user plane is carrying all the user IP data inside the tunnel.

As such, the control plane has to process only few signalling messages, while the user plane is facing multi-gigabit speeds even in small 3.5G or 3G networks.

The user plane of many other IP tunneling protocols had been implemented in the Linux kernel before, including IPIP, SIT, GRE, PPPoE, L2TP, etc.

Short History

In 2012, Harald Welte at sysmocom started a kernel-level GTP-U implementation, but got side-tracked due to changing priorities. Pablo Neira was brought in to continue, but again got side-tracked. In 2015, Andreas Schultz of Travelping came to the rescue and finally fixed the known remaining bugs, extended it with more features, facilitating mainline Linux inclusion. Linux kernel versions from 4.7.0 onwards include the module.


In order to control the kernel-side GTP-U plane, a netlink based control interface between GTP-C in userspace and GTP-U in kernelspace was invented.

The encoding and decoding of these control messages is implemented in the libgtpnl (library for GTP netlink). The library is available from

known users