What is GTP / GTP in GPRS
-
GTP, the GPRS Tunneling Protocol was first introduced with GPRS, the
packet-switched add-on to GSM networks
-
PDP contexts are sessions with an external packet data network (IP)
which provide a tunnel between the phone and that external network
-
GTP is used betwen the SGSN and GGSN to tunnel the User-plane (IP)
packet data of a PDP Context
-
latest definition in (3GPP TS 29.281 version 12.1.0 Release 12)
GTP in UMTS
-
In UMTS, PDP originally remained between SGSN and GGSN
-
With HSPA in later releases (Rel7+), user plane is moved out of SGSN
and NodeB generates GTP directly
-
hNodeB (femtocell) architecture also originates GTP directly in hNodeB
GTP in LTE
-
LTE uses GTP at even more interfaces between network elements
-
LTE introduces GTP-C Version 2 for control plane, but user plane
remains GTP-U v1 like before.
-
What used to be the GGSN is now called PDN-GW in LTE
GTP
-
control (GTP-C) and user (GTP-U) plane protocol
-
UDP based on well known ports (3386, 2152)
-
per PDP context/tunnel identifiers (TID)
-
one for each direction(!) in GTP v1
-
is the only identifier for tunnel, not IP/Port tuples!
-
support for packet sequnce numbers and reordering
GTP-C
-
exchanging meta data
-
assigning parameters to client:
-
IPv4 addresses
-
IPv6 prefixes
-
DNS servers
-
…
-
establishing and removing tunnels
-
moving tunnel endpoints to other SGW’s
GTP-U
-
per client tunnelling of IP packets
-
path maintenance
-
echo requests/replies
-
error reporting
Problems with Userspace GTP
-
Userspace GTP was fine with GPRS speeds
-
Packet rates / bandwidths small compared to routing
-
With HSPA and particularly LTE, the world has changed
-
Signalling / Control Plane traffic is very limited
-
User Plane traffic is very high bandwidth
Osmocom kernel-level GTP
-
Move bandwidth-critical User Plane into Linux kernel
-
Keep Control Plane stays in Userspace (OpenGGSN)
-
Use netlink based API to control user plane in kernel
-
Started by Harald Welte + Pablo Neira @ sysmocom in 2012
-
unfortunately abandoned due to customer disappearing
-
picked up by Andreas Schultz @ travelping in 2015
-
fixed Harald + Pablo’s bugs
-
introduce network namespace support
Design
-
netlink API built on top of genl
-
initialization:
-
create GTP socket in userspace
-
create tun like network interface
-
bind GTP sockets to it
-
for each PDP context, user space adds one record
-
IP address assigned to MS for this PDP context
-
TEIDs to identify mobile-originated packets
-
SGSN IP for GTP header of mobile-terminated packets
Design
-
netlink API built on top of genl
-
all PDP contexts share one tun device
-
one tun device for all subscribers, not one per subscriber
STATUS
-
working
-
GTP-U v0 and v1 for IPv4 over IPv4
-
multiple tunnels supported
-
only single APN (multiple IP ranges not permited)
-
Limitations
-
no IPv6 support
-
no offload support
-
existing users (both GPLv2)
TODO
-
TODO:
-
final round of clean-up, submission for mainline
-
fix or remove IPv6 support
-
discussion items:
-
path MTU discovery
-
implications by/for offloading faetures (csum / gso / …)
-
wishlist
-
light-weight tunneling integration