Catched by gcc 9.1.0:
osmo-ggsn/sgsnemu/sgsnemu.c:1294:2: error: converting a packed struct ip_ping pointer (alignment 1) to a uint16_t {aka short unsigned int} pointer (alignment 2) may result in an unaligned pointer value [-Werror=address-of-packed-member]
1294 | p = (uint16_t *) & pack;
Change-Id: I783f104c31234a07f2a13f6dbc577a71b25b36a7
This way, the IP address / route handling between TUN devices and kernel
GTP can be shared, which will provide not only a unified codebase but
also a more consistent behavior.
This also paves the road for to use kernel GTP from sgsnemu in the future.
Related: OS#3214
Change-Id: Ic53a971136edd0d8871fbd6746d7b0090ce3a188
This param is parsed by gethostbyname() and it's confusing to document
it as an interface, because users will then attempt to pass "lo" to it,
which fails.
Change-Id: Id8ef0e12ddcaf8bfd199a44de0ba4280f05d4431
Older commit switched pdp_t to have an array of 2 peers instead of
only one in order to accomodate for ipv4v6 contexts, which can have 2
addresses assigned. The usage of peer field was not updated in sgsnemu
accordingly, which means the wrong memory portion was being accessed.
Fixes: 2d6a69e69a ("Add support for IPv4v6 End User Addresses")
Change-Id: I9e563522173a82b265e93b1ef9dc93ced40fefa2
in "createif" mode uplink traffic not forwarding
from tun interface into Gn, inside GTP-U.
create_pdp_conf get iphash (ipm) with pdp == 0x0
Fix - in create_pdp_conf - instead of casting using already
definned iphash in ipset function.
Change-Id: Icd58450548b3a47cb933d70a2e3166c067552b2c
No warnings when used options from "pinghost" and "createif" groups
in a same time. sgsnemu created tun0 interface and send pings inside
G-PDU, but didn't calculate replys. Added options modes to avoid
mutual exclusion options.
Change-Id: I196df7838212dcddecd64a64a6cba613b6cfced0
"sgsnemu" stopped with the message "Received create PDP context response. Cause value: 128",
but normaly at that poit it should continue working and create "user plane".
Reason: Funtion "create_pdp_conf" checking result of "in46a_from_eua" and mistakenly
returned EOF when more than 1 IP address provided by GGSN.
Now function "create_pdp_conf" stopped with error when 0 IP provided or error code comes from "in46a_from_eua".
Fixes: 2d6a69e69a ("Add support for IPv4v6 End User Addresses")
Change-Id: I7881b8e1f27c432007cb6e5ff665a2ce55f103b5
sgsnemu (the only user of this API so far) has been modified to use the
new API with in46_addr.
FreeBSD code for IPv6 has not been tested.
Change-Id: Ie36afe6eaf393855a4a708000ef4ad0192bf4767
Before this commit, when an MS requested an ipv4v6 context osmo-ggsn
returned an error stating the type was unknown, and this text was
printed in the log:
Processing create PDP context request for APN 'ims'
Cannot decode EUA from MS/SGSN: f1 8d
This patch has been tested with an MS running the 3 types of addresses:
- IPv4 and IPv6: no regressions observed, the context is activated and
packets are sent to the ggsn.
- IPv4v6: Wireshark correctly parses request and reponse, and then
ICMPv6 traffic from both sides. Finally I see the MS using the IPv4 and
IPv6 DNS addresses advertised and TCP traffic over IPv4 (because
probably my IPv6 network setup is not correct). I also checked I can
disable/enable data (pdp ctx delete and activate) several times without
any issue.
Change-Id: Ic820759167fd3bdf329cb11d4b942e903fe50af5
In create_pdp_conf(), we have to free() any strings both in the
success and in the error case.
Change-Id: If59cc8d6d151c123f46c1d029091209fd82b3c8e
Fixes: Coverity CID#187636, CID#187633
In proc_ipv6_conf_read() we allocatea buffer on the stack but
forgot the terminating NUL byte.
Change-Id: I54126d8bc08c137859f2de4b47ef23fc0714fdd7
Fixes: Coverity CID#178641
There's no point in sgsnemu doing a poor mans reimplementation
of what the C library provides already by means of getprotobynumber()
Change-Id: I8cdc460e4fa5d86d80addf6e5f341d2d80093a35
We don't need to export those to the global name space as they're
not called from code in other files.
Change-Id: I454249335ba46abdb3afbc669c4a06a06f39ae72
The gengetopt syntax can specify that a particular command line argument
depends on some other argument/option present. We can use this to
provide useful feedback to the user at the command line parsing state,
like --pingrate making no sense without --pinghost being specified.
Change-Id: Ief27275e90e6bce23aed1e83874dbac98dd0926b
When sgsnemu is used for an IPv6 pdp context, we rely on the router
discovery procedure and SLAAC to set the correct IPv6 address/prefix
on the tun device. This requires the system to be configure to accept
router-advertisements on the tun device. Let's print a warning
if accept_ra for the specific tun device is set to a wrong value.
We're leaving it up to the user to either set a system-wide
/proc/sys/net/ipv6/conf/default/accept_ra or to configure this in an
ip-up script used together with sgsnemu.
Change-Id: I563092ca35bc74f035a5023e11256779aac46e11
This way, multiple sgsnemu instances can be runnig in parallel, each
of them creating a different tun device for their respective PDP context
Change-Id: Id12fbadf924a60db255b6d51b9f647aa51dd2e16
The idea is to only implement the GTP-C plane and configure the right
link-local source address on the tun-device and let the regular (Linux)
kernel take care of sending router solicitations and
accepting/processing the related router advertisement. This avoids a
lot of complexity in sgsnemu.
For this to work, you must have /proc/sys/net/ipv6/conf/$tun/accept_ra
set to either 1 (works only if no IPv6 forwarding/routing configured on
your sgsnemu-running system) or 2 (works even if forwarding/routing is
configured).
Change-Id: I57e4c53ee648e1efecfba3eea592d1129849557c
Closes: OS#2518
This just adds the capability to sgsnemu to request a certain PDP
EUA type. It doesn't mean it actually handles anything beyond the
existing IPv4 yet.
Change-Id: I157f9157a7ff2ea56c37a4a902d4706de4c7d35d
gengetopt by default picks the program name from PACKAGE (autotools),
which is osmo-ggsn and is obviously wrong in case of sgsnemu.
After this patch, "sgsnemu --help" no longer shows "osmo-ggsn" but
"sgsnemu" at the top of the help text.
Change-Id: Ifabc2435a503ef71aa5a002ca46833f329068b37
This will replace the manual additions to cmdline.[ch] with
auto-generated code from gengetopt. We need to fix-up the RAT Type in
sgsnemu.c as the manually-added code diverged from what gengetopt
generates.
Change-Id: Ia687e13d5cec1655a57078a767d2123aa022842c
In commit 3a4c67b4bf we introduced the
--norecovery command line option, but this was apparently done by
manually editing the C source code rather than adding it to the .ggo
and letting gengetopt do its magic. Let's fix this up.
Change-Id: I1698280a699b17cea65651c3736ef149aba7e432
In commit 41af5691ef we introduced the
--rai command line options, but this was apparently done by
manually editing the C source code rather than adding it to the .ggo
and letting gengetopt do its magic. Let's fix this up.
Change-Id: Iaab404c3bcfc0c3943764f6616763f4f407d5644
In commit 944dce3e66 we introduced various
command line options, but this was apparently done by manually editing
the C source code rather than adding it to the .ggo and letting
gengetopt do its magic. Let's fix this up.
Change-Id: Ib8e7ef1cad5fc4423a1a4af628950aa93a4e073a
In commit 11a398fbc3 we introduced the
--qose{1,2,3,4} command line options, but this was apparently done by
manually editing the C source code rather than adding it to the .ggo
and letting gengetopt do its magic. Let's fix this up.
Change-Id: I4cd827a96ac17f6eb9f824342f195727426d0e20
It seems like modern gengetopt no longer supports 'unsigned int'
argument types, and we need to use 'int' instead. tested with 2.22.6
Change-Id: I34ca86cb3cc482400a7c4b3bf77c8668aaef562e
Osmocom has maintained this program since about 7 years now, while
the original author / copyright holder has completely disappeared.
With the introduction of Osmocom-style CTRL and VTY interfaces,
the way how the program is used and configured has substantially
changed. In order to avoid confusion in terms of configuration file
format etc, let's rename it to OsmoGGSN.
Change-Id: I2da30f7d4828e185bfac1a4e2d8414b01cbe4f9d
We haven nobody maintaining this platform, let's remove it.
In fact, only Linux and FreeBSD are part of the jenkins build tests,
so even Apple/MacOS is up for disposal. However, as it's more
popular, let's keep the code.
Change-Id: Id6b8179259bacade52c39f96e688f828eff164ac
This patch enables the use of IPv6 PDP contexts. The phone will
have to request an IPv6 End-user-Address, and the GGSN will have
to be configured for an IPv6 pool.
The outer transport-layer IP between SGSN and GGSN must still be
IPv4, it is not modified by this patch
Change-Id: I22c3bf32a98e5daf99d6eaeac8c9f95cc7574774
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
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>
We are not using this option in any of our projects and it is breaking
make distclean. Remove the option for now.
make[2]: Entering directory `/openggsn-0.91/_build/ggsn'
Makefile:307: ../lib/.deps/getopt.Po: No such file or directory
Makefile:308: ../lib/.deps/getopt1.Po: No such file or directory
make[2]: *** No rule to make target `../lib/.deps/getopt1.Po'. Stop.
After so many years of silence, we don't expect the original author to
return to the project. To make things a bit simpler for us, we convert
the coding style to what we are used to (Linux style).
The conversion was made using the 'Lindent' script which is part of the
Linux kernel.