Commit Graph

30 Commits

Author SHA1 Message Date
Pablo Neira Ayuso a2f957390a gtp: fix wrong version number
It was including the tunnel ID.
2014-02-10 17:45:51 +01:00
Pablo Neira Ayuso 9ac07011ae gtp: release tunnels on module and configuration removal
This fixes a release when removing the module or destroying a
configuration.
2014-02-10 17:16:04 +01:00
Pablo Neira Ayuso d98dfb845b gtp: allow to delete tunnel entries via genetlink
Add missing code to delete tunnel entries.
2014-02-10 16:57:54 +01:00
Pablo Neira Ayuso c4cc08f2cd gtp: sanity check tunnel ID
GTPv1 allows 32-bits tunnel IDs only.
2014-02-10 14:58:07 +01:00
Pablo Neira Ayuso a7012e1376 gtp: sanity check gtp version for PDP context
make sure it's GTP_V0 or GTP_V1.
2014-02-10 14:54:43 +01:00
Pablo Neira Ayuso 2060f60afe gtp: move gtp header setup before UDP header
This is just another cleanup to prepare IPv6 support. Move code
to the correct context, just before pushing and setting up the
UDP header.
2014-02-10 14:52:41 +01:00
Pablo Neira Ayuso aa0b2e338a gtp: fix shadowed iph variable declaration
Add new old_ipv6h variable.
2014-02-10 14:46:46 +01:00
Pablo Neira Ayuso 39862e8552 gtp: clean up IPv4 header setup
To prepare IPv6 support.
2014-02-10 14:44:59 +01:00
Pablo Neira Ayuso 738e35207e gtp: fix xmit statistics
Use copy and paste of iptunnel_xmit_stats() available in 3.13.
2014-02-10 14:20:53 +01:00
Pablo Neira Ayuso 293a6a29b8 gtp: don't drop malformed packets in the input path
If the gtp tunneling code receives a too small/malformed message,
just let it continue its travel through the stack since it will
will just simply drop it itself.

This fixes a memory leak in these case, since we should release
the skbuff if the handler returns <= 0.
2014-02-10 13:44:25 +01:00
Pablo Neira Ayuso c594e57aac gtp: working input encapsulation
Several changes to get a working input handling:

* Set skb->dev to the tunnel device instead of the real_dev, to follow
  the logical flow which is:

  input packet -> eth0 -> gtp0
  eth0 <- gtp0 <- output packet

* Set skb->ip_summed = CHECKSUM_NONE to avoid a crash in skb_checksum()
  when forwarding the packet.

* dev_forward_skb(), among many other things, calls skb_scrub_packet()
  which resets the skb->mark. We already reset what we need from the
  input path and the mark should still remain the same for decapsulated
  packets for netfilter/iptables classification. So use netrx_if()
  instead.
2014-02-09 21:47:15 +01:00
Pablo Neira Ayuso b45621e1cf gtp: reset network header after decapsulation
ip_rcv() needs that the new network header after decapsulation is
set to approapriately set the transport header pointer.
2014-02-09 21:47:09 +01:00
Pablo Neira Ayuso b968ddf47f gtp: fix receival path of version 0
After this patch, it already forwards a (yet malformed) packet to
the real device. GTPv1 receival path yet untested but similar
changes that were done to GTPv0 has been done.
2014-02-05 01:14:26 +01:00
Pablo Neira Ayuso 6aaa76c62b gtp: check if the tunnel already exists
This patch checks if the tunnel already exists, in that case, if the
NLM_F_EXCL flag is set, we hit EEXIST.
2014-02-01 01:15:25 +01:00
Pablo Neira Ayuso 96a73cdcc5 gtp: set UDP header checksum to zero
UDP header checksum is optional. Let's set this to zero by now
so wireshark doesn't complain. Let's revisit this later.
2014-02-01 00:02:18 +01:00
Pablo Neira Ayuso 516a76f46c gtp: fix wrong endianess conversion in gtpv0 seq field
While at it, also set to 0xff the spare bytes as the specs indicates.
2014-01-31 23:44:56 +01:00
Pablo Neira Ayuso 40907844b9 gtp: this device is not an ethernet device
Remove all code that configures the special gtpX tunnel device as
an ethernet device, eg.

34: gtp0: <NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/generic

This also removes the ethernet header from the packet that is
transmitted through the gtp device. So now wireshark shows a well-formed
GTP packet in the output path.
2014-01-31 23:31:48 +01:00
Pablo Neira Ayuso 21544dd479 gtp: fix gtpv0 and gtpv1 headers
Fix missing endianess conversions and missing GTP' flag set in v0.
2014-01-31 22:37:48 +01:00
Pablo Neira Ayuso a155b2f03a gtp: working xmit path of gtp0
It includes lots of pr_info messages, still in very early stage, but
it already transmit packets that look like GTP.

Set IFF_NOARP flag in device to disable ARP resolution in gtp0, the
actual device doing is the real one behind it.

This patch also move code to gtp*_push_header headers.
2014-01-24 00:39:38 +01:00
Pablo Neira Ayuso 1350e5f734 gtp: fix missing family in pdp context
Add also some instrumentation, I'll remove it later on.
2014-01-24 00:33:26 +01:00
Pablo Neira Ayuso 4eec5f0f7d gtp: destroy sockets if there have been initialized
Fixes a crash if you remove the gtp module and no configuration was
enabled.
2014-01-22 21:46:07 +01:00
Pablo Neira Ayuso 3522ef80c5 gtp: fix refcounting issues
We don't need the hackish dev_hold in the dellink path anymore.
2014-01-22 21:45:18 +01:00
Pablo Neira Ayuso 317fe2ccc0 gtp: destroy UDP sockets on module removal
Otherwise we hit "Address already in used" when reloading this module
and the socket remains there in a "crashable" state.
2014-01-22 21:27:26 +01:00
Pablo Neira Ayuso c156be41fd gtp: add GTP_CMD_CFG_* commands
This patch detaches the hashtable and the UDP setup from the
GTP_CMD_TUNNEL_* command. The gtp kernel modules needs to support
UDP socket reconfiguration.

After this patch, the steps to bring up a tunnel are:

1st) bring up the device gtp0 via rtnetlink using the "gtp" link type.
2nd) attach a configuration to the gtp0 device, it includes the
     initialization of the hashes and the UDP socket, via genetlink
     "gtp" family using the GTP_CMD_CFG_NEW command.
3rd) add/delete tunnels using genetlink "gtp" family and GTP_CMD_TUNNEL_*
     commands.

Still unusable, but the netlink interface looks in better shape.
2014-01-22 21:02:37 +01:00
Pablo Neira Ayuso 034da83bd8 gtp: fix several interfaces 2014-01-21 18:59:04 +01:00
Pablo Neira Ayuso 1c44eab539 gtp: tid is u64 and set other fields in pdp context 2014-01-21 18:38:50 +01:00
Pablo Neira Ayuso e4f11ebf67 gtp: stop iteration when all pdp ctx has been dumped
otherwise it loops forever.
2014-01-21 18:21:17 +01:00
Pablo Neira Ayuso 49ed1fb379 gtp: missing cb->args annotation in dump loop
Annotate the last gtp instance that has been visited.
2014-01-21 17:24:08 +01:00
Pablo Neira Ayuso ccf3095e6e gtp: add dump operation
I also added the skeleton of the get operation.

Signed-off-by: Pablo Neira Ayuso <pablo@gnumonks.org>
2014-01-21 15:14:17 +01:00
Pablo Neira Ayuso 24782b2aa7 initial import
Type `make' to compile kernel and userspace code. After that, you should
see gtp.ko kernel module that you can insmod.

The rudimentary userspace tools are:

* gtp-link-add, that allows you to bring up the gtp0 device (via
rtnetlink).

* gtp-tunnel-add, to create tunnels via genetlink.

This is also using using genl-family-get to obtain the (dynamic) genetlink
family for the gtp operations, but that code is scheduled to be merged to
gtp-tunnel-add.

The tunneling code does not work yet, it triggers a crash, so it's been
temporarily disabled.

Original work from Harald Welte, I added the netlink interfaces and got
this compiling.
2014-01-20 13:42:39 +01:00