Age | Commit message (Collapse) | Author | Files | Lines |
|
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
The ordering of the error case exit was wrong and would
attempt to release the wrong socket.
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
This add basic network namespace support by changing to global
gtp_instance_list into a pre namespace list.
Before this change all pdp context would be visible from all
network namespaces, now only the namespace that they belong too,
can see them.
Also selectively destroy all gtp devices when a namespace is
destroyed.
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@soleta.eu>
|
|
Remove the support for genl_register_family_with_ops for
Linux < 3.13. Also reorder the initialization to be more
in line with similar modules.
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@soleta.eu>
|
|
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@soleta.eu>
|
|
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@soleta.eu>
|
|
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@soleta.eu>
|
|
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@soleta.eu>
|
|
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@soleta.eu>
|
|
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@soleta.eu>
|
|
Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: Pablo Neira Ayuso <pablo@soleta.eu>
|
|
The kernel module still only listed me as author, even though Pablo
was doing most of the work on it after my initial incomplete version.
|
|
With this change, application don't need to pass to the linker -lmnl
which is the right way to make it since they don't directly refer to
mnl_* functions.
|
|
This function allows us to set the gtp0 device configuration the route
to encapsulate all traffic that is addressed to the MS from the GGSN
|
|
This allow reusing this code in follow up changes.
|
|
Add new attribute to the gtp tunnel object, this extension is required
by GTPv0 since the same flowid needs to be used for uplink and downlink
packet.
|
|
This field is very important, downlink and uplink packet shall use
the same flow ID.
|
|
So it is displayed like in wireshark.
|
|
Make sure userspace passes a u64.
|
|
Use the corresponding hash function depending on the version
type. Using ipv4_hashfn was working with GTPv1 because the
TEI is also 32-bits, bit GTPv0 was broken.
|
|
|
|
Add some instruction in the proper way that can be enabled on the
demand to debug problems. Let's make it quite verbose at this stage
to relax this later.
Make sure debugfs is mounted:
# mount -t debugfs nodev /sys/kernel/debug
To enable:
echo -n 'file gtp.c +p' > /sys/kernel/debug/dynamic_debug/control
To disable:
echo -n 'file gtp.c -p' > /sys/kernel/debug/dynamic_debug/control
More information here on how to use this: http://lwn.net/Articles/434856/
|
|
This function allows you to check if there is a MS address or TEID
that already exists in the gtp forwarding base in a very fast way,
without having to dump the entire forwarding base and doing a search
from userspace.
|
|
With this fix, osmo-sgsn doesn't ignore our tunneled packet
anymore. It was complaining about incorrect packet length
for received packets.
And osmo-ggsn is working in my testbed :-).
|
|
TS 29.060 expresses thing is a quite complicated way just to say
that if any of the optional fields is there, then all optional
fields become mandatory :-).
"This field shall be present if and only if any one or more of the S,
PN and E flags are set.".
So, if any flag is set, we *always* have 4 extra bytes.
|
|
A typo slipped through into that file and it stopped compiling.
|
|
We cannot strip the UDP header until we are sure that this is
a data packet, otherwise this passes a malformed packet to
userspace. The header stripping is now the very last operation
in the processing of GTP packets.
|
|
Not needed anymore after 5747406dbb4a.
|
|
We can use this to specify 'gtp0' from openggsn, so we make sure that
it always uses the same tunnel device on creation. If it already exists,
it will return EEXIST. This is used to skip the problem of lacking
NLM_F_ECHO in the rtnetlink link interface that allows us to know the
name of the gtp device that has been dynamically allocated from the
kernel.
And, finally, I don't find any use case for having more than one tunnel
device when integrating this with openggsn.
This patch also adjusts tools/gtp-link-add.c which needs some care, since
it is not yet using any of the library functions. This tools are likely
to be useful for troubleshooting and debugging.
|
|
openggsn already sets up the UDP sockets that we need for the control
and user planes of GTP. Since we cannot bind two UDP sockets (one from
userspace and another from the kernel) to the same port, change the
current code to pass the socket descriptors that has been allocated
by openggsn (or whatever daemon which uses the GTP kernel
infrastructure).
Two new attributes are added to set up the tunnel device: IFLA_GTP_FD0
(for GTP0) and IFLA_GTP_FD1 (for GTP1u), which specify the UDP socket
created from userspace. Thus, the GTP kernel code only takes care of
enabling the kernel UDP encapsulation routine.
|
|
This function allows you to destroy the gtpX device.
|
|
Add gtp_dev_talk() and gtp_put_nlmsg().
|
|
Release it in the error path.
|
|
The output was swapping the ms and the sgsn addresses.
|
|
Fix these compilation warning:
gtp-genl.c:131:8: warning: 'pdp.version' may be used uninitialized in this function [-Wmaybe-uninitialized]
gtp-genl.c:132:8: warning: 'pdp.tid' may be used uninitialized in this function [-Wmaybe-uninitialized]
d CCLD libgtpnl.la
By initializing the pdp object.
|
|
This patch adds a gtp_tunnel structure to avoid having to deal with
functions with lots of parameters. This should also help to extend
the interfaces and the gtp_tunnel object without breaking the binary
interface (which will be good by when ipv6 support will be added).
|
|
Make sure the IPv4/IPv6 sockets are ready to be used before gtp needs
them.
|
|
This is required by a sane stack to reassemble fragments.
|
|
This patch adds the libgtpnl library. Harald mentioned that he wanted
that the specific code that is added is well encapsulated, so let's
start a small library to interact with the GTP kernel module via netlink
interface.
This was done a bit while in the rush, so the interfaces are not nice
at all and the tools need to be ported on top of this library.
This library will be used to integrate openggsn with the GTP kernel
module.
|
|
It's only used once.
|
|
|
|
* pass up to the stack if we don't know what to do.
* drop packet if not well-formed or not found in our PDP ctx database.
|
|
Add tweak to get this compiling with 3.10.28. Test shows that works
for me.
|
|
If we receive any packet, it will be just ignored. I don't find
any reason to prematurely drop this in the xmit patch.
|
|
This is using the sgsn_addr to know where to send the GTP packets,
I guess that was the intention of those fields.
|
|
I don't find a good reason why this can't be used with pktgen
(IFF_TX_SKB_SHARING) and the tx_queue is already zero if not
initialized.
|
|
Just a cleanup.
|
|
* Conditional check if we can pull the extensions (if any).
* Pull the GTPv1 header (8 bytes) and the extensions (if any).
Tested with emulated replayed pcap traffic, works for me.
|
|
Now wireshark shows a well-formed GTPv1 message.
|
|
v1 is 001 (as interpreted in binary), not 0001 (which is interpreted
as v0.
|