summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* gsm48_decode_bcd_number2(): return -EINVAL if LV has too big lengthVadim Yanitskiy2019-05-283-5/+5
| | | | Change-Id: Ie07b2e8bc2f9628904e88448b4ee63b359655123
* gsm48_decode_bcd_number2(): fix: return -ENOSPC on truncationVadim Yanitskiy2019-05-283-7/+17
| | | | | | | | The documentation of gsm48_decode_bcd_number2() clearly states that the output truncation is a erroneous case, so it should actually return negative in such cases. Let's return -ENOSPC. Change-Id: I75680f232001ba419a587fed4c24f32c70c3ad2b
* gsm48_decode_bcd_number2(): fix output truncationVadim Yanitskiy2019-05-282-4/+4
| | | | | | | | | | | | | | | | | Thanks to the new unit test for BCD number encoding / decoding, it was discovered that gsm48_decode_bcd_number2() does not properly handle encoded LV if the output buffer size is equal to the original MSISDN length + 1 (\0-terminator): one digit is lost. For example, decoding of 15-digit long MSISDN to a buffer of size 16 (15 digits + 1 for \0) would give us only 14 digits. The problem was that 'output_len' was being decremented before checking the remaining buffer length and writing a digit to it. As a result, the maximum length was always one byte shorter. Change-Id: I61d49387fedbf7b238e21540a5eff22f6861e27a Fixes: OS#4025
* gsm0408/gsm0408_test.c: introduce BCD number encoding / decoding testVadim Yanitskiy2019-05-282-0/+224
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | So far, both gsm48_encode_bcd_number() and gsm48_decode_bcd_number2() did not have any unit test coverage. Let's fill this gap by testing the following scenarios: - encoding / decoding of a regular 9-digit MSISDN; - encoding / decoding of a MSISDN with optional LHV; - encoding / decoding of a long 15-digit MSISDN; - encoding / decoding of a MSISDN to a buffer: - with exactly matching size, - with lower size (truncation); - decoding LV buffer with incorrect length, - encoding / decoding an empty input buffer. As it turns out, gsm48_decode_bcd_number2() does not properly handle encoded LV if the output buffer size is equal to the original MSISDN length + 1 (\0-terminator): one digit is lost. For example, decoding of 15-digit long MSISDN to a buffer of size 16 (15 digits + 1 for \0) would give us only 14 digits. This is reflected in the unit test output: Decoding HEX (buffer limit=16) '0821436587092143f5'... Expected: (rc=0) '123456789012345' Actual: (rc=0) '12345678901234' Moreover, if the output buffer is shorter than decoded number, gsm48_decode_bcd_number2() silently truncates it and returns 0, while its description states, that the rc should reflect this. To be fixed in the follow-up patches. Change-Id: I4b2c330cf8ffe4427c0bee7d5f3b74be56ecd85d Related: OS#4025
* tdef: Fix license: GPLv2+ instead of AGPLv3+Harald Welte2019-05-273-12/+15
| | | | | | | | | | | | libosmo{core,gsm,vty} code is GPLv2+. The tdef code originated in osmo-msc.git and was moved here without changing the license. That was a mistake, it always was meant to be under GPLv2-or-later after moving to libosmocore.git. Copyright is with sysmocom, so I as the managing director can approve the license change. Change-Id: Ie483ff6f6ea0a56c477649677b4b163c49df11d7
* oap_client: Fix license: GPLv2+ instead of AGPLv3+Harald Welte2019-05-273-12/+16
| | | | | | | | | | | | libosmo{core,gsm,vty} code is GPLv2+. The OAP code originated in osmo-msc.git and was moved here without changing the license. That was a mistake, it always was meant to be under GPLv2-or-later after moving to libosmocore.git. Copyright is with sysmocom, so I as the managing director can approve the license change. Change-Id: I08311fa8214c15f8df8945b9894226608cf96f15
* rsl: Add osmocom-specific extensions to RSL channel numbers for CBCHHarald Welte2019-05-272-0/+14
| | | | | | | | | | | We don't really *need* it in libosmocore as such, but the lack of having all osmocom extensions listed here lead to using overlapping definitions: 0x18 was used for dynamic PDCH on the Abis side, but also for CBCH on the L1SAP side. Let's list them all here to increase visibility in case anyone wants to extend this further... Related: OS#4027 Change-Id: I93e557358cf1c1b622f77f906959df7ca6d5cb12
* protocol/gsm_12_21.h: fix copy-pasted struct descriptionVadim Yanitskiy2019-05-241-1/+1
| | | | Change-Id: Ic6d32c886f6f8f859e382d48f9e1b509000db9ba
* lapdm_rslms_recvmsg: Fix memory leak in error pathHarald Welte2019-05-191-1/+3
| | | | | | | | | | | | The caller of lapdm_rslms_recvmsg() (e.g. osmo-bts/src/common/rsl.c) assumes the message ownership is transferred. However, in one of the two error paths, msgb_free() was not called and hence we had a memory leak. Also clarify the msgb ownership transfer in a comment. Related: OS#3750 Change-Id: Id60cb45e50bfc89224d97df6c68fcd2949751895
* TLV: Add one-shot TLV encoderHarald Welte2019-05-195-0/+155
| | | | | | | | | | | | | | | | | So far, the TLV code contained two types of functions * tlp_parse() to parse all TLVs according to definition into tlvp_parsed * various helper functions to encode individual TLVs during message generation This patch implements the inverse of tlv_parse(): tlv_encode(), which takes a full 'struct tlv_pared' and encodes all IEs found in it. The order of IEs is in numerically ascending order of the tag. As many protocols have different IE/TLV ordering requirements, let's add a tlv_encode_ordered() function where the caller can specify the TLV ordering during the one-shot encode. Change-Id: I761a30bf20355a9f80a4a8e0c60b0b0f78515efe
* Cosmetic: GSUP: fix too long comment lineOliver Smith2019-05-191-2/+2
| | | | Change-Id: I60ba8fef8924e58bc73cff5c7ff77ebb76d8bfaa
* Deprecate usage of osmo_counter_*Daniel Willmann2019-05-191-2/+10
| | | | | | | There's not many of those around any more, let's try to move them to osmo_stat_items Change-Id: If67f64c6ec7a3f3114c962df9db50107d9ea86e2
* pseudotalloc: turn talloc_steal() into #defineHarald Welte2019-05-182-2/+3
| | | | | | | | | | | | | Any non-anciant version of talloc implements talloc_steal() as a #define using the _talloc_steal_loc() symbol. Let's be more compatible. This fix is relevant to using osmo_fsm inside the osmo-ccid-firmware builds for Cortex-M4. In this situation, for some strange reason, libosmcoore is compiled using src/pseudotalloc/talloc.h, but later then linked against the real libtalloc. Change-Id: I1ee7f5e9b1002cff37bb8341ad870e1da5f1f9ff
* Revert "Change GSM48_PDISC_* to enum type"Harald Welte2019-05-181-20/+18
| | | | | | | This reverts commit ece1d8509d5c5af7a60ab5e1a5dddade1b181dc9 which causes build failures due to compile warnings everywhere. Change-Id: Ic131439ea206a0b0f57968ef701667da73711b51
* Change GSM48_PDISC_* to enum typeMax2019-05-171-18/+20
| | | | | | | | An enum is more clear than an int and #defines for passing around, also in case you have a switch () statement, the compiler will issue warnings for unhandled cases. Change-Id: Icbbe8786a776081d7643193f154e6270224399e6
* codec/ecu: Add a bit of precision about the actual frame format usedSylvain Munaut2019-05-151-2/+7
| | | | | Change-Id: I9620088e449c31e966ecb9ec5ddf283b949c5a4a Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* gsm_23_003: add GSM23003_MSISDN_{MIN,MAX}_DIGITSOliver Smith2019-05-152-1/+4
| | | | | | | | | | | Add the constant, so it can be used in create-subscriber-on-demand related patches. ITU-T Rec. E.164 6.1 states that maximum international number length should be 15. I did not find a source for a minimum length, but I've added the constant and set it to 1 for consistency (based on the existing osmo_msisdn_str_valid() function). Related: OS#2542 Change-Id: Idc74f4d94ad44b9fc1b6d43178f5f33d551ebfb1
* gsm0808: Introduce Osmocom extensions to announce Osmux supportPau Espin Pedrol2019-05-135-0/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | IE GSM0808_IE_OSMO_OSMUX_SUPPORT (T, 1 byte) is sent in AoIP appended to BSSMAP RESET in order to announce the peer that its MGW supports handling Osmux streams upon call set up. IE GSM0808_IE_OSMO_OSMUX_CID (TV, T 1 byte & V 1 byte) is sent in AoIP during call set up: * MSC->BSC Assignment Request * BSC->MSC Assignemnt Complete The 1 byte value contains the local Osmux CID, aka the recvCID aka CID where the peer sending the Assign Req/Compl will look for Osmux frames on that call. Hence, the peer receiving this CID value must use it to send Osmux frames for that call. As a result, a given call leg BSC<->MSC can have one different Osmux CID per direction. For example: * MS => MGW_BSC ==CID 0==> MGW_MSC * MS <= MGW_BSC <=CID 1=== MGW_MSC This allows for setups with 256 call legs per BSC on scenarios where NAT is not a problem, where MSC can have a pool of 256 CID per MGW_BSC (or remote peer). Related: OS#2551 Change-Id: I28f83e2e32b9533c99e65ccc1562900ac2aec74e
* NS: log address:port on errorMax2019-05-101-2/+2
| | | | Change-Id: If2dc533a6dc150254f5d44b672f04bb728e7e927
* osmo_sock_get_name_*: Ensure string is returned in error caseHarald Welte2019-05-101-1/+3
| | | | | | | | | | | | | | osmo_sock_get_name_buf(): In case the getsockname() call is failing for some weird reason, we shouldn't return an uninitialized, non-zero-terminated string buffer to the caller, as most callers will be too lazy to test the return value. This holds even more true for users of the internal osmo_sock_get_name2() and osmo_sock_get_name2_c() functions which indeed very much ignore the return value of osmo_sock_get_name_buf(). Change-Id: I2d56327e96b7a6783cca38b828c5ee74aed776ae
* Revert "Print error message if application fails to call rate_ctr_init()"Harald Welte2019-05-101-5/+2
| | | | | | | This reverts commit 9685a48c7bc83b1f5ee9b51e29419164b387ade2 which has caused massive fall-out among (particularly) unit tests in osmo-{msc,bts,pcu}. Change-Id: Iede72e86451d94cf678045992cb71f6b1bf16896
* gsm0808_utils: Introduce gsm0808_msgb_put_cell_id_u()Harald Welte2019-05-103-41/+44
| | | | | | | | | | | | This function is doing the bulk work of encoding a given Cell ID List item. gsm0808_enc_cell_id_list2() is modified to be a wrapper / loop around the new function. The purpose of this is to expose Cell ID List Entry encoding so that the upcoming CBSP protocol encoder can re-use this code. Related: OS#3537 Change-Id: I6cc567798e20365e6587e6b2988e834306d8c80c
* Print error message if application fails to call rate_ctr_init()Harald Welte2019-05-101-2/+5
| | | | | Change-Id: Ie8093b66b7e27cf863d2558fe21b2c6e0f3fcdfd Closes: OS#3580
* Fix osmo_quote_str_c() for strings larger than 32 bytesHarald Welte2019-05-101-2/+13
| | | | | | | As Neels pointed out, we shouldn't pass a constant value of 32 to osmo_quote_str_buf2(). Change-Id: Id9bde14166d6674ce4dda36fa9f4ae9217ce5cc2
* Add MO-FALLBACK-VALUE SGsAP IEOmar Ramadan2019-05-102-0/+3
| | | | | | | In testing against a particular EPC, the SGsAP-SERVICE-REQUEST can contain a MO fallback value TLV with T 0xF1 Change-Id: Ia2460af9673818d375e28c67f1631b5f7eacdaeb
* fix typo in FSM descriptionKévin Redon2019-05-091-4/+4
| | | | Change-Id: I3559e9c0769b708cee0d1b221b60960c62f15bd4
* Add expect script: 'vty' for easy access to all vtysKeith2019-05-081-0/+87
| | | | | | | | | | | This expect script can be run as: ./vty bsc ./vty msc ./vty sip ... etc (no need to remember ports) Change-Id: Ice4532be7cb3139da29cb9d84dd4769e8d826dfa
* deal with rate_ctr_group_alloc() returning NULLHarald Welte2019-05-082-0/+8
| | | | | Change-Id: I47d6623b9eca704e3c2537cfb5799a4c0749a7bc Related: #3701
* Add VTY and CTRL port numbers for OsmoCBC (Cell Broadcast Centre)Harald Welte2019-05-082-0/+3
| | | | Change-Id: I2075420048b43973c800ba0fc389f4b559437233
* Bump version: 1.0.1.143-cc72c → 1.1.0Pau Espin Pedrol2019-05-0710-25/+177
| | | | Change-Id: I351411ca5913c8b40f23287ec7c9ebfe11bd2bb0
* add osmo_stat_item_inc/osmo_stat_item_dec to set it relativeAlexander Couzens2019-05-073-0/+42
| | | | Change-Id: Id2462c4866bd22bc2338c9c8f69b775f88ae7511
* Re-introduce declaration of gsm0808_create_handover_request_ack()Harald Welte2019-05-061-0/+4
| | | | | | | | | | | | | In Change-Id Ia71542ea37d4fd2c9fb9b40357db7aeb111ec576, the old declaration of gsm0808_create_handover_request_ack() was accidentially removed from the gsm0808.h header file. The actual function itself (and the exported symbol) remained for backwards compatibility at runtime, but removing the declaration from the header file resulted in build failures across the board of all automatic tests. Let's re-introduce the old declaration. Change-Id: I9e96fa675fccca9ee9631caad7559dea3794d490
* add gsm0808_create_handover_request_ack2 to add AoIP RTP addrNeels Hofmeyr2019-05-053-12/+60
| | | | | | | | | | | | | | | | | | | osmo-bsc so far omits the AoIP Transport Layer Address from its Handover Request Acknowledge message, which breaks inter-BSC Handover for AoIP. Allow fixing that. One quirk I really don't like about this: I would prefer to directly use struct sockaddr_storage as a member of the struct gsm0808_handover_request_ack. Even though struct sockaddr_storage appears in various function signatures, the gsm0808.c actually also gets built on embedded systems that lack arpa/inet.h (for me indicated by the ARM build job on jenkins). Compiling gsm0808.c works only because the actual coding of struct sockaddr_storage is implemented in gsm0808_util.c, which (apparently) does not get built on embedded and hence, even though there are undefined references to e.g. gsm0808_enc_aoip_trasp_addr() it works. Related: I4a5acdb2d4a0b947cc0c62067a67be88a3d467ff (osmo-bsc) Change-Id: Ia71542ea37d4fd2c9fb9b40357db7aeb111ec576
* osmo_gsup_decode(): properly check IMSI, avoid deprecationNeels Hofmeyr2019-05-051-3/+5
| | | | | | | In osmo_gsup_decode(), call gsm48_decode_bcd_number2() to avoid deprecation warning, and also actually check the return value to detect invalid IMSI IEs. Change-Id: Iaded84d91baad5386c8f353c283b6b9e40a43b05
* gsm48_decode_bcd_number2(): allow avoiding deprecationNeels Hofmeyr2019-05-051-23/+25
| | | | | | | | gsm48_decode_bcd_number() is marked as deprecated, so gsm48_decode_bcd_number2() will cause deprecation warnings as long as it calls gsm48_decode_bcd_number(). Hence move the code to gsm48_decode_bcd_number2(). Change-Id: I81925e9afb3451de9b8a268d482f79ee20ca14d6
* gsm48_decode_bcd_number2(): fix input len checkNeels Hofmeyr2019-05-051-2/+3
| | | | | | | | | The input_len argument for gsm48_decode_bcd_number2() includes the BCD length *and* the length byte itself, so add the missing +1. Also clarify the API doc for the input_len argument. Change-Id: I87599641325c04aae2be224ec350b1a145039528
* add comment to gsm_mncc_bearer_cap.speech_verNeels Hofmeyr2019-05-031-1/+1
| | | | Change-Id: Ib657b1eb55aab400f3682a89bbd428bdee02581c
* add vty_is_active()Neels Hofmeyr2019-05-032-0/+12
| | | | | | | | | | | | | For async callbacks it is useful to determine whether a given VTY pointer is still valid. For example, in osmo-msc, a silent call can be triggered by VTY, which causes a Paging. The paging_cb then writes to the VTY console that the silent call has succeeded. Unless the telnet vty session has already ended, in which case osmo-msc crashes; e.g. from an osmo_interact_vty.py command invocation. With this function, osmo-msc can ask whether the vty pointer passed to the paging callback is still active, and skip vty_out() if not. Change-Id: I42cf2af47283dd42c101faae0fac293c3a68d599
* add osmo_bssap_tlv_parse2() for multiple identical TNeels Hofmeyr2019-05-031-0/+3
| | | | | | | | | | | | | | | | In BSSMAP messages, at least the Cell Identifier IE can appear more than once. We have tlv_parse2() which allows decoding into an array of tlv_parsed to cleanly handle multiple occurences. Hence add osmo_bssap_tlv_parse2() which supports multiple occurences. An alternative would be to directly call tlv_parse2() with gsm0808_att_tlvdef() when multiple T occurences are needed, and I'm not really sure why osmo_bssap_tlv_parse() exists in the first place. But because it does, add a similar definition that is capable of handling multiple IEs with identical Tag discriminator. Change-Id: Ib9a2095f7498dc2cda2a57154b2dbe4621df72f8
* add gsm48_decode_bcd_number2() from osmo-mscNeels Hofmeyr2019-05-033-2/+33
| | | | | | | | | | | | gsm48_decode_bcd_number() is unable to provide proper bounds validation of input and output data, hence osmo-msc's vlr.c introduced a static decode_bcd_number_safe() a long time ago. Move to libosmocore. I need to use the same function to decode an MSISDN during inter-MSC Handover, instead of making it public in osmo-msc, rather deprecate the unsafe function and provide a safer version for all callers. Mark the old one deprecated. Change-Id: Idb6ae6e2f3bea11ad420dae14d021ac36d99e921
* BSSMAP: add messages for inter-BSC and inter-MSC HandoverNeels Hofmeyr2019-05-033-0/+241
| | | | Change-Id: I9dac375331f6bea744769e973725d58e35f87226
* gsm/gsm_utils.h: fix argument type of gsm_chan_t_name()Vadim Yanitskiy2019-05-021-1/+1
| | | | | | | | The actual value-string array 'gsm_chan_t_names' describes the enum values of 'gsm_chan_t', not 'gsm48_chan_mode'. Change-Id: Ifc2121b23fb8d07589cc5b7aa8fbf4e27eb6b72b Fixes: CID#188831, CID#188825
* BSSMAP: tweaksNeels Hofmeyr2019-04-263-4/+6
| | | | | | | | | | | | | Change two instances of Speech Version values to enum gsm0808_permitted_speech. It is often not trivial to find the right values for a uint8_t member, giving the enum name makes it a lot easier/safer to use. In gsm0808_create_handover_required(), use msgb_tv_put() so that the enum's storage size doesn't matter. (Already used for handover_performed) Fix typo in doc of gsm0808_create_handover_required(). Change-Id: I6387836bab76e1fa42daa0f42ab94fc14b70b112
* GSUP: add inter-MSC handover related msgs and IEsOliver Smith2019-04-265-4/+540
| | | | | | | | | | | | | | | | | | | | Based on a draft created by Neels, which is the result of reading a MAP trace of two MSCs negotiating inter-MSC handovers, and of reading the TS 29.002, TS 29.010 and related specs: https://lists.osmocom.org/pipermail/openbsc/2019-January/012653.html I figured out that the "Handover Number" mentioned in the specifications is the same as the MSISDN IE that we already have, so we can use that instead of creating a new IE (example usage in tests/gsup/gsup_test.c). Create a new OSMO_GSUP_MSGT_E_ROUTING_ERROR message type, which the GSUP server uses to tell a client that its message could not be forwarded to the destination (see [1]). MAP has no related message. [1]: Change-Id: Ia4f345abc877baaf0a8f73b8988e6514d9589bf5 (osmo-hlr.git) Related: OS#3774 Change-Id: Ic00b0601eacff6d72927cea51767801142ee75db
* bitcomp.c: fix missing Doxygen group closing tagVadim Yanitskiy2019-04-251-1/+1
| | | | Change-Id: I01f837ac4c8644c0851c77c3f42eb44353cef0d7
* application.c: drop wrong \references of osmo_init_ignore_signals()Vadim Yanitskiy2019-04-251-1/+1
| | | | Change-Id: Ib08e15dd5d811662de46a1dfdb676b9a5b66b529
* GSUP: add Message Class IENeels Hofmeyr2019-04-135-5/+47
| | | | | | | | | | | | | | | | | | osmo-msc and osmo-hlr have distinct subsystems handling incoming GSUP messages. So far we decide entirely by message type which code path should handle a GSUP message. Thus no GSUP message type may be re-used across subsystems. If we add a GSUP message to indicate a routing error, it would have to be a distinct message type for subscriber management, another one for SMS, another one for USSD... To allow introducing common message types, introduce a GSUP Message Class IE. In the presence of this IE, GSUP handlers can trivially direct a received message to the right code path. If it is missing, handlers can fall back to the previous switch(message_type) method. Change-Id: Ic397a9f2c4a7224e47cab944c72e75ca5592efef
* add OSMO_IMSI_BUF_SIZENeels Hofmeyr2019-04-132-1/+4
| | | | | | | | | | | | Various places in our code base figure out how many chars they need to safely store an IMSI. An IMSI can have a checksum digit, which is not reflected by GSM23003_IMSI_MAX_DIGITS. And we usually need a terminating \0. Instead of having a magic +2 repeated every so often, rather define OSMO_IMSI_BUF_SIZE to contain both checksum digit and nul char, and have the explanatory comment with it here in libosmocore. Change-Id: Id11ada4c96b79f7f0ad58185ab7dbf24622fb770
* gsm/gsm_utils.c: indicate intentional fall-throughVadim Yanitskiy2019-04-121-0/+1
| | | | | Change-Id: Ica7d2d1884b745fe30234d6c50d93828c4930680 Fixes: CID#57700
* gb/gprs_ns_sns.c: fix incorrect sizeof() calculationVadim Yanitskiy2019-04-121-1/+1
| | | | | | | | | Calling sizeof() on a pointer would result in getting size of the pointer (usually 4 or 8 bytes) itself, but not the size of the memory it points to. Change-Id: I83f55a9638b75d9097d37992f7c84707791f10f6 Fixes: CID#194266