Commit Graph

6389 Commits

Author SHA1 Message Date
Pau Espin fd815bba12 vty: Print MM state and RAN type in show mm-context
Value presviosuly printed as MM state is actually usually refereed as
GMM state, so rename it.

Change-Id: Ia06c53f0cd2a6348237ed3abeb9367d965745aba
2019-09-02 11:44:58 +02:00
Pau Espin ccd1252bd7 Introduce FSM mm_state_iu_fsm
Implement TS 23.060 6.1.2 Mobility Management States (Iu mode) using
osmocom FSM and drop old implementation.
Most of the logic on each state is still kept in gprs_gmm.c, will be
inserted into the FSM later.

Change-Id: I4c9cf8c27194817c56e8949af0205e1cc14af317
2019-09-02 11:44:58 +02:00
Pau Espin 02514bc592 Introduce FSM mm_state_gb_fsm
Implement TS 23.060 6.1.1 Mobility Management States (A/Gb mode) using
osmocom FSM and drop old implementation.
Most of the logic on each state is still kept in gprs_gmm.c, will be
inserted into the FSM later.

Change-Id: I04004423e993107374d5a3549b8a93ac169251dd
2019-09-02 11:44:58 +02:00
Pau Espin 9119d50849 sgsn_vty: Print correct Iu mmctx id in 'show mm-context'
Change-Id: I79333bef4a4bf743fcad07812c9a213b368ff2b6
2019-09-02 11:44:58 +02:00
Pau Espin 3b848bdc42 sgsn_vty: Fix mmctx rate_ctr output indentation
Change-Id: I1b89c179e1ba08b65e31727fdce90c7b578f4d6d
2019-09-02 11:44:58 +02:00
Pau Espin 8b88f5f7f3 sgsn_cdr.c: Fix ip addr string buffer size
INET(6)_ADDRSTRLEN already contains the required extra null byte at the
end, no need to add +1 to it.

Change-Id: I5a16659e007c6883fe21582cce5dac544e6d4bb9
2019-09-02 11:44:58 +02:00
Pau Espin a794811416 gprs_gmm.c: Replace inet_ntoa with inet_ntop
inet_ntop manual states:
"inet_ntoa(3) is now considered to be deprecated in favor of
inet_ntop()".

Change-Id: I0c708d047122f349acf46797a9e5973040e7ae04
2019-09-02 09:42:21 +00:00
Pau Espin 87264e6454 Merge common allocation steps for Gb and Iu ctx
This way it's easier to add new common functionalitites without
forgetting to add it on both sides, and simplifies the code.

Change-Id: Ib6c0427ac7b35295cf1caf2f28cb2a5c155b9d9c
2019-09-02 09:42:21 +00:00
Pau Espin 0b72240799 Split enum gprs_pmm_state into Iu and Gb counterparts
Those two state sets are not part of the same state machine, and are
used in different scenarios, so let's split them and handle them in Gb
and Iu specific parts of struct sgsn_mm_ctx. This is required in order
to improve related code (for instance, use osmocom fsm).

Change-Id: I6100d607da316da0595886c6968704dd9ccfbde9
2019-09-02 09:42:21 +00:00
Pau Espin 8333ef10c9 Move llc->MM/SM Gb specific glue code to its own file
Now that we have RANAP/Iu handling specificities in its own file, let's
have also Gb specific glue code for messages coming from llc up to MM/SM
layer in its own file. This way same entry points in gprs_gmm.c are used
by Gb and Iu: gsm0408_rcv_gmm() (for MM) and gsm0408_rcv_gsm() (for SM).

Change-Id: Iaf57922a0970c1d03f6f1d6337d27ae3d4aaf32c
2019-09-02 09:42:21 +00:00
Pau Espin 6dfb5fef40 Move lots of Iu/ranap specific code into its own file
RANAP related functionalities were splitted among several files
(gprs_gmm.c, gprs_sgsn.c and sgsn_libgtp.c). Let's move it into its own
file to shrink complexity/size of existing files.
It also allows to keep a lot of conditionally enabled code (BUILD_IU)
and its dependencies (osmo-iuh) together.

Change-Id: I549042aaff045a378de77d657cc396ee08f22f33
2019-09-02 09:42:21 +00:00
Pau Espin 259e303436 sgsn: gtp: Drop related pdp contexts on echo timeout against GGSN
Change-Id: I7e97bac1c13a2c26203eb64e590fd75d77eb44bd
2019-09-02 09:06:13 +00:00
Pau Espin 6ec5dc26b3 Introduce log helper LOGGGSN and log category DGTP
It will be used in forthcoming commits.

Change-Id: I30f46f44af1d0eee324b1a995c1dad2e1315af7c
2019-09-02 09:02:38 +00:00
Alexander Couzens 4ec21769b2 gprs_gmm: gsm48_rx_gmm_att_req(): refactor duplicated code
Change-Id: I709f847802a975e1a75d0b87ac5125240cfd0854
2019-09-02 08:59:43 +00:00
Alexander Couzens c44af53d1e gprs_gmm: clarify comment of Iu follow-on request
Change-Id: Ib6b3a1b250de373656310a3c8f88d1d39bdcee60
2019-09-02 08:59:43 +00:00
Alexander Couzens f8d3e7fe05 gprs_gmm: only update gb/iu cell information when Iu/Gb present
This function should not do the transistion of Iu/Gb. Only copy simple data

Change-Id: Id52761f3ea655a2d0cc663a950154c6b7c1b5f7a
2019-09-02 08:59:43 +00:00
Pau Espin d8037bcedc gtp: cb_delete_context(): Clarify why pdp->lib is set to NULL
Change-Id: I02c46062d6dc9802d9cae057587e66a68a65436c
2019-08-30 08:24:48 +00:00
Pau Espin aa89f5dffc gtp: make echo_interval unsigned
There's no real need to use -1 to indicate echo timer as disabled, since
0 can also be used (it doesn't make sense to have a timer timeout of 0).
This way code is simplified.

Change-Id: I689034887188a53590eddeffda781629694eb5ed
2019-08-28 16:08:49 +02:00
Pau Espin 5623eb8439 gprs_gmm.c: Add spec document to function documentation
Change-Id: Ibb89499e9c1ab588336df34fde26faf3fbf2c72c
2019-08-21 17:18:14 +02:00
Pau Espin d956e16c7b gprs_gmm.c: Print value_string of reject cause
Change-Id: I71d9abcf7e3a836c475b7adbb95a82580e41ae6d
2019-08-21 17:17:11 +02:00
Pau Espin 2c90899bc4 vty: Introduce cs7-instance-iu
Similar to what we already have in osmo-msc.

Change-Id: Iaa9e1d06dd0430848ef4f7498a3c15d13f899904
2019-08-21 11:11:09 +02:00
Pau Espin 1aaeea4900 examples: Add osmo-sgsn_custom-sccp.cfg
Change-Id: Id3a3ccbf168fbbc28153cbf7f0249294eee34d3d
2019-08-21 09:08:19 +00:00
Pau Espin 99bd9d3139 gprs_gmm.c: Use osmo_rai_name() in log line
Change-Id: Ieab9b7696c93de9a5d3d42f614072a6f2181e37d
2019-08-20 17:48:47 +02:00
Alexander Couzens 39cbecd273 gprs/gprs_gmm: implement T3314. Timeout to reset MM state READY->STANDBY
When a MS MM state is READY its exact location is known (PCU).
On Gb, T3314 (aka TS 23.060 "READY timer") sets the MM state from
READY to STANDBY, where only the RA is known.

Introduce a second set of timer variables, because state timer
can run while another packet state timer is timing out.

Related: OS#1941
Change-Id: I4ce23ebe50d141076c20c9c56990b7103cd25e55
2019-08-20 17:48:47 +02:00
Pau Espin 5ed3f67f96 tests: Introduce vty-transcript-test tests
Add a few commands to make sure it's working fine, and print all
available timers with default values.

Change-Id: Ifd092b9561d49be1f62769d95ba49f6e4aeb4066
2019-08-20 17:48:47 +02:00
Pau Espin a299d65114 Replace own timer infra with libosmocore osmo_tdef
VTY command "show timer" is also available now.

Change-Id: Ia0cf5f0a49737fbc419e2ccc86312d01c6e0056e
2019-08-20 17:48:31 +02:00
Pau Espin a43fb7b8e5 tests: Verify that timers can be set over VTY
Change-Id: I486fc2a56e235a539836894d2042c1ca6e514ab9
2019-08-20 10:34:29 +00:00
Pau Espin f913265309 gprs_gmm: Avoid spaces in fsm events and enum strings
FSM doesn't expect receiving event names containing spaces (log lines
generated are confusing).

Similar for enums, it's better using code names to match easily and make
log lines more clear.

Change-Id: I16ede8bf8352b09bc772fd7b43fad2c2274b3ec1
2019-08-20 10:34:29 +00:00
Pau Espin 5b6c4b8ccd Introduce and use log macros when no mm ctx available
Change-Id: Iba22060d8646bc8ec6227684ccb91d98cb4c7be2
2019-08-20 10:34:29 +00:00
Pau Espin 2179dec71d gprs_gmm.c: Call mmctx_set_(p)mm_state only on related ran_type
For new readers it's very confusing why PMM states and MM states are in
the same enum, but handled with different functions, and sometimes
called one right after the other with different enums. Calling them when
on a different ran_type makes the function early return, so let's better
conditionally call the function to make it clear in the flow when the
function is expected to do something.

Change-Id: I65ad9e180177bc9fc7c4a037cd85cfe33b161f73
2019-08-20 10:34:29 +00:00
Pau Espin 2844b5ea00 gprs_gmm.c: Fix typo in log message
Change-Id: I357f0af89f5d14d304c3e889a49a5f6c23b7fb7a
2019-08-19 17:29:38 +00:00
Pau Espin f0f596f3d9 sgsn: use sccp_simple_client API to setup ss7 id 0 instead of 1
Implementation of osmo_sccp_simple_client() API internally uses ss7 id
1, which is confusing since there's no 0 in use in osmo-sgsn. Let's
explicitly use the 0 one so it is configured by "cs7 instance 0" in the
VTY.

Related: OS#4157
Change-Id: I0e23a6a76ebcba0b1b424e3d3b20d06c1da44cbe
2019-08-19 17:57:16 +02:00
Pau Espin 6e3112579e gprs_gmm.c: Flag mmctx_set_(p)mm_state() functions static
Change-Id: I061144b6994ee40d5b32eb321dd4f3d3786d028d
2019-08-15 13:15:48 +02:00
Pau Espin 05140b8dfe gprs_sgsn.h: Flag MM_CTX_T_GERAN_Iu as not supported
Change-Id: I3b53a530ab25434e2b2f4d80ad70a8a5f22bfcac
2019-08-15 13:15:21 +02:00
Pau Espin c21be62380 gprs_gmm.c: Use correct function to set MM_IDLE state during cleanup
Change-Id: Ic6912269d0d69c86f19e57f3271ebda1328e968f
2019-08-15 13:12:36 +02:00
Pau Espin 1927052de6 gprs_gmm: Introduce assert to guard against unexpected condition
This may well be the culprit of OS#3957, were already freed llme is accessed from
mmctx context later on, upon some timer is triggered in mmctx.

Related: OS#3957

Change-Id: I8e1eaeb9b3ebee8e45704b4fe007190c7db609e4
2019-08-15 13:12:11 +02:00
Pau Espin c488665f92 gprs_sgsn.c: Remove recently introduced assert
Recent commit added an assert to make sure unexpected conditions were
happening in sgsn_mm_ctx_cleanup_free(). Old code was passing
mm->gb.tlli to gprs_llgmm_assign with "new tlli" being all-1's (aka
unassign mm->gb.tlli).
The commit changed the code to use gprs_llgmm_unassign, which uses
llme->tlli instead of mm->gb.tlli, and the assert was used to make sure
no behavior change occured with the commit.
It seems TTCN3 test TC_attach_auth_id_timeout triggers that assert, and
after closer debug it seems mm->gb.tlli == llme->old_tlli, which makes
sense since there's a mm->gb.tlli_new which is expected to be
llme->tlli.
When TLLI changes in GMM (Attach Request or RA Update), it is stored
into mm->gb.tlli_new and assigned on the LLC layer using gprs_llgm_assign(),
and upon completion signalling from MS, (after handling response to initial request)
it is assigned to mm->gb.tlli (and value kept in mm->gb.tlli_new).
So mm->gb.tlli and mm->gb.tlli_new usually contain the same value unless
a new TLLI is allocated, and during the span of
Request->Response->Complete it is kept different, the LLC layer having assigned
the value of mm->gb.tlli_new.
So, old code (before the commit adding the assert) was wrongly using
mm->gb.tlli instead of mm->gb.tlli_new at the moment of unassigning (but
not really problematic in practice since behavior is the same as long as
"old TLLI" value is not all-1's.
So we are fine and correct using gprs_llgm_unassign() (which passes llme->tlli
as "old TLLI") instead of what used to be done before.
In any case, the expected behavior is to free the llme object and get
rid of everything...

Fixes: 788863cda5
Change-Id: I482acdbdf05ce0cb0a5804206672512854067f5b
2019-08-13 20:58:17 +02:00
Pau Espin 982e130144 gprs_gmm: Clarify comment during TLLI assignment
TS 04.64 sec 7.2.1.1 LLGMM-ASSIGN specifies:
"""
If TLLI Old  all 1's and TLLI New  all 1's then TLLI Old and TLLI New are assigned, and TLLI New shall
be used when (re-)transmitting LLC frames. Both TLLI Old and TLLI New shall be accepted when received
from the peer. It shall be treated as a TLLI change according to subclause 8.3.2.
"""

Change-Id: I3a17715bf2dba7b03c1335ad106307eb4d5f564a
2019-08-13 20:23:08 +02:00
Pau Espin 788863cda5 gprs_sgsn.c: Warn upon llme free unexpected scenarios
May be useful to detect unexpected conditions which could end up in
memory leaks.

Related: OS#3957
Change-Id: I0d175501083ce458ff1c07ad38761d2cbf4ea470
2019-08-12 18:33:39 +02:00
Pau Espin 404d9b8bba Introduce define TLLI_UNASSIGNED
Change-Id: Ib8be5af2a5e92a7403505b73ce4c1751832de40d
2019-08-12 17:50:00 +02:00
Pau Espin d723a97fae gprs_gmm.c: Drop unneeded brackets
Change-Id: Ie8ba2b9da695de8730834abb591df64295bb6172
2019-08-12 17:43:35 +02:00
Pau Espin 72b61e4344 gprs_gmm.c: Improve doc on nullable parameters
Change-Id: Iefb9b6dc34d87b4088c7535ef0a246103fe3f7e9
2019-08-12 16:43:58 +02:00
Pau Espin 39aa9ee6df gprs_llc.h: Improve documentation of some structs
Change-Id: I1b45f45addc87c74f3ae109e544143a1335180de
2019-08-12 16:23:04 +02:00
Pau Espin dfd7c24e16 gprs_gmm: Introduce macros to access msgb's associated IU UE ctx
Change-Id: I4d1d47af332d4557e8a3a70c1055bcc172166016
2019-08-12 16:06:49 +02:00
Pau Espin d7ef94c0bb Bump version: 1.4.1 → 1.5.0
Change-Id: Ife43559f395b9602f0b131a672f8d87d6ee48ea2
2019-08-08 16:46:31 +02:00
Pau Espin 37bc0ff580 Require newer versions of dependencies
New APIs only available since libgtp 1.4.0 are needed, and in turn that
libgtp version requires newer libosmocore 1.1.0.

osmo-sgsn itself requires libosmocore 1.2.0 since it uses GSM23003_TMSI_SGSN_MASK.

Change-Id: I1c67d3e7dda093b4869756c7a63dc7a4549084ae
2019-08-08 16:44:05 +02:00
Pau Espin e456e32f15 Remove undefined param passed to {logging,osmo_stats}_vty_add_cmds
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: Ic4af704958819e6f65ac01be33ef5b3d69628ad0
Related: OS#4138
2019-08-05 16:03:39 +02:00
Daniel Willmann c9e8d90982 configuration.adoc: Add a section about encryption
Change-Id: I3a2b84d386f55447e9eed35e59fdc0272e5147d1
Related: OS#1720
2019-07-30 09:02:27 +02:00
Daniel Willmann 862bc62975 configuration.adoc: Small fixes
Fix some typos, correct data compression command, add example to turn
off compression.

Change-Id: I6beff8c66eacf12f1081d51dd6b124bdd4478558
Related: OS#1720
2019-07-30 08:59:39 +02:00
Oliver Smith e18df0e28d osmo-gbproxy.cfg: fix conflict with osmo-sgsn.cfg
Listen on 127.0.0.100 by default, so there is no conflict on
127.0.0.1:23000. This allows starting both services with their default
configuration, like we are doing it in the Osmocom-Debian-install-*
jenkins jobs.

Related: OS#3369
Change-Id: I6e3053de8885a7954296d820c6a069d06276e4df
2019-07-29 08:26:37 +00:00