path: root/include/osmocom/gsm
AgeCommit message (Collapse)AuthorFilesLines
2019-02-08gsm/gsm0480: introduce gsm0480_create_release_complete()Vadim Yanitskiy1-1/+3
In OsmoMSC, it's required to be able to specify a particular GSM 04.07 transaction ID for GSM 04.80 Release complete message instead of the hard-coded value, that is used gsm0480_create_ussd_release_complete(). Let's finally deprecate gsm0480_create_ussd_release_complete(), and introduce a new function without USSD prefix, as this message is also used in other "structured" supplementary services. Change-Id: Ie3ac85fcef90a5e532334ba3482804d5305c88d7
2019-02-07protocol/gsm_04_14: Fix the OPEN LOOP message typeSylvain Munaut1-1/+1
Change-Id: Id4350dee4353ebf9de0450dd5dab6e4f2ee7c3a6 Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2019-02-05gsm0808: Add CSFB indication IE to BSSMAP CLEAR COMMANDPhilipp Maier1-0/+1
When a call that was established in a CSFB context ends the CLEAR COMMAND that is send from the BSC to the MSC should contain a CSFB indication IE, which consists of just the IE byte itsslef. This additional IE tells the BSC to include other CSFB related IEs into the RR Release message. Change-Id: Id8a75e1da2d5f520064666e4ee413d1c91da6ae3 Related: OS#3778
2019-02-05gsm_08_08.h: Add IEI definitions from Release 15Harald Welte1-0/+5
Change-Id: If3649606ba7c25121e30ed02939ca08c94665be5
2019-02-05Extend gsm_04_08.h with CSFB related definitiosn form 44.018 Rel 15Harald Welte1-0/+2
These are some IEI definitions that we'll need for CSFB Fast Return Change-Id: I0e101af316438b56d63d43fc2cb16d7caf563d07
2019-02-04GSUP: deprecate osmo_gsup_get_err_msg_type()Oliver Smith1-2/+14
Replace osmo_gsup_get_err_msg_type() with a wrapper to OSMO_GSUP_TO_MSGT_ERROR(). This macro assumes, that all error messages are (request message | 0x000001). Add a big comment header for osmo_gsup_message_type, describing this already implicitly followed rule and therefore making it explicit. With this change, we don't need to maintain the request -> error message mapping in osmo_gsup_get_err_msg_type() anymore. Related: Iec1b4ce4b7d8eb157406f006e1c4241e8fba2cd6 (osmo-gsm-manuals) Change-Id: I46d9f2327791978710e2f90b4d28a3761d723d8f
2019-01-29add osmo_classmark_* APINeels Hofmeyr1-0/+16
osmo-bsc and osmo-msc implement identical Classmark structures. It makes sense to define once near the gsm48 protocol definitions. Also move along some generic Classmark API from osmo-msc. Change-Id: Ifd27bab0380f7ad0c44c719aa6c8bd62cf7b034c
2019-01-28gsm0808: add BSSMAP Cell Identifier matching APINeels Hofmeyr2-0/+5
Add * osmo_lai_cmp() (to use in gsm0808_cell_id_u_matches()) * osmo_cgi_cmp() (to use in gsm0808_cell_id_u_matches()) * gsm0808_cell_id_u_match() (to re-use for single IDs and lists) * gsm0808_cell_ids_match() * gsm0808_cell_id_matches_list() * Unit tests in gsm0808_test.c Rationale: For inter-BSC handover, it is interesting to find matches between *differing* Cell Identity kinds. For example, if a cell as CGI 23-42-3-5, and a HO for LAC-CI 3-5 should be handled, we need to see the match. This is most interesting for osmo-msc, i.e. to direct the BSSMAP Handover Request towards the correct BSC or MSC. It is also interesting for osmo-bsc's VTY interface, to be able to manage cells' neighbors and to trigger manual handovers by various Cell Identity handles, as the user would expect them. Change-Id: I5535f0d149c2173294538df75764dd181b023312
2019-01-22constrain gsm48_generate_mid() output array boundsHarald Welte1-0/+1
The longest BCd-digit type identity is the IMEISV with 16, so there's no point in trying to parse up to 255 decimal digits, which will do nothing but to overflow the caller-provided output buffer. Let's also clearly define the required minimum size of the output buffer and add a reltead #define for it. Change-Id: Ic8488bc7f77dc9182e372741b88f0f06100dddc9
2019-01-21gsm_23_003.h: add GSM23003_IMEI_NUM_DIGITS_NO_CHKOliver Smith1-0/+3
Add new define for the 14 digit IMEI without the Luhn checksum, as it is used in OsmoHLR. Change-Id: I02b54cf01a674a1911c5c897fbec02240f88b521
2019-01-19Prevent GCR encoder/decoder functions from being used directlyMax1-2/+2
They only make sense in the context of LCLS so far - let's make sure they're not used by external projects directly instead of gsm0808_*() counterparts. Change-Id: I4ae5a3472a20492d5f76170b722e4e2274a5c433
2019-01-19LCLS: make GCR into static member of osmo_lclsMax1-1/+2
Most of the time we'll have GCR filled anyway so it make sense to have it as static parameter instead of a pointer to separately allocated structure. Update tests to cover both static and dynamic osmo_lcls allocation variants. Change-Id: I905c36d8455911c68c30bc429379b7313dd46aea
2019-01-19LCLS: add status parameter to Assignment Completed messageMax1-0/+6
* add gsm0808_create_ass_compl2() with additional gsm0808_lcls_status parameter and make gsm0808_create_ass_compl() into trivial wrapper around it * update tests accordingly Change-Id: I547c6b8707123aa8c1ef636db88908df112d90a4 Related: OS#2487
2019-01-14LCLS: add GCR comparison helperMax1-0/+1
Change-Id: I9e3b5560a058b976638d03cb819415d237ae9984
2019-01-14comments: update/fix three 3GPP spec referencesNeels Hofmeyr3-3/+3
Change-Id: I3ab94f362866d752099000afe62922288b3dd118
2019-01-14change GSM48_CMSERV_* to enum type, add namesNeels Hofmeyr1-7/+14
Prepare handling multiple CM Service Requests in osmo-msc: an enum is more clear than an int and #defines for passing around and count CM Service types. Change-Id: I9c2a7adc45ab7a1a7519168e965e7d805e1481ff
2019-01-14gsm23003: add osmo_imei_str_valid()Oliver Smith1-0/+1
Verify 14 digit and 15 digit IMEI strings. OsmoHLR will use the 14 digit version to check IMEIs before writing them to the DB. Place the Luhn checksum code in a dedicated osmo_luhn() function, so it can be used elsewhere. Related: OS#2541 Change-Id: Id2d2a3a93b033bafc74c62e15297034bf4aafe61
2019-01-12port rest octets encoding code from osmo-bscStefan Sperling1-0/+87
As part of fixing issue OS#3075, we want to migrate support for encoding system information from osmo-bsc to libosmocore. This change ports osmo-bsc code for encoding SI rest octets. The conversion was a bit tricky in some places because some functions receive a 'struct gsm_bts' parameter in osmo-bsc. In this libosmocore version, such functions expect parameters which correspond to the individual fields of 'struct gsm_bts' which are used by these functions. Several structs from osmo-bsc's system_information.h are now also declared in libosmocore headers, with an added osmo_ prefix to avoid collisions with existing definitions in osmo-bsc. Some helpers were ported from osmo-bsc's system_information.c to libosmocore's gsm48_rest_octets.c. Contrary to osmo-bsc's implementation they are now only visible within this file. Unfortunately, this code ported from osmo-bsc lacks unit tests. Change-Id: I47888965ab11bba1186c21987f1365c9270abeab Related: OS#3075
2019-01-12port arfcn range encode support from osmo-bscStefan Sperling1-0/+25
As part of fixing issue OS#3075, we want to migrate support for encoding system information from osmo-bsc to libosmocore. This change ports one of the prerequisites for doing so: osmo-bsc code for range-encoding ARFCNs, including tests. An osmo_gsm48_ prefix has been prepended to public symbols in order to avoid clashes with existing symbols in osmo-bsc code. Change-Id: Ia220764fba451be5e975ae7c5eefb1a25ac2bf2c Related: OS#3075
2019-01-09LCLS: use proper types for value_string wrappersMax1-3/+3
Change-Id: I0f47a610e06ac99bd60a5aad6f50f3658480165e
2019-01-09Cosmetic: GSUP: note "on wire" for imei_resultOliver Smith1-2/+2
Note that OSMO_GSUP_IMEI_RESULT_ACK is 0 on the wire, although the enum value is 1. Same with NACK (1 on wire, enum 2). I had implemented enum osmo_gsup_imei_result after enum osmo_gsup_cancel_type above, where this comment exists as well, and I incorrectly assumed that enum osmo_gsup_cn_domain in the middle was also implemented this way and therefore adding the comments to each enum would be redundant. But for cn_domain, the values on the wire are the same as the enum values. Change-Id: If97c34f117bfaab2232bbb625e9d118c8f390e58
2019-01-08add osmo_lu_type_names[], osmo_lu_type_name()Neels Hofmeyr1-0/+4
Move lupd_names[] from osmo-msc to libosmo-gsm. Change-Id: Ica25919758ef6cba8348da199b0ae7e0ba628798
2019-01-08add osmo_mi_name(), for MI-to-string like "IMSI-123456"Neels Hofmeyr1-0/+1
We have gsm48_mi_to_string() and osmo_bcd2str(), but still lack a function that conveniently prints both MI type and value in one function call. Related: http://people.osmocom.org/neels/mi_mi_mi.jpg Change-Id: I7798c3ef983c2e333b2b9cbffef6f366f370bd81
2019-01-07LCLS: fix LCLS-CONNECT-CONTROL encoderMax1-2/+2
Previously it could encode both incorrect values as well as incorrect message. Let's fix this by explicitly checking for invalid values and ensuring that at least one of the parameters is valid. This function have no external or internal users so it's better to fix type signature as well to match the rest of gsm0808_create_lcls_*(). Change-Id: I7b33a771acbd391c5f9a494d6450edb18511433f
2019-01-04fix typo in enum BSS_MAP_MSG_TYPE: BSS_MAP_MSG_ASSIGMENT*Neels Hofmeyr1-3/+7
Keep #defines to still support previous wrong spelling. Change-Id: Id4cf812f0bc3cd40f6bfa05166f817a07a647f71
2019-01-04osmo_rat_type: add OSMO_RAT_EUTRAN_SGSNeels Hofmeyr1-0/+1
osmo-msc is about to implement the SGs interface and requires a RAT indicator for that. Change-Id: I00588396bfe03feba38ecb0717d584594f0b2b46
2019-01-03gsm_utils: add enum osmo_rat_type, from osmo-msc enum ran_typeNeels Hofmeyr1-0/+13
In the MSC, we have RAN types GERAN_A and UTRAN_IU, now we need a similar enum in osmo-hlr's GSUP client. Naming: in the MAP specifications, the RAN type is mostly called RAT type, (Radio Access Network vs. Radio Access Technology?). Since GSUP is more about MAP messages, I'm calling the enum osmo_rat_type. Rationale: osmo-msc and osmo-sgsn want to tell the osmo-hlr which RAT a subscriber is calling on. A subsequent patch will extend the GSUP protocol and add a RAT types IE. Change-Id: I659687aef7a4d67ca372a39fef31dee07aed7631
2018-12-23LCLS: enc/dec entire parameter set instead of GCRMax1-2/+2
In 3GPP TS 48.008 the Global Call Reference IE is only used in HANDOVER REQUEST (§ and ASSIGNMENT REQUEST (§ messages which also include LCLS Config and CSC parameters. Hence, there's no point in using GCR encode/decode functions alone. Introduce gsm0808_dec_lcls() and gsm0808_enc_lcls() as trivial wrappers on top of GCR enc/dec routines which are made static. Adjust tests accordingly. Test output intentionally left unchanged. Change-Id: Icfbb2404e1a1d500243e2071173299b557369335
2018-12-21GSUP: add CHECK-IMEI messageOliver Smith1-0/+16
Implement necessary messages for Procedure Check_IMEI_VLR (TS 23.018 Chapter This lets the VLR ask the EIR to check if an IMEI is valid. In the Osmocom stack, we don't have an EIR and this request will be handled by the HLR. We will be able to store the IMEI in the HLR as side-effect (OS#2541). This is roughly based on TS 29.002 8.7.1 MAP_CHECK_IMEI service, but only implements the bare minimum required IEs (imei and imei_result). Related: OS#3733 Change-Id: I085819df0ea7f3bfeb0cabebb5fd1942a23c6155
2018-12-21GSUP: add end marker to enum osmo_gsup_ieiOliver Smith1-0/+2
Simplify gsup_test.c by defining an end marker in gsup.h. No need to manually update the last element every time anymore. The C standard guarantees, that the end marker will have the last value plus one: "Each subsequent enumerator with no = defines its enumeration constant as the value of the constant expression obtained by adding 1 to the value of the previous enumeration constant." (From C99: Enumeration specifiers) Change-Id: I2aab7245e209f0ebd2f33a83d4d181dd3339cb17
2018-12-20TLV: add convenience function for 1-byte valuesMax1-0/+16
Similar to existing 16 and 32 bit value helpers but simpler because we don't have to worry about alingment and endianness. Change-Id: Ic0a148bd04b8860e321f509fdcd913f688c8e920
2018-12-20TLV: fix doc copy-paste errorMax1-1/+1
Change-Id: I8aa79cab7505585de00ee2aaae125462108906e8
2018-12-19rename CELL_IDENT_LAI_AND_LAC to CELL_IDENT_LAIStefan Sperling1-2/+3
The name "LAI AND LAC" makes no sense because a LAC is part of a LAI. Keep the old name available for API backwards compatibility. Change-Id: I2749cf75b7b45de0cd43cf4c696a6b6984f5a065 Related: OS#3124
2018-12-19add/clean big-endian packed structs (struct_endianess.py)Neels Hofmeyr7-45/+541
This is 1:1 the result of doing cd libosmocore ./contrib/struct_endianess.py git commit -a Running struct_endianess.py again should result in no changes. That means we could include such a check in the gerrit verification job now. Change-Id: Ia0b99d76932aeb03e93bd0c62d3bf025dec5f9d2
2018-12-18GSUP/SMS: introduce READY-FOR-SM messageVadim Yanitskiy2-0/+14
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-18GSUP/SMS: introduce MO-/MT-FORWARD-SM messagesVadim Yanitskiy2-0/+75
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, - OSMO_GSUP_SM_RP_OA_IE (see, - OSMO_GSUP_SM_RP_UI_IE (see, - OSMO_GSUP_SM_RP_MMS_IE (see, - OSMO_GSUP_SM_RP_CAUSE_IE (see GSM TS 04.11,, 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-14LCLS: add gsm0808_create_ass2()Max1-0/+6
It allows setting additional assignment parameters explicitly. Change-Id: Id89765df3f8c12f55f73f1d7a9d90c8883eb3bba Related: OS#2487
2018-12-14LCLS, TS 48.008: add GCR IE encoding/decodingMax1-0/+5
* add functions to encode Global Call. Ref. from TS 29.205 as 3GPP TS 48.008 § information element * add corresponding tests Change-Id: I82ce0207dc8de50689a8806c6471ad7fbae6219d
2018-12-14LCLS, TS 29.205: add GCR routinesMax2-1/+42
Add functions to encode and decode Global Call Reference as per 3GPP TS 29.205 Table B add corresponding tests. Change-Id: Iee95aa4e5c056645b6cb5667e4a067097d52dfbf Related: OS#2487
2018-12-08gsm0808: add encoder for cause codes and use itPhilipp Maier1-0/+1
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-07gsm29118: add generator functions for GSM29118 messagesPhilipp Maier2-0/+72
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-07gsm_29_118.h: Add constant for default portPhilipp Maier1-0/+3
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-07cosmetic apn: correct whitespace errorPhilipp Maier1-1/+1
there is a whitespace between the * and osmo_apn_to_str(). Lets remove this. Change-Id: I094e6eb08eacf2d6459c47a7370837601aa92925
2018-12-05gsm_29_118: add missing extern for struct value_string decl.Philipp Maier1-8/+8
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-04LCLS: update osmo_lcls structMax1-4/+4
* use pointer to proper struct type for GCR * update comments to be useful for doxygen Change-Id: I8ccfbd0c146e462e599e5305520cc89602364ec3
2018-12-04Add msgb_tl_put() helperMax1-0/+12
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-03gsm0808: add message generator for BSSMAP HANDOVER PERFORMEDPhilipp Maier1-0/+24
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-11-30Move BSSMAP_MSG_* defines to header fileMax1-0/+3
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-20gsm: Deprecate buggy gsm_arfcn2band API and introduce gsm_arfcn2band_rcPau Espin Pedrol1-1/+2
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-20LCLS: add 48.008 parameter structureMax1-0/+8
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