9
0
Fork 0
Commit Graph

245 Commits

Author SHA1 Message Date
Pablo Neira Ayuso 8419e33c4a examples: ggsn.conf: document gtp-linux toggle
Enable Linux kernel GTP datapath driver.
2016-05-10 19:06:54 +02:00
Pablo Neira Ayuso d9d7be339d ggsn: cmdline: no need to specify interface anymore
--gtpnl is now gone, instead you have --gtpkernel that behaves as an on/off
toggle. We full rely on the kernel routing base to select the real device to
transmit.

I have updated ggsn/cmdline.ggo and then run 'gengetopt' to refresh the
automatic code generation for command line options that openggsn uses.
2016-05-10 19:06:01 +02:00
Pablo Neira Ayuso 7b31987a46 ggsn: gtp-kernel: adapt gtp_dev_create() to its new interface
Andreas modified this interface, so update so this compiles again.
2016-05-10 18:51:00 +02:00
Neels Hofmeyr f89dc4e127 queue_new(): fix NULL dereference on allocation failure
Coverity complains about a 'Dereference before null check' on *queue.
So, push the NULL check further up.

Though I doubt that 'return EOF' is the proper way to handle allocation
failure, this patch is only about the NULL dereference.

Fixes: CID#57918
2016-04-29 13:01:06 +02:00
Holger Hans Peter Freyther b29ff1da55 jenkins: Add the build script from jenkins here
This can be used to replicate a build issue more easily.
2016-04-13 19:02:13 -04:00
Daniel Willmann d997552d29 gtp: Handle gtpv1 in gtp_update_pdp_conf() correctly
libgtp cannot understand its own update pdp request (in gtp v1)
Only require the conditional and mandatory fields for gtpv1 and not
others.
Refer to 3GPP TS 29.060 Ch. 7.3.4
2016-02-05 07:48:20 +01:00
Daniel Willmann 05f3ef3eb8 gtp: Make gtp_update_pdp_conf() work for gtp0 and gtp1 connections
pdp_getgtp1(&pdp, get_tei(pack)) works like pdp_getgtp0 for gtp0
connections.
Using get_hlen() for gtpie_decaps is used in other places to decode ies
for both version 0 and 1.
2016-02-04 13:17:19 +01:00
Daniel Willmann 134a7752fd gtp: Pass pdp along when calling gtp_req() in gtp_update_context()
With no pdp parameter gtp_req() will send the packet to TEID 0 which is
not what we want. When trying to modify an established pdp context the
correct TEID of that context must be used.
2016-02-04 13:17:02 +01:00
Holger Hans Peter Freyther 8ddb6805a9 gtp: Do not leak the restart counter file handle in case of error
If the file exists but can not be read the file would not be closed.
Jump to a label that will close f.

Fixes: CID#57917
2016-01-23 10:40:52 +01:00
Holger Hans Peter Freyther 3a9befb516 gtp: Fix a bunch of compiler warnings when just including gtp.h
Attempt to fix a bunch of compiler warnings in OpenBSC.
‘struct pdp_t’ declared inside parameter list
2016-01-23 10:16:53 +01:00
Andreas Schultz c80680a9c4 ggsn: fix autotool pkg-config invokation
see https://autotools.io/pkgconfig/pkg_check_modules.html, Optional Modules
for explanation

Signed-off-by: Andreas Schultz <aschultz@tpip.net>
2015-12-21 08:37:50 +01:00
Andreas Schultz c5fbf9bd68 ggsn: update gpt-kernel logging to libosmocore
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
2015-12-21 08:37:26 +01:00
Pablo Neira Ayuso 4b075b6cb8 ggsn: add support for GTP kernel data encapsulation
This patch adds the -g, --gtpnl=device option that allows you to
enable the GTP kernel tunneling mode in openggsn. You have to specify
the real downlink device that will be used to tunnel traffic, eg.

	-g=eth0

This means that the gtp0 device will be created and it will use eth0
as the real device to encapsulate packet coming from the Internet that
are addressed to the MS (so the tunnel devuce encapsulates these IP
packets in GTP packets when traveling to the SGSN).

Alternatively, you can also add this to the ggsn.conf configuration file:

	gtpnl eth0

The device has to be the real device that can route packets to the SGSN,
if you select the wrong device, the kernel routing code may not find a
way to reach the SSGN, you've been warned.

Therefore, if this option is set, the operational becomes the following:

1) A gtp0 device is created via rtnetlink and configure the socket
   encapsulation infrastructure in the kernel.
2) Whenever a PDP context is created, this adds the necessary tunnel
   configuration via genetlink GTP interface.
3) Whenever a PDP context is destroyed, this deletes the tunnel via
   genetlink GTP interface.
4) Destroy the gtp0 device if ggsn is stopped, including all of the
   existing tunnels.

You require the osmo-ggsn.git tree, which contains the kernel module
gtp.ko and the libgtpnl library that you have to compile and install.
Make sure you have loaded the gtp.ko kernel module before launching
the ggsn daemon using the kernel driver mode, otherwise you will get
a nice "operation not supported" error message ;-).

This patch also adds supports for "ipup" configuration option to invoke
an external script after the gtp0 device has been brought up. Typical
command to add the route to reach the MS behind the GGSN is required,
eg. ip route add 10.0.0.0/8 dev gtp0.

The (horrible) ggsn parser has been manually extended to support the
new configuration option. That code doesn't look nice, but it just
mimics what we already have there for consistency, please don't blame
me for that.

If you want to run in debugging mode, I suggest you to use:

	sudo ggsn -c ggsn.conf -f -d

Note that you do have to run openggsn as root to bring up the gtp0
device. You have to see this message that announce that the GTP kernel
mode is enabled.

openggsn[1106]: ggsn.c: 656: Using the GTP kernel mode (genl ID is 25)

This patch also automagically sets up route to reach MS from Internet
just like tun mode does. This is fundamental to get this working,
better don't leave to the admin, he may forget to add this route.

In this patch, I tried to encapsulate this new feature as much as
possible as Harald initially suggested.

To compile this feature, you have to pass --enable-gtp-kernel, ie.

./configire --enable-gtp-kernel

Otherwise, the code to interact with the gtp kernel part is not compiled.

Signed-off-by: Andreas Schultz <aschultz@tpip.net>
2015-12-21 08:37:11 +01:00
Holger Hans Peter Freyther 89dcb614e8 Release 0.92 of the GGSN needed for the gtphub 2015-11-30 14:06:09 +01:00
Harald Welte ac0b4f17fe update version to 0.92 2015-11-20 10:34:17 +01:00
Andreas Schultz 10abfba949 convert literal APN name to protocol encoded version before use
The definition of the APN field format in GTPv1 is hidden in a chain
of documents.

3GPP TS 29.060 (the GTPv1-C specification) Section 7.7.30:

> The Access Point Name contains a logical name (see 3GPP TS 23.060 [4]).
> It is coded as in the value part defined in 3GPP TS 24.008

3GPP TS 24.008 Section 10.5.6.1:

> The value part is defined in 3GPP TS 23.003.

3GPP TS 23.003 Section 9.1:

> The APN consists of one or more labels. Each label is coded as a one
> octet length field followed by that number of octets coded as 8 bit
> ASCII characters

This converts a literal APN (e.g. Label1.Label2.Label3) to a structured
field (e.g. \006Label1\006Label2\006Label3)

Signed-off-by: Andreas Schultz <aschultz@tpip.net>
2015-11-13 17:16:03 +01:00
Holger Hans Peter Freyther a377b0874a Revert "Makefile.am: define ACLOCAL_AMFLAGS, include directory m4"
aclocal: couldn't open directory `m4': No such file or directory

This reverts commit 04cbae494d.
2015-11-07 20:47:26 +01:00
Alexander Huemer 04cbae494d Makefile.am: define ACLOCAL_AMFLAGS, include directory m4 2015-11-07 12:41:25 +01:00
Alexander Huemer db852a14fe fix some format specifiers 2015-11-07 12:40:48 +01:00
Alexander Huemer e740e81281 configure.in -> configure.ac 2015-11-07 12:39:32 +01:00
Neels Hofmeyr 2ea010a1ed gitignore: add 'compile' (from autoconf) 2015-11-02 14:27:53 +01:00
Neels Hofmeyr 041824dfc8 sgsnemu: improve an error message 2015-11-02 14:27:44 +01:00
Holger Hans Peter Freyther cd14094bb6 Dump dead code and never look at it again
This seems to be a wrong search. It seems to assume that there are
no buckets. Let's just remove it before looking at it too much.
2015-11-02 14:13:31 +01:00
Neels Hofmeyr 0dc4748447 add todo comments 2015-11-02 14:13:31 +01:00
Neels Hofmeyr 6c06d25667 make install: also install gtpie.h 2015-10-27 14:57:18 +01:00
Neels Hofmeyr e845cb9505 gtp.c: fix an error log.
Fix: the code handles fd1u but prints fd1c.
2015-10-12 14:23:54 +02:00
Neels Hofmeyr b18e811e24 gtp.h: rename gsn_t.dublicate to duplicate.
Fix spelling dublicate -> duplicate.

This is potentially breaking API compat, but currently, no users of
gsn_t.dublicate are known.
2015-10-12 14:10:27 +02:00
Neels Hofmeyr 9b09738891 gtp.c: improve 3 error logs.
It would print the memory location of the address buffer. Instead, print the
human readable host address and port.

The current code base supports only IPv4, and thread safety is apparently not
required, hence just use inet_ntoa(). (The IPv6 and thread capable version is 4
times longer and harder to read.)
2015-10-12 14:09:57 +02:00
Michael McTernan b07d07072e openggsn: Check return codes and take error paths on failure.
Return early when socket() returns -1, and check return codes
where indicated by some TODOs. This removes 2 TODOs and fixes
a compiler warning about assignment to a variable which then
isn't used.

Signed-off-by: Michael McTernan <mike.mcternan@wavemobile.com>
2015-05-02 07:53:34 +02:00
Holger Hans Peter Freyther 633cc0d7cb debian: Address lintian warning about -dbg package 2015-03-14 20:25:35 +01:00
Holger Hans Peter Freyther 7bfe18039b debian: Require libosmocore 2015-03-14 20:21:44 +01:00
Holger Hans Peter Freyther 0576f3bebf debian: Move to multi-arch support 2015-03-14 20:17:46 +01:00
Holger Hans Peter Freyther 91d0ee5c14 lib: Speculatively add libosmocore cflags to the lib 2014-12-23 19:52:54 +01:00
Holger Hans Peter Freyther 6ab58b466a ggsn: Move printf to DEBUGP statements in the ggsn as well
The specific log statements are not great yet but at least they
will end up in the log file. In the future everything should be
related to the IMSI or at least the tunnel id.
2014-12-04 19:29:57 +01:00
Holger Hans Peter Freyther 8e7e3ef686 ggsn: Remove unused dump/logging method 2014-12-04 19:19:33 +01:00
Holger Hans Peter Freyther c38bf64e3f ggsn: Be able to set the log level for the text file
Fixes: SYS#599
2014-12-04 18:54:58 +01:00
Holger Hans Peter Freyther 9c7fd8edc4 logging: Switch to using libosmocore logging for all the code 2014-12-04 16:51:15 +01:00
Holger Hans Peter Freyther e527ef105f syserr: Remove unused error packet logging code 2014-12-04 16:49:38 +01:00
Holger Hans Peter Freyther 01b40d0690 gtp: Make these regions runtime debuggable 2014-12-04 16:49:37 +01:00
Holger Hans Peter Freyther 752314ac43 gtp: Kill unused and non public method 2014-12-04 16:46:30 +01:00
Holger Hans Peter Freyther 42ca1d1a38 gtp: Move to using LOGP for logging GTP packages
Make libgtp depend on libosmocore and use the generic logging
infrastructure for it.
2014-12-04 16:45:59 +01:00
Holger Hans Peter Freyther ca524ef344 Begin to require libosmocore and libosmovty
We are not too specific about the version yet
2014-12-03 19:59:15 +01:00
Holger Hans Peter Freyther 839c2211dc debian: Attenpt to fix lintian warning on weak-dependency 2014-09-23 16:59:36 +02:00
Holger Hans Peter Freyther 7397b88485 debian: Make it a proper git version 2014-09-23 16:59:36 +02:00
Holger Hans Peter Freyther f97f58deb2 debian: Harden and build debug packages 2014-09-23 16:59:36 +02:00
Holger Hans Peter Freyther 493ec593f7 debian: Modernize/Fix the debian control file
W: openggsn source: ancient-standards-version 3.8.4 (current is 3.9.5)
W: libgtp: package-name-doesnt-match-sonames libgtp0
2014-09-23 16:59:36 +02:00
Holger Hans Peter Freyther 827aec1f31 debian: Add dependency for LSB script
E: openggsn: init.d-script-missing-dependency-on-remote_fs etc/init.d/openggsn: required-start
E: openggsn: init.d-script-missing-dependency-on-remote_fs etc/init.d/openggsn: required-stop
2014-09-23 16:59:36 +02:00
Holger Hans Peter Freyther 0b705bb4d1 debian: Create new changelog entry to please new tools
dpkg-source: error: can't build with source format '3.0 (native)': native package version may not have a revision
2014-09-23 16:59:36 +02:00
Daniel Willmann c190896437 openggsn.service: Add Install section to systemd service file
This way the service can be enabled through
> systemctl enable openggsn
2014-08-21 10:15:33 +02:00
Holger Hans Peter Freyther 5816bcfaff gtp: Speculative FreeBSD compile fix for htobe64 2014-04-04 11:43:09 +02:00