aboutsummaryrefslogtreecommitdiffstats
path: root/ggsn/gtp-kernel.c
AgeCommit message (Collapse)AuthorFilesLines
2017-11-14gtp-kernel: Add device nime in pdp_debug() log statementsHarald Welte1-4/+5
Change-Id: Iad0e7a9fa48fcddc31b8d555244581efdbd61b4e
2017-11-14gtp-kernel: Add function name to pdp_debug() function callsHarald Welte1-4/+4
This allows us to distinguish "add" from "del" operatons in the log Change-Id: Ibe2e76a6eecc7b5fa5f44ab2c1578597138e30b9
2017-11-14gtp-kernel: Get rid of SYS_ERR where not applicableHarald Welte1-14/+8
SYS_ERR is for logging an error from the (operating) system including the errno value. For general logging, we have DEBUGP/LOGP. Let's convert the gtp-kernel logging over. This also fixes the related line ending mess-up as SYS_ERR adds a LF while LOGP/DEBUGP don't. Change-Id: Idb4069a28227b770e20d62bf306cd294f47146ae
2017-11-14gtp-kernel: proper cleanup in error pathHarald Welte1-0/+2
When genl_socket_open() succeeds but genl_lookup_family() fails, we have to clean up the socket that we just opened. This requires a new version of libgtpnl :/ Change-Id: I31df046530347f88cb7b16c37a899b456ed1b080
2017-11-14gtp-kernel: Make sure repeated calls to gtp_kernel_init() are safeHarald Welte1-15/+25
We have to factor out the "run once" code and make sure to really only run that once, while the per-device code remains in the gtp_kernel_init() function. Change-Id: Iba5bd71e4b725eef59fe4f233fbb965e396a06c3
2017-11-14gtp-kernel: Avoid global state variableHarald Welte1-16/+0
Whether or not GTP kernel support is enabled is the property of a given APN, and not a global state variable. Change-Id: Iff3bd8a52bd6c20f9811ee41ff700486d08591f3
2017-11-14gtp-kernel: Get rid of hard-coded kernel GTP device nameHarald Welte1-16/+11
The existing kernel GTP support code inherited from OpenGGSN was overly simplistic and didn't support multiple GTP devices or user-defined GTP device names. Let's remove that restriction in this patch Change-Id: I51df223788fd5b7cf8099463b8aa0ca4a4fd1c96
2017-11-13gtp_kernel: Change gtp_kernel_init() function signatureHarald Welte1-3/+14
Rather than taking an explicit in_addr, prefix_length and a string-formatted prefix, let's pass in an in46_prefix and derive the other representations from it. Also, don't refer to a no-longer-existing global 'ipup' variable but add it as a function argument. Change-Id: Ife87142c86589b4fa4062d62afe3670467548589
2017-11-06sgsnemu: Don't leak FILE handle in proc_read()Harald Welte1-34/+10
Change-Id: Ie22e6a9bc172427e867e7a4001b6c710477a232b Fixes: Coverity CID#178660
2017-09-05gtp-kernel: Remove dependency to cmdline.[ch]Harald Welte1-9/+4
Change-Id: I760f25df609c309eba4d5716f3e23b49320449bf
2017-08-09ippool: Add IPv6 support to IP pool implementationHarald Welte1-13/+2
Extend the IP pool implementation to be able to manage both pools of 32bit addresses (IPv4) as well as pools of 128bit addresses (IPv6) Change-Id: Ib98cc4bf634d6be9a7bf8c03a24e629455fcafc8
2017-02-23gtp-kernel: Fix tunnel creation/removal for GTP Version 1Harald Welte1-2/+5
When Linux Kernel GTP-U support is enabled, OpenGGSN so far only worked with GTPv0,but not with GTPv1, as the TEI values were not correctly configured. This patch fixes the initialzation of the local and remote TEI before using libgtpnl to create a tunnel context in the kernel. Change-Id: I3e953ff5b4ab44c26dbbe20d18b61038fa57ff32
2016-05-10ggsn: cmdline: no need to specify interface anymorePablo Neira Ayuso1-1/+1
--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-10ggsn: gtp-kernel: adapt gtp_dev_create() to its new interfacePablo Neira Ayuso1-2/+1
Andreas modified this interface, so update so this compiles again.
2015-12-21ggsn: update gpt-kernel logging to libosmocoreAndreas Schultz1-12/+9
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
2015-12-21ggsn: add support for GTP kernel data encapsulationPablo Neira Ayuso1-0/+240
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>