Here are two small patches for libgtpnl. They both apply to the
laforge/sgsn-role branch (although patch 2/2 could be taken separately
into the main branch, too).
Patch 1/2 is a small fixup for a netlink parameter rename in a kernel patch.
Patch 2/2 is a trivial include file addition to prevent some warnings.
Jonas Bonn (2):
Rename netlink attribute
Provide declaration for struct in_addr
include/libgtpnl/gtp.h | 1 +
include/linux/gtp.h | 2 +-
src/gtp-genl.c | 8 ++++----
3 files changed, 6 insertions(+), 5 deletions(-)
--
2.9.3
Hi all,
today I've deployed some cgit improvements on https://git.osmocom.org/,
in the hope that it makes this tool even more useful:
1) syntax highlighting of source code (requested by Hoernchen)
The source code is now highlighted by pygments. I don't really
understand why somebody would want to look at source code a lot in a
browser, but well, it was as easy as to enable the existing pygments
based filter plugin.
2) rendering of "about" page from README.md
As you might have noticed, I've introduced a README.md in a number of
repositoires, and cgit is now rendering an about page for every
repository, e.g. at http://git.osmocom.org/libosmo-abis/about/
3) gerrit change-ID hyperlink generation
All gerrit Change-IDs in commit messages are now automatically converted
to hyperlinks to the respective gerrit change, see e.g. the below
example:
http://git.osmocom.org/openbsc/commit/?id=6dd0fc685b7149f67a5fe17a5bce55c44…
Please note that this works for the "Change-Id" line of the actual
change, but also for change-ids in the free text (e.g. "this depends on
change-id ... in libosmocore")
4) Osmocom ticket/issue hyperlink generation
Any Line that matches the "^((Relate|Close|Fixe)[ds]):" prefix is
scanned for occurrences of "OS#(\d+)" which are then amended with
hyperlinks to the respective issue on osmocom.org
Please note the OS# prefix is mandatory, so things like "OS#1614, 1615"
will not work, as can be seen at
http://git.osmocom.org/osmo-pcu/commit/?id=0a8fae8d141c2cfa4387ffe9b35402d5…
Please format your commit messages accordingly.
Regards,
Harald
--
- Harald Welte <laforge(a)gnumonks.org> http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
(ETSI EN 300 175-7 Ch. A6)
Hi Pablo,
On Wed, Mar 15, 2017 at 06:23:48PM +0100, Pablo Neira Ayuso wrote:
> On Wed, Mar 15, 2017 at 05:39:16PM +0100, Harald Welte wrote:
> >
> > I would definitely like to see this move forward, particularly in order
> > to test the GGSN-side code.
>
> Agreed.
I've modified the patch slightly, see below (compile-tested, but not
otherwise tested yet). Basically rename the flags attribute to 'role',
expand the commit log and removed unrelated cosmetic changes.
I've also prepared a corresponding change to libgtpnl into the
laforge/sgsn-rol branch, see
http://git.osmocom.org/libgtpnl/commit/?h=laforge/sgsn-role
This is not yet tested in any way, but I'm planning to add some
associated support to the command line tools and then give it some
testing (both against the kernel GTP in GGSN mode, as well as an
independent userspace GTP implementation).
> It would be good if we provide a way to configure GTP via iproute2 for
> testing purposes.
I don't really care about which tool is used, as long as it is easily
available [and FOSS, of course].
> We would need to create some dummy socket from
> kernel too though so we don't need any userspace daemon for this
> testing mode.
I don't really like that latter idea. It sounds too much like a hack to
me. But then, I don't have enough phantasy right now ti imagine how an
actual implementation would look like.
To me, it is perfectly fine to run a simple, small utility in userspace
even for testing.
Regards,
Harald
>From 63920950f9498069993def78e178bde85c174e0c Mon Sep 17 00:00:00 2001
From: Jonas Bonn <jonas(a)southpole.se>
Date: Wed, 15 Mar 2017 17:52:28 +0100
Subject: [PATCH] gtp: support SGSN-side tunnels
The GTP-tunnel driver is explicitly GGSN-side as it searches for PDP
contexts based on the incoming packets _destination_ address. For
real-world use cases, this is sufficient, as the other side of a GTP
tunnel is not in fact implemented by GTP, but by the protocol stacking
of a mobile station / user equipment on the radio interface (like PDCP,
SNDCP).
However, if we want to simulate the mobile station, radio access network
and SGSN (for example to test the GGSN side implementation), then we
want to be identifying PDP contexts based on _source_ address.
This patch adds a "role" attribute at GTP-link creation time to specify
whether we behave like the GGSN or SGSN role of the tunnel; this
attribute is then used to determine which part of the IP packet to use
in determining the PDP context.
Signed-off-by: Jonas Bonn <jonas(a)southpole.se>
Signed-off-by: Harald Welte <laforge(a)gnumonks.org>
diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index 99d3df788ce8..9aef4217f6e1 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -71,6 +71,7 @@ struct gtp_dev {
struct net_device *dev;
+ enum ifla_gtp_role role;
unsigned int hash_size;
struct hlist_head *tid_hash;
struct hlist_head *addr_hash;
@@ -149,8 +150,8 @@ static struct pdp_ctx *ipv4_pdp_find(struct gtp_dev *gtp, __be32 ms_addr)
return NULL;
}
-static bool gtp_check_src_ms_ipv4(struct sk_buff *skb, struct pdp_ctx *pctx,
- unsigned int hdrlen)
+static bool gtp_check_ms_ipv4(struct sk_buff *skb, struct pdp_ctx *pctx,
+ unsigned int hdrlen, enum ifla_gtp_role role)
{
struct iphdr *iph;
@@ -159,18 +160,21 @@ static bool gtp_check_src_ms_ipv4(struct sk_buff *skb, struct pdp_ctx *pctx,
iph = (struct iphdr *)(skb->data + hdrlen);
- return iph->saddr == pctx->ms_addr_ip4.s_addr;
+ if (role == GTP_ROLE_SGSN)
+ return iph->daddr == pctx->ms_addr_ip4.s_addr;
+ else
+ return iph->saddr == pctx->ms_addr_ip4.s_addr;
}
/* Check if the inner IP source address in this packet is assigned to any
* existing mobile subscriber.
*/
-static bool gtp_check_src_ms(struct sk_buff *skb, struct pdp_ctx *pctx,
- unsigned int hdrlen)
+static bool gtp_check_ms(struct sk_buff *skb, struct pdp_ctx *pctx,
+ unsigned int hdrlen, enum ifla_gtp_role role)
{
switch (ntohs(skb->protocol)) {
case ETH_P_IP:
- return gtp_check_src_ms_ipv4(skb, pctx, hdrlen);
+ return gtp_check_ms_ipv4(skb, pctx, hdrlen, role);
}
return false;
}
@@ -204,7 +208,7 @@ static int gtp0_udp_encap_recv(struct gtp_dev *gtp, struct sk_buff *skb,
goto out_rcu;
}
- if (!gtp_check_src_ms(skb, pctx, hdrlen)) {
+ if (!gtp_check_ms(skb, pctx, hdrlen, gtp->role)) {
netdev_dbg(gtp->dev, "No PDP ctx for this MS\n");
ret = -1;
goto out_rcu;
@@ -261,7 +265,7 @@ static int gtp1u_udp_encap_recv(struct gtp_dev *gtp, struct sk_buff *skb,
goto out_rcu;
}
- if (!gtp_check_src_ms(skb, pctx, hdrlen)) {
+ if (!gtp_check_ms(skb, pctx, hdrlen, gtp->role)) {
netdev_dbg(gtp->dev, "No PDP ctx for this MS\n");
ret = -1;
goto out_rcu;
@@ -490,7 +494,11 @@ static int gtp_build_skb_ip4(struct sk_buff *skb, struct net_device *dev,
* Prepend PDP header with TEI/TID from PDP ctx.
*/
iph = ip_hdr(skb);
- pctx = ipv4_pdp_find(gtp, iph->daddr);
+ if (gtp->role == GTP_ROLE_SGSN)
+ pctx = ipv4_pdp_find(gtp, iph->saddr);
+ else
+ pctx = ipv4_pdp_find(gtp, iph->daddr);
+
if (!pctx) {
netdev_dbg(dev, "no PDP ctx found for %pI4, skip\n",
&iph->daddr);
@@ -665,12 +673,26 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev,
int hashsize, err, fd0, fd1;
struct gtp_dev *gtp;
struct gtp_net *gn;
+ unsigned int role;
+
+ /* The default role is GGSN, and for backwards compatibility
+ * reasons, the lack of a IFLA_GTP_ROLE IE means that we're
+ * operating in GGSN role. */
+ if (data[IFLA_GTP_ROLE]) {
+ role = nla_get_u32(data[IFLA_GTP_ROLE]);
+ if (role != GTP_ROLE_GGSN &&
+ role != GTP_ROLE_SGSN)
+ return -EINVAL;
+ } else
+ role = GTP_ROLE_GGSN;
if (!data[IFLA_GTP_FD0] || !data[IFLA_GTP_FD1])
return -EINVAL;
gtp = netdev_priv(dev);
+ gtp->role = role;
+
fd0 = nla_get_u32(data[IFLA_GTP_FD0]);
fd1 = nla_get_u32(data[IFLA_GTP_FD1]);
@@ -722,6 +744,7 @@ static const struct nla_policy gtp_policy[IFLA_GTP_MAX + 1] = {
[IFLA_GTP_FD0] = { .type = NLA_U32 },
[IFLA_GTP_FD1] = { .type = NLA_U32 },
[IFLA_GTP_PDP_HASHSIZE] = { .type = NLA_U32 },
+ [IFLA_GTP_ROLE] = { .type = NLA_U32 },
};
static int gtp_validate(struct nlattr *tb[], struct nlattr *data[])
diff --git a/include/uapi/linux/gtp.h b/include/uapi/linux/gtp.h
index 72a04a0e8cce..79037cca6b51 100644
--- a/include/uapi/linux/gtp.h
+++ b/include/uapi/linux/gtp.h
@@ -19,7 +19,7 @@ enum gtp_attrs {
GTPA_LINK,
GTPA_VERSION,
GTPA_TID, /* for GTPv0 only */
- GTPA_SGSN_ADDRESS,
+ GTPA_SGSN_ADDRESS, /* Remote GSN, either SGSN or GGSN */
GTPA_MS_ADDRESS,
GTPA_FLOW,
GTPA_NET_NS_FD,
diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
index 6b13e591abc9..de7bea223749 100644
--- a/include/uapi/linux/if_link.h
+++ b/include/uapi/linux/if_link.h
@@ -536,11 +536,18 @@ enum {
#define IFLA_PPP_MAX (__IFLA_PPP_MAX - 1)
/* GTP section */
+
+enum ifla_gtp_role {
+ GTP_ROLE_GGSN = 0,
+ GTP_ROLE_SGSN,
+};
+
enum {
IFLA_GTP_UNSPEC,
IFLA_GTP_FD0,
IFLA_GTP_FD1,
IFLA_GTP_PDP_HASHSIZE,
+ IFLA_GTP_ROLE,
__IFLA_GTP_MAX,
};
#define IFLA_GTP_MAX (__IFLA_GTP_MAX - 1)
--
2.11.0
--
- Harald Welte <laforge(a)netfilter.org> http://netfilter.org/
============================================================================
"Fragmentation is like classful addressing -- an interesting early
architectural error that shows how much experimentation was going
on while IP was being designed." -- Paul Vixie
Support multiple APN's per GTP endpoint and as an additional benefit support
multiple GTP sockets per GTP entity.
Use case multiple APN's:
------------------------
In 3GPP a APN is control path construct. When mappend into the data path,
it mean that UE IP's can be source from independended IP networks with
overlaping IP ranges.
3GPP, TS 29.061 version 13.6.0 Release 13, Section 11.3 describes this as:
> 2. each private network manages its own addressing. In general this will
> result in different private networks having overlapping address ranges.
> A logically separate connection (e.g. an IP in IP tunnel or layer 2
> virtual circuit) is used between the GGSN/P-GW and each private network.
> In this case the IP address alone is not necessarily unique. The pair
> of values, Access Point Name (APN) and IPv4 address and/or IPv6 prefixes,
> is unique.
To support such a setup, each APN is mapped to a Linux network device.
VRF-Lite, network namespaces or other mechanismns can the be used to realize
the full separation of the per APN IP networks.
Use case multiple GTP sockets per GTP entity:
---------------------------------------------
A GTP entity like a PGW can use multiple GTP sockets for:
* separate IPv4 and IPv6 transport endpoints
* support multiple reference points in separated IP networks, e.g. have
Gn/Gp/S5/S8 in a GRX attaches network and S2a/S2b in another private
network
Especially the S2a/S2b separation is an important scenario. The networks
use for roaming and non roaming attachment (Gn/Gp/S5/S8 reference points)
are usually different from the connection for trusted and untrusted WiFi
access (S2a/S2b). Will the GTP transport networks are separated, it is
still desirable to terminated the tunnels in the same GTP entity to ensure
uninterrupted IP connectivity during 3G/LTE to/from WiFi handover.
Implementation:
---------------
APN's are a control path construct, the identification of the associated network
device need therefore to be bound to be tunnel endpoint identifier.
This series moves the hash for the incoming tunnel endpoint identifiers into
the socket to support multiple network devices per GTP socket. It the adds
a method of enabling the GTP encapsulation on a socket without having to
bound the socket to a network device and finally allows to specify a GTP
socket per PDP context.
API impact:
-----------
This is probably the most problematic part of this series...
The removeal of the TEID form the netdevice also means that the gtp genl API
for retriving tunnel information and removing tunnels needs to be adjusted.
Before this change it was possible to change a GTP tunnel using the gtp
netdevice id and the teid. The teid is no longer unique per gtp netdevice.
After this change it has to be either the netdevice and MS IP or the GTP
socket and teid.
Fortunatly, libgtpnl has always populated the Link Id, TEID, GSN Peer IP and
MS IP. The library interface has ensured that all information that is mandatory
after this change is guaranteed to be present.
The only project that doesn't use libgtpnl (OpenAir-CN) is also populating
all of those values.
The API change will therefore not break any existing userspace applications.
--
Andreas Schultz (4):
gtp: move TEID hash to per socket structure
gtp: add genl cmd to enable GTP encapsulation on UDP socket
gtp: add support to select a GTP socket during PDP context creation
Extend Kernel GTP-U tunneling documentation
Documentation/networking/gtp.txt | 103 ++++++++++++++-
drivers/net/gtp.c | 263 ++++++++++++++++++++++++++++-----------
include/uapi/linux/gtp.h | 4 +
3 files changed, 292 insertions(+), 78 deletions(-)
--
2.10.2
Hi Pablo,
This is a resent of last series that missed the merge window. There
are no changes compared to v4.
v4: Compared to v3 it contains mostly smallish naming and spelling fixes.
It also drops the documentation patch, Harald did a better job with the
documentation and the some things I described do not yet match the implementation.
I'll readd the relevant parts with a follow up series.
This series lays the groundwork for removing the socket references from
the GTP netdevice by removing duplicate code and simplifying the logic on
some code paths.
It slighly changes the GTP genl API by making the socket parameters optional
(though one of them is still required).
The removal of the socket references will break the 1:1 releation between
GTP netdevice and GTP socket that prevents us to support multiple VRFs with
overlapping IP addresse spaces attached to the same GTP-U entity (needed for
multi APN support, coming a follow up series).
Pablo found a socket hold problem in v2. In order to solve that I had to
switch the socket references from the struct socket to the internal
struct sock. This should have no functionl impact, but we can now hang
on to the reference without blocking user space from closing the GTP socket.
v4->v5:
* resent for new merge window
v3->v4:
* drop the documentation patch
* spelling fixes
* pass nlattr instead of genl_info into gtp_find_dev,
makes the code slightly more compact and readable
v2->v3:
* add documentation to explain the goal of all these changes
* incorporate review comments
* switch from struct socket to struct sock
Regards
Andreas
--
Andreas Schultz (7):
gtp: switch from struct socket to struct sock for the GTP sockets
gtp: make GTP sockets in gtp_newlink optional
gtp: merge gtp_get_net and gtp_genl_find_dev
gtp: consolidate gtp socket rx path
gtp: unify genl_find_pdp and prepare for per socket lookup
gtp: consolidate pdp context destruction into helper
gtp: add socket to pdp context
drivers/net/gtp.c | 543 +++++++++++++++++++++++++++---------------------------
1 file changed, 269 insertions(+), 274 deletions(-)
--
2.10.2
Hi!
According to the OsmoSGSN wiki, SMS delivery over GPRS is currently a TODO
item. I was wondering about the current state of this feature, and if there
is any work in progress that could be built upon.
Is there an estimate of the amount of dev work required to contribute this
feature to the project?
Thanks,
Christian
Hi all,
[intentionally breaking the thread here]
On Thu, Feb 23, 2017 at 05:46:57PM +0100, Harald Welte wrote:
> I'll try to cook up some instructions extending
> https://osmocom.org/projects/openggsn/wiki/OpenGGSN to cover also
> sgsnemu for a basic use case of establishing one single tunnel. That's
> of course like a manual "HOWTO" and not yet anything that can be tested
> automatically.
I've documented the instructions at
https://osmocom.org/projects/linux-kernel-gtp-u/wiki/Basic_Testing
Please let me know any updates/corrections/questions if you try to
reproduce this. The above instructions were working for me yesterday.
Please find an ASCII export of this below (much less readable than the
wiki).
Regards,
Harald
h1. Basic Testing
This page documents some basic testing setup for the Kenrel GTP-U code. It follows the below rationale:
* focus on testing the kernel GTP-U module without too much external dependencies
* test GTP-U interoperability of the kernel with at least one other implementation, not just kernel-to-kernel (which currently is not supported in the kernel, as it only implements the GGSN/P-GW role)
* limit testing to SGSN/S-GW and GGSN/P-GW, without a real cellular network (which is possible e.g. using [[OsmoSGSN:]] and [[OsmoPCU:]])
h2. Building / Installing dependencies
In order to follow below test instructions, you will need
* A Linux kernel including the GTP-U driver (@drivers/net/gtp.c@) either compiled-in or as kernel module
* [[libgtpnl]] - the userspace library providing an API around the kernel GTP-U netlink interface
* [[OpenGGSN:]] - a minimal C-language implementation of a 3GPP GGSN, also contains a SGSN-side emulator called [[OpenGGSN:sgsnemu]]
** make sure you use Version 0.93 or later
** make sure you compile it with @--enable-gtp-linux@ enable during the @./configure@ step
You can find some instructions on how to build [[OpenGGSN:]] with support for [[libgtpnl]] and kernel GTP-U at this wiki page: [[OpenGGSN:Kernel_GTP]]
h2. Test setup description
We will run the GGSN natively on the host, and put the emulated SGSN inside a separate network namespace.
The two namespaces are interconnected by a virtual ethernet device using the transfer network 172.31.1.0/24
The GGSN is configured to provide a pool of IP addresses from the 192.168.71.0/24 range. Each PDP context will be allocated one dynamic address from that pool
h2. Test instructions
h3. create the network namespace for the SGSN
ip netns add sgsn
h3. add veth to be used between SGSN and GGSN
ip link add veth0 type veth peer name veth1
h3. remote (SGSN) side of veth device
<pre>
ip link set veth1 netns sgsn
ip netns exec sgsn ip addr add 172.31.1.2/24 dev veth1
ip netns exec sgsn ip link set veth1 up
</pre>
h3. local (GGSN) side of veth device
<pre>
ip addr add 172.31.1.1/24 dev veth0
ip link set veth0 up
</pre>
h3. execute the GGSN on the host
ggsn -g -c ./ggsn.conf.test
(use the file attached to this wiki page)
The @-g@ option is responsible for activating kernel-GTP support. If you cannot get the example described in this document to work, try the pure GTP-U userspace implementation by removing @-g@ from the above command line. If it works then, there's something related to Kernel GTP-U that breaks the setup.
h3. execute the emulated SGSN inside the sgsn namespace
ip netns exec sgsn sgsnemu -d -r 172.31.1.1 -l 172.31.1.2 --defaultroute --createif
h3. verify the existnace of the GTP tunnel
<pre>
ggsn:~# gtp-tunnel list
version 1 tei 1/1 ms_addr 192.168.71.2 sgsn_addr 172.31.1.2
</pre>
h3. further testing
in the @sgsn@ namespace, there's now a default-route that points into the GTP tunnel. You can use this to ping any network address that's reachable to the GGSN host. If that host is connected to the internet, you can e.g. run a ping command from within the namespace using
ip netns exec sgsn ping -c 10 8.8.8.8
which will send some IP packets to 8.8.8.8 via the tun0 device (created by [[OpenGGSN:sgsnemu]]). It will be encapsulated by the userspace GTP-U implementation of sgsnemu, sent via the veth device to the host, where it ends up inthe GTP-U kernel module, decapsulating the package and passing in on to the gtp0 device there. Anything beyond that point depends on your local routing configuration.
== Building OpenGGSN ==
h1. OpenGGSN and Linux Kernel accelerated GTP-U
OpenGGSN has support to use the Linux kernel GTP-U code to accelerate the data/user plane while still implementing the control plane (GTP-C) in userspace in OpenGGSN.
For more information about the Linux kernel GTP-U code, please see [[linux-kernel-gtp-u:]]
h2. Building OpenGGSN with kernel which has GTP-U support
At the time of writing (2017-01-09) of this wiki, below listed distributions have support of GTP kernels :
* Debian 4.9.1-1~exp1 - Debian's latest experimental build
* Ubuntu 16.10 kernel 4.8
* OpenSUSE Tumbleweed (stable) 4.8 (.12)
* Fedora 25 kernel 4.8
Following two Debian kernels do not activate GTP kernel module during build: 4.8.0 and 4.9.0.
*It is expected that complete openbsc project and related dependencies are pre-installed.*
Check if package @libc-ares-dev@ is installed and if not please add it.
Ubuntu 16.10, kernel 4.8.0-30-generic is used.
* Installing dependencies and build library @libgtpnl@
You can install those packages with:
<pre>
sudo apt install libtalloc-dev libpcsclite libmnl-dev
</pre>
Please follow instructions provided at [[cellular-infrastructure:Build from source]] in order to install following library and projects :
Information about dependencies between Osmocom projects is given at the above link:
* libgtpnl
<pre>
sudo make install
sudo ldconfig
</pre>
* libosmocore
* openggsn
<pre>
./configure --enable-gtp-linux
make
sudo make install
sudo ldconfig
</pre>
Following message is shown at end of the command: @ ./configure --enable-gtp-linux@
<pre>
openggsn Configuration:
GTP Linux kernel support: yes
</pre>
This means that appropriate header files are available.
--
- Harald Welte <laforge(a)gnumonks.org> http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
(ETSI EN 300 175-7 Ch. A6)
Hi Pablo,
This is v4 of the GTP improvements. Compared to v3 it contains mostly
smallish naming and spelling fixes. It also drops the documentation
patch, Harald did a better job with the documentation and the some things
I described do not yet match the implementation. I'll readd the relevant
parts with a follow up series.
This series lays the groundwork for removing the socket references from
the GTP netdevice by removing duplicate code and simplifying the logic on
some code paths.
It slighly changes the GTP genl API by making the socket parameters optional
(though one of them is still required).
The removal of the socket references will break the 1:1 releation between
GTP netdevice and GTP socket that prevents us to support multiple VRFs with
overlaping IP addresse spaces attached to the same GTP-U entity (needed for
multi APN support, comming a follow up series).
Pablo found a socket hold problem in v2. In order to solve that I had to
switch the socket references from the struct socket to the internal
struct sock. This should have no functionl impact, but we can now hang
on to the reference without blocking user space from closing the GTP socket.
v3->v4:
* drop the documentation patch
* spelling fixes
* pass nlattr instead of genl_info into gtp_find_dev,
makes the code slightly more compact and readable
v2->v3:
* add documentation to explain the goal of all these changes
* incorporate review comments
* switch from struct socket to struct sock
Regards
Andreas
--
Andreas Schultz (7):
gtp: switch from struct socket to struct sock for the GTP sockets
gtp: make GTP sockets in gtp_newlink optional
gtp: merge gtp_get_net and gtp_genl_find_dev
gtp: consolidate gtp socket rx path
gtp: unify genl_find_pdp and prepare for per socket lookup
gtp: consolidate pdp context destruction into helper
gtp: add socket to pdp context
drivers/net/gtp.c | 543 +++++++++++++++++++++++++++---------------------------
1 file changed, 269 insertions(+), 274 deletions(-)
--
2.10.2
Hi Pablo,
This is v3 of the GTP improvements.
This series lays the groundwork for removing the socket references from
the GTP netdevice by removing duplicate code and simplifying the logic on
some code paths.
It slighly changes the GTP genl API by making the socket parameters optional
(though one of them is still required).
The removal of the socket references will break the 1:1 releation between
GTP netdevice and GTP socket that prevents us to support multiple VRFs with
overlaping IP addresse spaces attached to the same GTP-U entity (needed for
multi APN support).
Pablo found a socket hold problem in v2. In order to solve that I had to
switch the socket references from the struct socket to the internal
struct sock. This should have no functionl impact, but we can now hang
on to the reference without blocking user space from closing the GTP socket.
There was also some length off-list conversation about why the netdevice to
socket relation needs to be changed at all. Harald did already agree to this
but Pablo had some questions. I've tried to address that with a bit of
dokumentation for the GTP module. Hopefully this will explain the need for
the change sufficiently.
This series does have conflicts with the SGSN side tunnel work done by
Jonas Bonn. The unification of the tunnel Rx code touches the same places
he changed.
v2->v3:
* add documentation to explain the goal of all these changes
* incorporate review comments
* switch from struct socket to struct sock
Regards
Andreas
--
Andreas Schultz (8):
gtp: add documentation
gtp: switch from struct socket to struct sock for the GTP sockets
gtp: make GTP sockets in gtp_newlink optional
gtp: merge gtp_get_net and gtp_genl_find_dev
gtp: consolidate gtp socket rx path
gtp: unify genl_find_pdp and prepare for per socket lookup
gtp: consolidate pdp context destruction into helper
gtp: add socket to pdp context
Documentation/networking/gtp.txt | 112 ++++++++
drivers/net/gtp.c | 548 +++++++++++++++++++--------------------
2 files changed, 386 insertions(+), 274 deletions(-)
create mode 100644 Documentation/networking/gtp.txt
--
2.10.2
Hello,
I want to use the local sims having different MNC/MCC for implementing GPRS
using osmocoms with OpenBTS same as I have used them for GSM calls and sms
using only openBTS. But your site
http://openbsc.osmocom.org/trac/wiki/OpenBSC_GPRS says, "it is currently
not possible". As it is long when posted on this site so I want to ask is
it possible *now* to use the local sims? Hope you have understood my
question. Waiting for your reply. Thanks.
Regards,
Saba Arshad