OpenGGSN IPv6 PDP context support

Harald Welte laforge at
Thu Aug 3 00:34:41 UTC 2017

Dear all,

I've been busy all day (and night) implementing IPv6 PDP context support
in OpenGGSN.  The related code is currently in gerrit for review,
you can also use the 'laforge/ipv6' branch of openggsn.git

In terms of configuration, all you need to do is to specify IPv6 address
+ prefix as the 'net'.  If you don't specify a 'dynip' config option,
it will automatically use the network/prefix specified in 'net'.  

My minimalistic example config file for testing looks like this:

net 2001:780:44:2000:0:0:0:0/120

Which means it is listening for GTP on IPv4 (no IPv6 on the GTP side
supported), and will create a tun device with the stated IPv6 address
and a /120 netmask.  Your GGSN is 2001:780:44:2000::1, and UEs will get
addresses allocated from 2001:780:44:2000::2 onwards.

It's important to configure your UE to actually request and IPv6 PDP
context.  If no v4/v6 is specified in the request, it will default to
IPv4.  If IPv4 is requested while having a v6 pool configured, OpenGGSN
will reject the PDP Context Creation due to not being able to serve a v4
PDP context.

I don't have immediate plans for supporting IPv6 on the outer
(transport) layer for now.  I also have no plans to support v4 and v6
from a single OpenGGSN at this time.  It's quite easy to run two
different OpenGGSN instances in parallel, on two different IPv4
addresses for the GTP side, and then use OsmoSGSN's PDP context routing
to those different GGSNs.  This way it is possible to have a v4 APN and
a v6 APN without having to do any additional development right now.

Architecturally, having multiple IP pools (and some for v4 and some for
v6) is definitely possible, and should actually be easy.  We just need
to switch to a configuration mechanism that supports something like
this, such as libosmovty.  Once we have a VTY based configuration, it
should be simple to operate multiple IP pools or multiple virtual APNs
on one OpenGGSN.

WARNING: The Linux Kernel GTP code does *not* support IPv6 user payload
at this point.  So if you want IPv6, you will need to use regular,
old-fashioned userspace GTP-U in OpenGGSN for now.  Controbutions are
always welcome, of course!

- Harald Welte <laforge at> 
"Privacy in residential applications is a desirable marketing option."
                                                  (ETSI EN 300 175-7 Ch. A6)

More information about the osmocom-net-gprs mailing list