Commit Graph

928 Commits

Author SHA1 Message Date
Vadim Yanitskiy f9ee8da0cd GSUP/SMS: introduce READY-FOR-SM message
According to 3GPP TS 29.002, section 12.4, MAP-READY-FOR-SM is
used between the MSC and VLR as well as between the VLR and the
HLR to indicate that a subscriber has memory available for SMS.

This change replicates this service in GSUP as READY_FOR_SM_*.
The only mandatory IE for this service (excluding Invoke ID) is
'Alert Reason' that is replicated by OSMO_GSUP_SM_ALERT_RSN_IE.

Change-Id: Ic37f3b2114b8095cfce22977e67133b9103942e3
Related Change-Id: (docs) I549b6c8840a1e86caac09e77fb8bc5042d939e62
Related Change-Id: (TTCN) If2256607527ecfcb10285583332fb8b0515d7c78
Related: OS#3587
2018-12-18 21:52:06 +07:00
Vadim Yanitskiy c2628317cc GSUP/SMS: introduce MO-/MT-FORWARD-SM messages
According to 3GPP TS 29.002, there are two services:

  - MAP-MO-FORWARD-SHORT-MESSAGE (see 12.2),
  - MAP-MT-FORWARD-SHORT-MESSAGE (see 12.9),

which are used to forward MO/MT short messages.

This change replicates both services as GSUP messages:

  - OSMO_GSUP_MSGT_MO_FORWARD_SM_*,
  - OSMO_GSUP_MSGT_MT_FORWARD_SM_*.

Please note, that only the 'must-have' IEs are introduced
by this change, in particular the following:

  - OSMO_GSUP_SM_RP_MR_IE (see note below),
  - OSMO_GSUP_SM_RP_DA_IE (see 7.6.8.1),
  - OSMO_GSUP_SM_RP_OA_IE (see 7.6.8.2),
  - OSMO_GSUP_SM_RP_UI_IE (see 7.6.8.4),
  - OSMO_GSUP_SM_RP_MMS_IE (see 7.6.8.7),
  - OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11, 8.2.5.4),

where both SM_RP_DA and SM_RP_OA IEs basically contain
a single nested TV of the following format:

  - T: identity type (see 'osmo_gsup_sms_sm_rp_oda_t'),
  - V: encoded identity itself (optional).

According to GSM TS 04.11, every single message on the SM-RL has
an unique message reference (see 8.2.3), that is used to link
an RP-ACK or RP-ERROR message to the associated (preceding)
RP-DATA or RP-SMMA message transfer attempt.

In case of TCAP/MAP, this message reference is being mapped to the
Invoke ID. But since GSUP has no 'Invoke ID' IE, and it is not
required for other applications (other than SMS), this change
introduces a special 'SM_RP_MR' IE that doesn't exist in MAP.

Change-Id: Ibe325c64ae2d6c626b232533bb4cbc65fc2b5d71
Related Change-Id: (docs) Ie0150756c33c1352bc4eb49421824542c711175c
Related Change-Id: (TTCN) Ibf49474a81235096c032ea21f217170f523bd94e
Related: OS#3587
2018-12-18 21:52:01 +07:00
Max 5207432780 LCLS: add gsm0808_create_ass2()
It allows setting additional assignment parameters explicitly.

Change-Id: Id89765df3f8c12f55f73f1d7a9d90c8883eb3bba
Related: OS#2487
2018-12-14 13:15:39 +00:00
Max 969fb2ed84 LCLS, TS 48.008: add GCR IE encoding/decoding
* add functions to encode Global Call. Ref. from TS 29.205 as 3GPP TS
  48.008 §3.2.2.115 information element
* add corresponding tests

Change-Id: I82ce0207dc8de50689a8806c6471ad7fbae6219d
2018-12-14 13:15:39 +00:00
Max 7918f84aeb LCLS, TS 29.205: add GCR routines
Add functions to encode and decode Global Call Reference as per
3GPP TS 29.205 Table B 2.1.9.1 add corresponding tests.

Change-Id: Iee95aa4e5c056645b6cb5667e4a067097d52dfbf
Related: OS#2487
2018-12-14 13:15:39 +00:00
Pau Espin 2bf01d439c stats.h: Fix build on MacOS
Otherwise struct osmo_stats_config is not defined and compiler fails.

Related: OS#3722
Change-Id: I037c3ca141ecee2d457e0a881a56e32ee24cec4d
2018-12-13 13:01:28 +00:00
Max db038255eb msgb: add test helpers
It's often handy to compare certain msgb layer to a given array and
print the position where they differ. Add simple pretty-printer and
corresponding L* wrappers.

Change-Id: I3bc95f2f5ab6e3f4b502647fb3e0aaaf1f7c4cf5
2018-12-12 09:34:12 +00:00
Neels Hofmeyr 7079e69848 add osmo_bcd2str()
Add a standalone bcd-to-string conversion function with generic parameters.
Add a regression test in utils_test.c.

So far there is no single universal implementation that converts a BCD to a
string. I could only find gsm48_mi_to_string(), which also interprets
surrounding bytes, MI type and TMSI as non-BCD value.

The idea is to use this function from gsm48_mi_to_string() and similar
implementations in subsequent commits.

Root cause: in osmo-msc, I want to have an alternative MI-to-string function
for composing an FSM name, which needs the BCD part of gsm48_mi_to_string() but
not the TMSI part.

Change-Id: I86b09d37ceef33331c1a56046a5443127d6c6be0
2018-12-10 17:06:30 +00:00
Max c01cff1a50 Constify llist_count() parameter
Counting list entires should not alter the list content: let's make this
obvious from type signature.

Change-Id: I414e67a3de733fab407161b3264d3b89070ba537
2018-12-10 13:42:08 +00:00
Pau Espin 2ca8cebac6 timer: Fix clockid_t undefined on MacOS < 10.12
Related: OS#3722
Change-Id: If466a64bd44dcb8ae8a9b7f82bc9c9435ba3e640
2018-12-10 11:02:16 +01:00
Philipp Maier 4f4905fac5 gsm0808: add encoder for cause codes and use it
At the moment the all gsm0808 cause codes are encoded directly using the
tlv API directly to put a one byte TLV field. This works ok for most
situations where the cause code consists of a single byte. However,
gsm0808 specifies a two byte cause code model where cause codes may be
extended up to two bytes. Instead of implementing the encoding over and
over and again, let's rather have an encoder function we can call.

- Add an encoder function that can generate single byte and extended
  cause codeds and makes the length decision automatically.

- Use only this function to append cause codes

Change-Id: I71d58fad89502a43532f60717ca022c15c73f8bb
2018-12-08 19:29:34 +00:00
Philipp Maier e190e032d9 gsm29118: add generator functions for GSM29118 messages
We already have some GSM29118 related definitions and functions in
libosmocore. Lets also add some functions to generate GSM29118 messages
(similar to those we have for GSM0808).

Change-Id: Ic87f8a771b87b52215d0a7451b67794557b80b8a
Related: OS#3615
2018-12-07 18:35:10 +01:00
Philipp Maier f98c78ec4a gsm_29_118.h: Add constant for default port
The specification defines a default port where the SGs interface should
be reachable. Lets add a define-constant for it.

Change-Id: Ia4b9f547dd980411d15b2691b7f535fa0463f0f1
Related: OS#3615
2018-12-07 12:03:44 +00:00
Philipp Maier 8a942d27b6 cosmetic apn: correct whitespace error
there is a whitespace between the * and osmo_apn_to_str(). Lets
remove this.

Change-Id: I094e6eb08eacf2d6459c47a7370837601aa92925
2018-12-07 11:53:23 +00:00
Max 9d7a247da4 Add osmo_sockaddr_in_to_str_and_uint()
It's similar to osmo_sockaddr_to_str_and_uint() but does not require odd
typecasting for AF_INET case. Make osmo_sockaddr_to_str_and_uint() into
wrapper around new function and make sure to check for address family
before typecasting. Also use proper return type.

Change-Id: Ie384483124d407a960ab6732e6a7fd90554389d2
2018-12-07 10:33:29 +00:00
Philipp Maier 5986a3d89d gsm_29_118: add missing extern for struct value_string decl.
The value string arrays in the header file (gsm_29_118.h) are not
declared as extern. Lets add it now.

Change-Id: Ib6c4cbea649f790fa4db1ed2fe2b7e76a60291b4
Related: OS#3615
2018-12-05 19:35:47 +00:00
Max 14f24c678f LCLS: update osmo_lcls struct
* use pointer to proper struct type for GCR
* update comments to be useful for doxygen

Change-Id: I8ccfbd0c146e462e599e5305520cc89602364ec3
2018-12-04 10:26:42 +01:00
Max d82070c383 Add msgb_tl_put() helper
When adding complex TLV structures where length of V is not known in
advance it's handy to be able to simply add Tag and save the pointer to
the Length field so it can be updated once entire Value is added and its
length is known.

Change-Id: I8dc1e4880352833a0a49c1dd0d7cb4148ac43aff
2018-12-04 10:26:42 +01:00
Max 30b2e348df ctrl: use #define for TRAP id
We always use id = 0 when sending TRAP messages. Let's make this more
obvious by introducing appropriate define.

Change-Id: I33d7d4c6a1885a75a85d6f2f017430e0860b4126
2018-12-03 21:42:51 +00:00
Max cb02a391cd Update msgb Lx helpers
* add missing L1 and L4 hexdump
* add msgb_l4() for consistency and convert msgb_sms() into simple alias

Those will be used in follow-up patches for msgb debug/test helpers.

Change-Id: I8d6dd1b1ff3aa98a452711c692ca7dee0449203b
2018-12-03 16:11:58 +00:00
Philipp Maier 225bdf4779 gsm0808: add message generator for BSSMAP HANDOVER PERFORMED
We currently have no generator function that can generate BSSMAP
HANDOVER PERFORMED messages. Lets add function for this.

Change-Id: I825106858bd89afc9837811b8fed2e8accc82441
Related: OS#3645
2018-12-03 13:54:31 +00:00
Max f69aa9cb6a Move BSSMAP_MSG_* defines to header file
This will be reused be several tests related to TS 48.008 and TS 29.205
in follow-up commits.

Change-Id: I4d8cc05b8df8e70c1f6257e53ae3acec7901681f
2018-11-30 17:45:57 +01:00
Pau Espin c8772517d9 gsm: Deprecate buggy gsm_arfcn2band API and introduce gsm_arfcn2band_rc
ARFCNs are values in well defined ranges. Until this patch, ARFCNs not
belonging to any band were blindly assigned to DCS1800 by
gsm_arfcn2band, causing unnoticed bugs and misconfigurations in
osmo-bsc.

Previous API gsm_arfcn2band cannot accomodate this kind of check easily,
so let's deprecate it to tell people to use a new API gsm_arfcn2band_rc
which performs this kind of checks and allows callers to log failures,
misconfigurations, etc.
At the same time, modify implementation of gsm_arfcn2band to abort if an
invalid ARFCN is passed, this way users of this API can notice they are
passing wrong data to it that most probably will produce unexpected
results.

Related: OS#3063
Change-Id: I780d452dcebce385469e32ef2fd844df6033393a
2018-11-20 16:56:28 +00:00
Max 738782467f LCLS: add 48.008 parameter structure
It's convenient to hold all LCLS-related parameters from 3GPP TS 48.008
in a single structure.

This will be used in follow-up patch handling Assignment Request with
extended parameters as well as corresponding BSC code working with LCLS.

Change-Id: I4b873f9a3c5a5d33b438382971b3d92e40d48d62
Related: OS#2487
2018-11-20 12:32:56 +00:00
Neels Hofmeyr 5a25c3ec4d gsm_44_318.h: remove #if 0 from struct gan_cch_desc_ie
These are actually parts of the struct in big endian order, which will soon be
done automatically by struct_endianess.py.

Change-Id: I9bc694f10fa9cef0bb7fc791bb40e7602459b16b
2018-11-19 14:38:45 +00:00
Max adc4172fe3 Add missing header include
That's necessary for 'struct tlv_parsed' definition although lack of it
does not cause build failure in libosmocore for me but does so for
osmo-bsc.

Change-Id: I3b2d3955d02b07dc7ec5e9f0c66cc477196703ed
2018-11-19 10:44:55 +01:00
Max ed651d2485 Support cipher mode reject with extended cause
* add function to generate cipher mode reject with extended (2-byte)
  Cause IE
* add function to get (extended) Cause value
* add corresponding (extended cause) test
* update existing (non-extended cause) test
* use enum as a parameter for existing non-extended version to make
  interface more unified

Change-Id: Id5509b94a18180a44f45300caaa02b843c166fa3
Related: OS#3187
2018-11-19 05:52:28 +00:00
Max 84fb5bb6a0 Move msgb_push helpers to public header
The msgb_wrap_with_TL() is generally useful so it make sense to make it
public to facilitate code re-use.

Other helpers can be implemented as trivial wrappers over existing tlv.h
functions. Update headers and code accordingly.

Change-Id: I37e91d031fba28cf1c6735b8069b0265746f55e6
2018-11-19 05:47:25 +00:00
Max 961db7c270 Update GSM0808_LCLS enums
Add values indicating that LCLS control/config/status value has not been
received yet.

Change-Id: I52dc6a52f5ee043ed2c1625ffecfd495e3c746b1
Related: OS#2487
2018-11-18 20:20:48 +00:00
Max aa93463053 Update 3GPP TS 08.08 Cause handling
* add Class definitions
* add helper to check for extended bit
* add helper to get Cause's Class
* use enum in gsm0808_cause_name() and gsm0808_create_cipher_reject() to
  avoid confusion between class and cause
* update gsm0808_create_cipher_reject() comments

Change-Id: I31b31dfc22eb4b6b07089e1255246ac458125340
Related: OS#3187
2018-11-18 20:14:06 +00:00
Max c0d1de36f3 Add helper wrapper for BSSAP TLV parsing
Change-Id: Ib228368901ce90a02a5664f2510593371c7d29cd
2018-11-18 20:13:15 +00:00
Philipp Maier 086b345414 gsm29118: add value strings for SGSAP IEI
The value strings for the SGSAP IEI are missing, lets add a set of value
strings and a function to retrieve them.

Change-Id: I2787303174f74ffba86675bce2c12f680d8ea708
Related: OS#3615
2018-11-16 17:42:38 +01:00
Martin Hauke e63b887358 gsm/protocol/gsm_08_58.h: Fix typo
Fix a typo that prevents building on ppc64 (Power8, Big Endian).
Tested with gcc version: 8.2.1+r265487

/bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..  -I../include -I../include  -DBUILDING_LIBOSMOCORE -Wall -Wall  -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -DBUILDING_LIBOSMOCORE -Wall -c -o panic.lo panic.c
 In file included from ../include/osmocom/gsm/rsl.h:6,
                  from gsmtap_util.c:37:
 ../include/osmocom/gsm/protocol/gsm_08_58.h:60:4: error: expected specifier-qualifier-list before 'sapi'
     sapi:3;
    ^~~~

Change-Id: I4a40fc68cb6dfdfadfcc34213c4ecdabbbc356f2
2018-11-15 14:53:13 +01:00
Philipp Maier 534a4b2897 gsm_29_118: add missing include to header file
The header file gsm_29_118.h is defining variables of type struct
value_string, which is declared in core/utils.h. We should add an
include to utils.h to prevent confusion when the header is used.

Change-Id: I9f9bb62d29cd068820ad5aa677717bd448de3f4a
Related: OS#3615
2018-11-07 11:35:21 +00:00
Vadim Yanitskiy e521edefda core/msgb.h: introduce msgb_l4len() helper
There is already a group of similar functions for L1, L2 and L3,
but L4 was missing. The L4 is usually used for parsing of complex
L3 messages, such as SS/USSD and SMS.

This change introduces a similar halper for L4.

Change-Id: I755f2d654bbdad2a8b4f94df9023bdd370b07ae6
2018-11-07 03:58:10 +07:00
Vadim Yanitskiy 5a7b465b09 gsm/gsup.h: cosmetic: use tab for comment alignment
Change-Id: Id71d4b45e2b9f42da5e23e709ad97d4d0abfc3d9
2018-11-06 18:24:49 +07:00
Philipp Maier 1a146c89e2 gsm0808: cosmetic: rename parameter "reason" to "cause"
The function that generates the clear command takes a parameter
"reason", which is the cause code. Lets give it the name "cause" to have
a coherent naming scheme that matches the other functions and the 3gpp
specs.

Change-Id: I7b6c15e8fa8db13deef5041095944ca1c58fb99f
2018-10-30 09:36:49 +01:00
Harald Welte de1da35d51 gsm23003: Add MME domain name related helper functions
osmo_gen_mme_group_domain(), osmo_gen_mme_group_domain() and
osmo_gen_home_network_domain()

Change-Id: Ia882d9db05ec0037e593aeebea21bc31adb680bb
2018-10-28 14:16:18 +01:00
Oliver Smith 7acd5d0394 add osmo_sock_get_{local,remote}_ip{,_port}()
Return only the IP or port of either the local or remote connection,
not the whole set of IP and port of both the local and remote
connection like osmo_sock_get_name() does it. This is needed for
OS#2841, where we only want to print the remote IP.

Related: OS#2841
Change-Id: I6803c204771c59a2002bc6a0e6b79c83c35f87e1
2018-10-26 17:54:16 +00:00
Harald Welte 6721144c80 SGsAP protocol definitions (header + C file)
Change-Id: Idddfc9b851eb4c2fa7dd661a9ce1b03a04883109
2018-10-21 12:35:34 +00:00
Pau Espin fb97e72e52 gsm_08_58.h: Introduce struct abis_rsl_chan_nr
It will allow to make code handling chan_nr values more easier to read
and less prone to errors.
union is used to be able to get the full octet in
case we need to pass it somewhere else or encode it.

An extra union is used in struct abis_rsl_common_hdr and others to allow
using fields directly while keeping API compatibility.

Change-Id: Icd6822021207270a00106c50f8ca6b93c1250df9
2018-10-21 12:25:13 +00:00
Pau Espin 4290803d89 gsm_08_58.h: Introduce struct abis_rsl_link_id
It will allow to make code handling link_id values more easier to read
and less prone to errors.
union is used to be able to get the full octet in
case we need to pass it somewhere else or encode it.

An extra union is used in struct abis_rsl_common_hdr to allow using fields
directly while keeping API compatibility.

Change-Id: Ibd75a493bcfdf46c028ea466867d0c0d83d46343
2018-10-10 20:43:25 +00:00
Shinjo Park 0903fce28b GSMTAP: fix typos in comments
Change-Id: I2e710141ee90ddc8b5336d5f81e99bd918d10106
2018-10-07 20:25:06 +02:00
Shinjo Park f589cbbdee GSMTAP: add definitions for LTE NAS subtypes
Wireshark GSMTAP dissector has LTE NAS subtypes for plain NAS messages
and NAS messages with security header. This commit adds definition for
these subtypes.

Change-Id: I49d15fb13299c1bcbe0fb7e50bf222294c7a49ef
2018-10-07 20:23:32 +02:00
Shinjo Park d741b78315 GSMTAP: add definitions for new LTE RRC channels
Later release of 3GPP TS 36.331 added new LTE RRC channels. This commit
additionally defines LTE RRC message types existing in Release V15.3.0.

Change-Id: Ifa48b2227be15af04c9a4702d2025abcc660f0df
2018-10-07 20:20:32 +02:00
Philipp Maier 8515d035ae gsm0808: add function to convert AMR S15-S0 to gsm0408 settings
Add a function to convert S0-S15 bits to struct gsm48_multi_rate_conf,
which hold the codec settings for AMR.

Change-Id: I973736273c236eee84decf15868190e339c3fed4
Related: OS#3548
2018-09-25 15:32:29 +00:00
Philipp Maier b066305016 gsm_utils: add function to get value strings for gsm48_chan_mode
The enum gsm48_chan_mode has value strings, but no function to retrieve
those strings. Lets add one.

Change-Id: If715705e1ebdfcfdfae1c2099932f7bb8b3861a7
2018-09-25 13:07:45 +02:00
Vadim Yanitskiy e65c8bad46 vty/command.h: document and prettify CMD_ATTR_* flags
Since the CMD_ATTR_* flags are intended to be used in bitwise
operations, let's assign them proper values. Adding a new flag
(e.g. CMD_ATTR_FOO_BAR) could actually result in assigning 0x03
instead of expected (0x01 << 2).

Change-Id: I3b1badef830f7e6436a67673b5709ec33c060c68
Related: OS#3584
2018-09-24 13:02:07 +07:00
Philipp Maier 369015c535 gsm0808_utils: constify parameter
parameter cfg in gsm0808_sc_cfg_from_gsm48_mr_cfg() is used read only.
Lets add a const to make this clear to the compiler.

Change-Id: I31e8d273b070b0afc446a298299d4f502d6c396b
2018-09-21 09:07:42 +02:00
Philipp Maier 5f2eb15074 gsm0808: add function to convert amr gsm0408 setings to gsm0808
Add a function to convert struct gsm48_multi_rate_conf, which holds the
codec settings for AMR, to S0-S15 bit representation as defined in
3GPP TS 48.008 3.2.2.49

This resurrects change-id I4e656731b16621736c7a2f4e64d9ce63b1064e98
which was reverted in I9e0d405e303ed86d23703ca6362e958dddb2f861
due to gsm0808_test failing.

The test failure is fixed by properly clearing the struct
gsm48_multirate_cfg prior to running tests (add memset(0)).

Change-Id: Ia782e21c206c15e840226d79b4209d13658ee916
Related: OS#3548
2018-09-19 14:01:10 +00:00