Commit Graph

5613 Commits

Author SHA1 Message Date
Neels Hofmeyr
9015d4db52 msc: ignore cb retval on auth/sec mode rx
Just return 0 regardless of the security callback's return value when
receiving authentication response or security mode complete messages.
2016-05-04 16:06:59 +02:00
Neels Hofmeyr
3cda077541 IuCS: properly clean up conn on release
Don't call msc_subscr_con_free() directly, instead use
gsm0408_clear_request(), which properly cleans up all pending operations
before freeing the connection.
2016-05-04 16:06:59 +02:00
Neels Hofmeyr
c3da27fa98 gsm0408_clear_request(): actually free the released conn
By having conn->in_release == 1, calling msc_release_connection() has no
effect and thus never frees the conn. So, after all pending requests have
been discarded, also discard and free the unused connection.
2016-05-04 16:06:59 +02:00
Neels Hofmeyr
bfc190e0fc gsm04_08_clear_request(): release loc with arg release=0
In gsm04_08_clear_request(), in_release == 1 anyway and
msc_release_connection() would exit immediately without any effect. Don't
confuse the reader by passing release=1 arg.
2016-05-04 16:06:59 +02:00
Neels Hofmeyr
f959ad8991 cosmetic: move subscr_conn alloc&free to gsm_04_08.c
Subscriber conn stuff doesn't really belong in gsm_subscriber.c.

(I moved because I thought it would call some static functions in gsm_04_08.c,
which ended up not being the case; anyway, it makes more sense to stay in
gsm_04_08.c.)
2016-05-04 16:04:36 +02:00
Neels Hofmeyr
f3bcdd272b msc subscr: add paging timeout
In NITB, the paging timeout would be handled from the BSC side. In IuCS, we
need to invalidate the paging request from libmsc alone, so add a paging timer
to gsm_subscriber.

Possibly, the HNB-GW should respond with a paging failure and libmsc could
trigger on that, nevertheless libmsc should not rely on a failure message to
expire pending pagings.
2016-05-04 13:23:34 +02:00
Neels Hofmeyr
1d125c902f subscr_paging_dispatch(): add assertions
Make sure that subscr and conn are valid:

* a subscr must always be present.
* on success, a conn must be present and the subscr must match the conn's
  subscr.

Also check the hooknum.
2016-05-04 13:20:11 +02:00
Neels Hofmeyr
35ebbbea7a gitignore dir for python config tests 2016-05-04 13:20:11 +02:00
Neels Hofmeyr
a95927c1de comment tweak 2016-05-04 13:20:11 +02:00
Neels Hofmeyr
03ded61060 debug log for SMS 2016-05-04 13:09:01 +02:00
Neels Hofmeyr
26d0326157 debug log tweaks for paging 2016-05-04 13:09:01 +02:00
Neels Hofmeyr
885a11b33e Revert "subscr_paging_dispatch(): use conn->subscr instead of separate param"
This reverts commit 6f4e83beb0, but note:
this is not a 1:1 revert since the subscr_paging_sec_cb() semantics have changed.

In subscr_paging_dispatch(), the separate subscr parameter is needed in cases
where paging expired and there is no conn available.

For subscr_paging_sec_cb(), a conn must always be available. Hence it avoids
any duplicity by only passing the conn and deriving the subscr from that.

Callers of subscr_paging_sec_cb() pass NULL as param, so pass conn->subscr when
calling subscr_paging_dispatch() from subscr_paging_sec_cb().
2016-05-04 13:05:36 +02:00
Neels Hofmeyr
99f2477653 cosmetic: IuCS logging 2016-05-02 19:51:12 +02:00
Neels Hofmeyr
a9791df3b9 add enum iu_event_type to string conversion 2016-05-02 19:49:58 +02:00
Neels Hofmeyr
d9202b342c comments and debug log for paging response 2016-05-02 17:05:13 +02:00
Neels Hofmeyr
c902bd4032 msc_paging_request(): remove unused parameters
The network is known from subscr; the type is not applicable after MSCSPLIT;
cbfn and data are obsoleted by explicit subscr_rx_paging_response().
2016-05-02 17:03:36 +02:00
Neels Hofmeyr
ad21c3b8e3 msc_paging_request(): make static
it is never called outside of gsm_subscriber.c
2016-05-02 17:03:36 +02:00
Neels Hofmeyr
28fdbdcd53 msc: paging: use gsm_subscriber API to add Integrity Protection for IuCS
During peliminary paging response testing, I introduced some code duplication.
Remove that and instead call the code that was there before 63b99ced83
("add preliminary paging response handling, incomplete").

By calling the gsm_subscriber API, the connection is also secured and hence
Integrity Protection is enabled for IuCS.
2016-05-02 17:03:36 +02:00
Neels Hofmeyr
903ad2e135 cosmetic: msc: handle_paging_resp() tweaks
Tweak debug logging, use paging category DPAG.

Change the order of arguments to make more sense in the causal relationship.
2016-05-02 17:03:36 +02:00
Neels Hofmeyr
04bfcdd6c2 paging: actually verify subscriber authorization
Before this, any paging response would be accepted by the CN, without
checking the database whether the subscriber is in fact authorized.

The probability that a subscriber would be able to take unauthorized action
is slim, nevertheless checking authorization status with the database should
happen before we accept a connection.
2016-05-02 17:03:36 +02:00
Neels Hofmeyr
3a9c52a5dc paging: change subscr_paging_cb() into subscr_rx_paging_response()
Remove one layer of callback indirection in paging. When a paging response
arrives, we always want to first secure the connection, thus a fixed
subscr_rx_paging_response() function is more appropriate and avoids having
to store a cbfn. The actual actions to be taken upon successful paging are
of course still in callback functions stored with each subscriber.
2016-05-02 16:30:10 +02:00
Neels Hofmeyr
c6580c5b2c Allow paging even though is_paging is false
It doesn't really hurt to see whether we have paging responses queued for
a given subscriber. Possibly a subscriber replied with a paging response
later than we assumed the paging to be valid.
2016-05-02 16:30:10 +02:00
Neels Hofmeyr
fb845bb1df cosmetic: subscr_paging_dispatch() comments/indent 2016-05-02 16:30:10 +02:00
Neels Hofmeyr
6f4e83beb0 subscr_paging_dispatch(): use conn->subscr instead of separate param 2016-05-02 16:30:10 +02:00
Neels Hofmeyr
214302b306 cosmetic: subscr_paging_dispatch() comments/indent 2016-05-02 16:30:10 +02:00
Neels Hofmeyr
defe78f1e1 add comments on MSCSPLIT and paging 2016-05-02 16:30:10 +02:00
Neels Hofmeyr
061787878c gsm_04_08 mscsplit: subscr_request_channel() -> subscr_request_conn()
Rename subscr_request_channel() to _conn() and remove the channel_type arg.
The "channel" is a term from closely tied MSC+BSC code, after separation we
shall call it a "connection", i.e. over IuCS or A.

The channel_type arg is already unused from a previous MSCSPLIT commit.
2016-05-02 16:30:10 +02:00
Neels Hofmeyr
00007897d4 gsm_04_08: factor out subscr authorization check
Add function subscr_authorized(), absorbing the guts of static
authorize_subscriber() from gsm_04_08.c, except the parts specific to Location
Updating.

subscr_authorized() is a check that is to be added to validation of a paging
response.
2016-05-02 16:30:10 +02:00
Neels Hofmeyr
5c4386c692 cscn: (re-)add SMPP initialization
Remove legacy code from the original NITB version -- the SMPP init functions
have since been refactored in 1b0e5540db.

Add SMPP initialization in the refactored version: call the alloc_init
before reading config file, and call start with the global network struct
after config is read.
2016-05-02 14:04:11 +02:00
Harald Welte
fc68c83ddb Support raw IPv4 address in RAB Assignment Response
There are different Iu dialects in terms of encoding the
transport layer address inside RAB Assignment req + resp.

Let's be liberal in what we accept, and simply use the length
as an indicator of the format.  Wireshark uses similar heuristics.
2016-05-01 15:35:59 +02:00
Harald Welte
74101106a1 RAB Assignment Response: Handle TEID changes
When the RNC confirms the RAB Assignment, it can each time indicate a
new TEID for the GTP-U endpoint on the RNC side.  We need to update our
information about the PDP context and include that in the UPDATE PDP
CONTEXT that we're sending towards the GGSN.  This is similar to
updating the RNC-side IP address of the GTP endpoint.
2016-05-01 15:35:58 +02:00
Harald Welte
db916bfd8d iu_rab_act_ps: Use GGSN-side TEI in RAB Assignment Requeset
When we send the RAB Assignment Request to the RNC, we need
to tell it the GGSN-side TEI for data, not "our" (SGSN side)
TEID.

In the RAB-Assignment.req we inform the RNC of the TEID on the GGSN
side, and in the RAB-Assignment.resp the RNC informs us of the TEID
on the RNC side.
2016-05-01 15:35:58 +02:00
Harald Welte
a54358879f Identify PDP context by RAB ID, not TEI
When receiving an RAB-Assignment response from the RNC,
we should use the RAB ID (=NSAPI) to resolve the PDP context.

We cannot use the TEID, as the TEID chosen by the RNC for this RAB has
no relationship to the TEID we were using for the RAB-Assignment
request.  TEIDs are local to each of the peer, like UDP port numbers.
2016-05-01 15:35:57 +02:00
Harald Welte
a54b47b048 libiu: Fix missing break statements in switch in cn_ranap_handle_co() 2016-05-01 15:35:56 +02:00
Harald Welte
3b922064a4 SGSN: Use PDP Context NSAPI as RAB ID
As Dieter has pointed out, the RANAP spec requires the RAB ID to be
equal to the NSAPI of the PDP context for which it is established.
2016-05-01 15:35:52 +02:00
Harald Welte
5b3fd465d1 Fix parsing of auto-generated config file
When starting with empty config file, saving it by 'write file',
and then re-starting osmo-cscn, it would complain:

Error occurred during reading below line:
 long name Osmocom Circuit-Switched Core Network

The problem is that the vty parser is configured to expect a single
token and not a list of tokens here, but we initialize the default value
with multiple words (which are treated as separate token).
2016-05-01 15:34:08 +02:00
Neels Hofmeyr
0991c684d3 debug log for paging: add/tweak 2016-04-27 00:15:26 +02:00
Neels Hofmeyr
dc4b14b269 RAB: add debug log for PS RAB assignment 2016-04-25 19:24:30 +02:00
Neels Hofmeyr
687270de3a RAB parameters: apply use_x213_nsap parameter addition
Add use_x213_nsap parameter to iu_rab_act_ps(), pass the new parameter
from two callers as 1 such that there is no functional change.
2016-04-25 19:24:30 +02:00
Neels Hofmeyr
96f88fda06 paging_signal_data: remove unused lac member 2016-04-25 19:24:30 +02:00
Neels Hofmeyr
2ae1f5b7e0 paging response: remove extraneous null check, assert conn and msg further up
In handle_paging_response(), don't check conn against NULL after using it all
the time anyway.

To ensure beyond doubt that it is actually never NULL, assert conn further up
in the call stack, i.e. in gsm0408_dispatch(), the main entry point for
receiving data from the BSC/RNC level. Also assert msg while at it.

Fixes: CID#93769
2016-04-25 19:24:30 +02:00
Neels Hofmeyr
63b99ced83 add preliminary paging response handling, incomplete
In gsm_04_08.c, add a static handle_paging_resp() to take over from the libbsc
function gsm48_handle_paging_resp(). Use the subscr->requests listing to handle
a Paging Response and call the pending cbfn.

In NITB, this used to be done via BTS, and I haven't entirely resolved yet how
exactly to rewire this in standalone libmsc. So far, this "works for me", but
is worth another visit.

Still missing: enable Integrity Protection.
2016-04-20 11:30:14 +02:00
Neels Hofmeyr
0b8e6dd2df gsm_04_08.c: fix security mode cmd: use auth tuple from MM auth 2016-04-20 11:23:00 +02:00
Neels Hofmeyr
9f2eaf8f56 cosmetic: auth tuple memcpy: rather use target's sizeof() 2016-04-20 11:23:00 +02:00
Neels Hofmeyr
afce55a4bc tweak tmp_rand[] type to avoid compiler warnings 2016-04-20 11:23:00 +02:00
Neels Hofmeyr
f3a1ca5d04 gprs_gmm.c: include openssl/rand.h against RAND_bytes() compiler warning 2016-04-20 11:23:00 +02:00
Neels Hofmeyr
c7fcdeb18e IuCS auth: generate auth tuples, factor out
Factor out hardcoded-Ki and auth tuple creation into a static function.

Add generation of fresh random bytes and generate a valid auth tuple so that
the authentication token is different for every MM Auth.
2016-04-20 11:23:00 +02:00
Neels Hofmeyr
3aa8b30bb3 cscn: enable SMS queue (by removing an '#if 0') 2016-04-20 11:22:59 +02:00
Neels Hofmeyr
208250558f cscn: enable 'subscriber' vty commands for libmsc
This involves removing the openbsc_vty_print_statistics() from
vty_interface_layer3.c, as this would link across the MSC/BSC border.
2016-04-20 11:22:59 +02:00
Neels Hofmeyr
bdb3f26668 cn_ranap_handle_co: add error rc and logging for PR Outcome 2016-04-20 11:22:59 +02:00