Age | Commit message (Collapse) | Author | Files | Lines |
|
The parameter was simply unused until this change was made. An Ipv6 can
have a prefix length between 48 and 64 bits.
Change-Id: I4b1512d5a4d7bbc2516221ea6808565eac0eb18f
|
|
It is vital that init_netns() is called first in order to initialize
default_nsfd.
Change-Id: Ic16646fa7d60c578056b17351c5fe2090a81dff0
|
|
Change-Id: I0b20e4870bf62df0a459a621a64a4e2795340ceb
|
|
They will be required by sgsnemu to implement ICMPv6 Router
Soliciations.
Change-Id: Ie878604f0fc0169cc98a1e9eee64b14d76be2c45
|
|
sgsnemu is a testing program and doesn't have a VTY iface to configure
its log levels, so let's simply enable INFO as a default.
Change-Id: I2a577f547b57fb0ab7b83de5c12da088697f3904
|
|
It makes it easier to understand where the function is called.
Change-Id: Ibf32b416c3247d1415aa9c1a88755076dcd606f4
|
|
Let's avoid buffer-overflow writing into out-of-bounds memory in the
event the GGSN sends us 2 EUAs in Create PDP Context Respose. It should
theoretically happen since we don't yet support ipv4v6 APNs in sgsnemu,
but who knows.
Change-Id: I8becd90ce1f0e8bb6e21438c04da4a9cab845492
|
|
As pointed out at https://github.com/libexpat/libexpat/issues/312
libtool does not play nice with clang sanitizer builds at all.
For those builds LD shoud be set to clang too (and LDFLAGS needs the
sanitizer flags as well), because the clang compiler driver knows how
linking to the sanitizer libs works, but then at a later stage libtool
fails to actually produce the shared libraries and the build fails. This
is fixed by this patch.
Addtionally LD_LIBRARY_PATH has no effect on conftest runs during
configure time, so the rpath needs to be set to the asan library path to
ensure the configure run does not fail due to a missing asan library,
i.e.:
SANS='-fsanitize=memory -fsanitize-recover=all -shared-libsan'
export CC=clang-10
ASANPATH=$(dirname `$CC -print-file-name=libclang_rt.asan-x86_64.so`)
export LDFLAGS="-Wl,-rpath,$ASANPATH $SANS $LDFLAGS"
Change-Id: Icc09c9d09bfa01264ddf867356d068e50d97c5a0
|
|
Change-Id: I7d5d69f104d24aafd4aa0b7289bb8b3fa1d77ed4
|
|
The default configuration has a random ip-address as first DNS server.
This might cause unnedessary trouble for people who try osmo-ggsn the
first time. Lets have some public DNS here, just to be sure.
Change-Id: I5876a806185bb3aea356fb6996d1925b8d0d1758
|
|
Looks like a bug introduced by I9b9c8fd6eeaaa7d190b8e2a34ca82088904c7708.
Change-Id: I38caf5541ca90638ed10714adfbb08120e5397b9
Fixes: CID#208656
|
|
Change-Id: I9b9c8fd6eeaaa7d190b8e2a34ca82088904c7708
|
|
Change-Id: Idd0ad8fa9c8e7ba0aeec1b52947598d4d297b620
|
|
Change-Id: I8240b388ffb8c1806bf0d34a9e59146b403a13be
|
|
Change-Id: I84bbe9eff37e14985b812b49e53eb6d62fff14a5
|
|
Change-Id: I265637f39dd16dd43992f33149e512e34ed83252
|
|
Change-Id: Ide9465a01857dbe5ec7f5bc1d09468153865156f
|
|
"An address '192.168.7.1' is specified without prefix length. The behavior
of parsing addresses without prefix length will be changed in the future
release. Please specify prefix length explicitly."
Change-Id: I51777c6344191182fb87bae6f0048ce422802541
|
|
Change-Id: Ib6a97d8c93203e1f896ab1bd3d200d2223f9fc48
|
|
Modern gcc-9.2.1 actually fails like this with --enable-werror active:
In file included from sgsnemu.c:52:
In function ‘process_options’,
inlined from ‘main’ at sgsnemu.c:1557:6:
../lib/syserr.h:31:3: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
31 | logp2(sub, pri, __FILE__, __LINE__, 0, \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32 | fmt "\n", ##args); \
| ~~~~~~~~~~~~~~~~~
sgsnemu.c:435:3: note: in expansion of macro ‘SYS_ERR’
435 | SYS_ERR(DSGSN, LOGL_ERROR, 0,
| ^~~~~~~
sgsnemu.c: In function ‘main’:
sgsnemu.c:436:42: note: format string is defined here
436 | "Listening address must be specified: %s!",
| ^~
It is correct: We are dereferencing args_info.listen_addr in a
branch which explicitly checks if that is NULL beforehand :/
Change-Id: I417f447f821d396aa92049e0a791121240f1cf44
|
|
Related: OS#4178
Change-Id: I295b89ee493d230c2550d461fca9602c589d38b5
|
|
Currently each user (application) of libgtp needs to manage its own
timers in order to call gtp_retrans_timeout() and gtp_retrans() and
maintain retransmit and duplicate queues working correctly. This adds
unnecesary complexity to applications since nowadays, as a libosmocore
user, libgtp can handle this internally in an easy way.
Furthermore, keeping the timers internal to the library allows for
easier extension of features as well as re-implementation of related
code in the future.
Last but not least, it was detected that existing known applications
(osmo-sgsn, osmo-ggsn, sgsnemu) are not using correctly the API, since
they should be updating their timers through gtp_retrans_timeout()
everytime a message is enqueued/transmitted, otherwise they may fire
gtp_retrans() for retransmition too late in some cases.
Related: OS#4178
Change-Id: Ife7cfd66d6356f413263fe5bda9e43091f5c9e98
|
|
Change-Id: I39e92f25ed51665c8a615826ed52f35024bdd54b
|
|
This change fixes the following compiler warnings (found by Clang):
gtp.c:2747:13: warning: variable 'pdp' is used uninitialized
whenever 'if' condition is false
[-Wsometimes-uninitialized]
} else if (version == 1) {
gtp.c:2781:14: note: uninitialized use occurs here
OSMO_ASSERT(pdp);
^^^
Shall not happen in general, but let's make Clang happy.
Change-Id: Id471b22afd4c45435589a4edda0a804e66be3a7a
|
|
As stated in the comment above, we need to use the tunnel identifier
to find a GTP context, and derive both IMSI and NSAPI from that TID,
when speaking GTP version 0.
This change fixes the following warnings (found with Clang):
gtp.c:2115:22: warning: variable 'pdp' is uninitialized
when used here [-Wuninitialized]
pdp_set_imsi_nsapi(pdp, tid);
^^^
gtp.c:2118:34: warning: variable 'imsi' is uninitialized
when used here [-Wuninitialized]
if (gtp_pdp_getimsi(gsn, &pdp, imsi, nsapi))
^^^^
gtp.c:2118:40: warning: variable 'nsapi' is uninitialized
when used here [-Wuninitialized]
if (gtp_pdp_getimsi(gsn, &pdp, imsi, nsapi))
^^^^^
Change-Id: I8f1c8d0ba2e8189d97fe1bb5c872680e5ad1cd7a
|
|
Update documentation since nowadays there are more paths calling
ggsn_close_one_pdp() (because we now close pdp contexts during sgsn
timeouts).
Switch pdp_freepdp() to gtp_freepdp() since in the event we ended up
there in the future we want to go through normal delete_ctx_cb to free
related application data structures.
Change-Id: I7d9ae9a27390498ba387797aac6651e32fa44f29
|
|
Change-Id: I1f85c7cc7684e146fca4f17914927d45410dbb84
|
|
That code was commented out in 0b076a331e1e7f955580313a5da416c170b3b4ce
(year 2003), and indeed it makes no sense to call those in current pdp
lifecycle (they are expected to be freed by the application).
Change-Id: I096d8cb8d749ff9b737d6f3f96b1d423660ece37
|
|
Change-Id: Ie768ddb45313582b4b5358b97a981080be64fd42
|
|
Fixes: eefa30dce8fa8e0ae16a3108e23041f92ea6ab21
Fixes: 2d6a69e69a4b4cb2b8cc63c4810dae44e5a4d8f6
Change-Id: I9ee5f4142cacf912145693c72a53c0f531bad2c6
|
|
This patch is quite big because implementing echo req/resp and recovery
requires having knowledge and managing differentiated state for each GSN
peer attached/connected to osmo-ggsn. This kind of information was not
available in osmo-ggsn nor in libgtp.
So osmo-ggsn is now able to track GSN peers connected to a
ggsn_ctx (associated gsn_t from libgtp) by means of "sgsn_peer" data
structure, and accessible from the ggsn through a list. The instances of
sgsn_peer are currently allocated and destroyed dynamically based on
discovered peer who have at least a pdp context attached to us (we are
not interested in peers without pdp contexts because we don't need to
send echo requests/responses and maintain state in that case).
A new private pointer (pdp_t->priv) data structure struct pdp_priv_t is
added to be able to relate a pdp_t to an sgsn as well as the already
existing pointer to an apn.
An "echo-interval <0-36000>" VTY command is added which allows
configuring time wait between echo requests being sent to each
sgsn_peer. Transmission of echo requests is disabled by default.
Finally, a new "show sgsn" VTY command is introduced, and its output is
also printed during "show ggsn".
Related: OS#4165
Change-Id: Id2c84165dc59dff495106758146a701ca488834f
|
|
Since osmo-ggsn can manage several GSN structures simultaneously, it
needs the gsn_t pointer to know the ggsn it should forward the call to.
Related: OS#4165
Change-Id: I33b4fe594d5833993af01cce34737e61e597b320
|
|
Change-Id: I49e7db4d0f5c7868b86a4947d8b5739c2068da46
|
|
GTP version and primary/secondary information is printed now for each
pdp context.
Related: OS#4154
Change-Id: If9682fe343e9a1e78175a12538fb80d4bda54802
|
|
Change-Id: Ie772f2c54264c8bc91f50d9030479861dd8868b7
|
|
Fixes potential duplicates when calling following VTY cmd:
show pdp-context ggsn NAME
show pdp-context ggsn NAME apn APN
Related: OS#4154
Change-Id: I98db39a710a72a1438d71aabaf4f8227984643e3
|
|
Change-Id: I237acdee0be19498804e0d509c610f4e0454ba72
|
|
in46a_from_eua() API documentation clearly states an array of 2 items
should be passed as pointer, but show_one_pdp() was passing only one,
which would end up in out-of-bounds writes on v4v6 EUAs.
Let's better use ippool to print allocated ip addresses instead of
parsing EUAs we sent some point in the past.
Change-Id: I7e164f40f50de43027bcd4464aa879450d2fb10e
|
|
Preparation for next commit, where this function will be needed inside
libmisc (lib/*).
Change-Id: Ibab4f6c09d1e5f0e9cfaea28ae1e7ab5b5c219b5
|
|
This way we further shrink ggsn.c and leave there GGSN related code.
Change-Id: I9e6a3beac7657f0a8c02d514b54c6f1caa93bba7
|
|
in46a_from_eua() API documentation clearly states an array of 2 items
should be passed as pointer, but show_one_pdp() was passing only one,
which would end up in out-of-bounds writes on v4v6 EUAs.
Let's better use ippool to print allocated ip addresses instead of
parsing EUAs we sent some point in the past.
Related OS#4154
Change-Id: Ia34939957bb7856388cb52a741cec0c015a08c70
|
|
Change-Id: I27238c330f9b805ac9e734e735d2c7ae158fe524
|
|
This way ggsn.c is shrinked in size and get rid of a lot of code there,
which is of no interest unless the reader is interested in that really
specific part.
Change-Id: Ieaa7e71f17c7fd9377c76ef53362eab596d669a6
|
|
It's clearer having size-related checks in one place for a data structure
in46_addr, instead of spread around the code.
Change-Id: Idc94bf0c8c01bb5a30e36d3c284b99f66b972abb
|
|
The libgtp application may have already allocated related resources
associated to the pdp context, so we need to signal its deletion in
order to let the application free the resources.
This should fix the duplication of pdp contexts seen in osmo-ggsn when
"show pdp-context" related VTY commands are used.
It was spotted due to some MS requesting a v4v6 context on a
v4-only APN, where first v4 address was allocated, and then upon v6
allocation create_context_ind() called
gtp_create_context_resp(GTPCAUSE_MISSING_APN) but the first address was
not freed. Upon receiving the callback, osmo-ggsn should now free the
related resources.
Related: OS#4154
Change-Id: I6c6215a4ce478afabc78ffaf5ffb0cf829e41226
|
|
Doing so should avoid the crash seen in OS#3956, where a message is
received in osmo-sgsn gtp iface after having received a DeleteCtxAccept
message where pdp and associated cbp is freed. As a result, when new
confirmation arrives, it can still be matched against an old request and
be sent to upper layers providing an already freed cbp.
With this patch, since all queued messages belonging to that pdp are
dropped, confirmation won't find a match and be discarded in libgtp.
In order to be able to drop all req messages belonging to a pdp, a new list
is added to pdp_t and qmsg_t are added to that list when inserted into the per-gsn
req transmit queue. This way upon pdp free time it's simply a
matter of iterating over that list to remove all messages.
There's no need to do same for resp queue, and it'd be actually
counter-productive, because it wouldn't be possible to detect and
discard duplicates anymore after pdp ctx has been freed.
Related: OS#3956
Change-Id: Id86d0b241454d3ad49c64c28087fd2710fa2d17a
|
|
$target/$target_os is never used, so AC_CANONICAL_TARGET is useless.
$host is, so employ AC_CANONICAL_HOST.
Change-Id: I6dc505888b42cfb686043470d3a3548c24cbe1f7
|
|
Change-Id: I5ca7ada037a9b91c3b747cea6d83654d0b9afed3
|
|
Older commit made use of gsm48_decode_bcd_number2(), which is available
in libosmocore 1.1.0 onwards, but forgot to increase configure.ac
requirements.
Fixes: fb625041601c525c23c96482250157dddb0941a4
Change-Id: I89b37be55fc4ba22b90e9aab9a5989573df2ae38
|
|
Since March 15th 2017, libosmocore API logging_vty_add_cmds() had its
parameter removed (c65c5b4ea075ef6cef11fff9442ae0b15c1d6af7). However,
definition in C file doesn't contain "(void)", which means number of
parameters is undefined and thus compiler doesn't complain. Let's remove
parameters from all callers before enforcing "(void)" on it.
API osmo_stats_vty_add_cmds never had a param list but has seem problem
(no "void"), so some users decided to pass a parameter to it.
Change-Id: I0a89586ce683ad060212355b37470c349992ec49
Related: OS#4138
|