AgeCommit message (Collapse)AuthorFilesLines
2022-03-04fix extraneous newlines in ho_fail() invocationsneels/2021q4Neels Hofmeyr1-3/+3
The ho_fail() macro includes a newline, so the callers should not add one. Fix these cases where the extra '\n' fragments the logged message. Related: SYS#5839 Change-Id: Ifdbce98be70c1aa127ae008d7a77b9795fd250d3
2022-03-04inter-BSC incoming HO: store Codec List (MSC Preferred)Neels Hofmeyr1-0/+17
So far we completely ignore the codec list from the MSC in Handover Request messages. This leads to error messages in subsequent handovers because there is no Codec List stored on the conn: DHODEC ERROR handover_decision_2.c:390 [...] No Speech Codec List present, accepting all codecs Besides the error log, in hodec2 we may subsequently take bogus or unexpected codec decisions, ignoring the MSC's choice of codecs, or in the worst case picking an unsupported codec. This also has implications on what type of lchan we choose for handover target in hodec2: say, if no half rate codec is supported as per the MSC's request, we normally avoid handover to a TCH/H, etc. Intra-BSC HO after an Inter-BSC incoming HO is the only case where this problem occurs, in every other scenario there is an Assignment Request from the MSC, from which we properly store the MSC's codec list. 3GPP TS 48.008 does indicate that on AoIP this codec list shall be included. So reject HO Request with missing Codec List, as we already do for Assignment Request on AoIP. This makes TTCN3 BSC_Tests for inter-BSC incoming HO fail, because our tests so far omit the Codec List (MSC Preferred) on AoIP. The related fix of the tests is If06de9c9b43d79f749447a4e2a340176eef75c79. Related: SYS#5839 Depends: If06de9c9b43d79f749447a4e2a340176eef75c79 (osmo-ttcn3-hacks) Change-Id: I117cc29d6d11db77d160de654f43f5993db6ee21
2022-03-04silence bogus error: event not permitted: READY_TO_SWITCH_RTPNeels Hofmeyr1-0/+7
During inter-BSC incoming handover, there is no previous lchan to be switched, so this event always comes in the READY state of lchan_rtp_fsm. No need to complain about that and confuse log readers. Related: SYS#5864 Change-Id: I96fd53b8c8da621a40bd65f85070eabd030cc875
2022-03-04tweak error msg: s/inter-BSC MT/inter-BSC incomingNeels Hofmeyr1-2/+2
"inter-BSC MT" was the terminology of an early development stage of inter-BSC handover, code review requested "incoming" instead. This one was missed when applying code review. Same in a code comment. Related: SYS#5864 Change-Id: I1ca810542e89980ffda11876fd30626467e452d1
2022-03-04support "empty" SCCP N-Connect from MSCNeels Hofmeyr5-36/+134
Teach osmo-bsc to handle empty N-Connect. So far we were always expecting user data in an SCCP N-Connect from an MSC. However, it is perfectly valid for an initial BSSMAP request to follow later. This is relevant for: - Handover Request (incoming inter-BSC handover) - Perform Location Request (query physical location of the MS) Add state WAIT_INITIAL_USER_DATA with new timeout net X25. Always enter this state so that we don't have two separate code paths for handling initial user data. Related: SYS#5864 Change-Id: I535c791fa01e99a2226392eb05f676ba6c3cc16e
2022-03-04add counter for inter-BSC incoming Handover RequestNeels Hofmeyr3-0/+3
Related: SYS#5864 Change-Id: Icdde2bb339a5e367a4d297802214a1ef3f36eefa
2022-03-04add missing counter increment for Perform Location RequestNeels Hofmeyr1-0/+1
Also increment message counter for the case that a Perform Location Request came in the initial SCCP N-Connect message. Related: SYS#5864 Change-Id: I3f78ce73eb16fdff1f19359963405b2235000fc4
2022-03-04tweak logl to ERROR for invalid initial BSSMAPNeels Hofmeyr1-4/+4
Related: SYS#5864 Change-Id: Idd7d763129a5acdf19cd0ae86e82b77ee0073f2f
2022-03-04gscon clear: without SCCP conn, no need to wait for RLSD timeoutNeels Hofmeyr1-0/+4
Skip the BSSMAP Clear and SCCP RLSD parts and immediately deallocate the gscon when there is no SCCP connection present. Before this patch, such conn would stick around for a minute before a timeout deallocates it. Related: OS#5337 Change-Id: I8c8537acf6b47b121903197608636c43ae601a57
2022-03-04fix gscon clear 3/n: separate state for SCCP RLSDNeels Hofmeyr2-54/+75
Properly implement the separate conn release stages in separate FSM states: x) sent Clear Request, wait for a Clear Command from the MSC. Timeout after a configurable 60s. y) after a Clear Command and sending a Clear Complete, wait for the SCCP RLSD. Timeout after a configurable 60s. z) terminate after the RLSD is received / after timeout. handover_test.c needs a little tweak to make the MGCP release work with its fake MGCP client, because cleanup now ensures to invoke gscon_forget_mgw_endpoint() in all cases. Related: I680ec4ed866aa5f0b1ff29e7e98322615cfb288d (osmo-ttcn3-hacks) Related: OS#5337 Change-Id: Ie975117d37f38ba853589dc7f8d3e94f8f9586b2
2022-03-04fix gscon clear 2/n: proper state transition to ST_CLEARINGNeels Hofmeyr1-15/+20
The way the ST_CLEARING is entered before this patch has various symptoms of how I / we used osmo_fsm when we were still FSM amateurs in Osmocom. Patch that up: - In gscon_bssmap_clear(), ask for a state transition to ST_CLEARING first. Go ahead only if it is allowed. - move the Clear Request messaging to ST_CLEARING's onenter function. - Fix the timeout behavior: by using conn_fsm_state_chg(), use the actual proper X4 timer value for ST_CLEARING from VTY configuration instead of hardcoded magic numbers. Related: OS#5337 Change-Id: I234b2a754d0c98031056981823cdbc187e977741
2022-03-04fix gscon clear 1/n: store clear cause in gsconNeels Hofmeyr2-3/+7
Allow returning a context sensitive cause instead of a hardcoded one in gscon pre_term(). Also, the conn->cause is needed to move message dispatch to an "onenter" function in patch I234b2a754d0c98031056981823cdbc187e977741. I Split this part off as a separate patch for better readability. Related: OS#5337 Change-Id: Ib6432746040899129d1d73ae8dc59add2d88a915
2022-03-04lchan/gscon: always clear both cross ref pointersNeels Hofmeyr1-3/+7
During specific release scenarios, it became clear that an lchan still pointed at a conn even after it had been deallocated. That was due to setting conn->lchan = NULL but not lchan->conn = NULL. Fix that. Do lchan_forget_conn() first, because during gscon_forget_lchan() we may enter the gscon clearing dance, which in case of no SCCP conn being present will soon / should immediately deallocate the conn. Related: OS#5337 Related: I8c8537acf6b47b121903197608636c43ae601a57 (osmo-bsc) Change-Id: Idbfe4672233ba8105eff5ba77ee07fd871358255
2022-03-03bitvec2freq_list(): fix handling of E-GSM ARFCNsVadim Yanitskiy2-10/+19
According to 3GPP TS 44.018, section, only ARFCN values in range 1..124 can be encoded using the 'bit map 0' format. Before this patch, ARFCN values belonging to E-GSM band (0, 975..1023) were ignored in bitvec2freq_list(), and thus not present in the resulting Cell Channel Description IE. Change-Id: I17739e6845cd84e2a81bc406dd532541f7c52cb6 Related: SYS#5854
2022-03-03tests/gsm0408: add testing coverage for generate_cell_chan_list()Vadim Yanitskiy2-0/+74
This commit demonstrates what happens when a cell has channels in both P-GSM and E-GSM bands (case 'c'). As can be seen from: Case a) only the BCCH carrier: 10 Case b) more carriers from P-GSM band: 1 3 10 64 99 124 Case c) more carriers from E-GSM band: 1 3 10 64 99 124 in both cases 'b' and 'c' we have the same set of ARFCNs. Carriers from the E-GSM band are not present at all. This is wrong and will be fixed in the follow up change(s). Change-Id: Ied0519c70501f105673a9b36657101063d275058 Related: SYS#5854
2022-03-02ipa oml: Fix encoding of T3105Pau Espin Pedrol3-4/+4
As the comment above the fix suggest, the encoding is in 10ms units. osmo-bts is also doing the proper: """ uint8_t t3105 = *TLVP_VAL(&tp, NM_ATT_BTS_AIR_TIMER); bts->t3105_ms = t3105 * 10; """ Related: SYS#5838 Change-Id: Ie190514ee35d1ca81b70e9180bf7393b973d3504 (cherry picked from commit 8f1597135dc6be84d3b368a2ae78b18383cfb578)
2022-03-02tests: nanobts_omlattr_test: Use msgb_eq_data_print() helperPau Espin Pedrol1-5/+5
Change-Id: I1c96305839e6627a36655c2e64da64f0a6704896 (cherry picked from commit 10edefe68bd224cda7d988946e5d456f0b12a0d5)
2022-02-28inter-BSC HO in: add Codec List (BSS Supported) IE to HO Req AckNeels Hofmeyr1-0/+4
Related: SYS#5839 Depends: Iab0a7b4d81592157fc111d1adb9e9f4cb53a94e9 (libosmocore) Change-Id: I3c0576505a3ceb3cd5cc31dc69c5bc4a86a4ea08
2022-02-28inter-BSC HO in: add Speech Codec (Chosen) IE to HO Req AckNeels Hofmeyr1-0/+11
Related: SYS#5839 Change-Id: I1d0b395c97145b5aa1af4ef67aec9338d2f8f43b
2022-02-28inter-BSC HO in: add speech IEs only on speech mode lchansNeels Hofmeyr1-1/+1
Related: SYS#5839 Change-Id: I830654f419e6f0a196dc6d3e58422e00b324af9e
2022-02-22fix inter-BSC-in handover encryptionNeels Hofmeyr3-8/+26
In the field we saw Handover Requests without any Chosen Encryption Algorithm IE, and osmo-bsc completely failed on those. This made me understand my mistake from when I wrote this handover code. So far, from a BSSMAP Handover Request, we (I) used only the Chosen Encryption Algorithm IE to pick the encryption to use on the target lchan. That is very wrong. Instead, figure out the intersection of permitted algorithms MSC & BSC, and pick the best of those. Which means, actually, completely ignore the Chosen Encryption Algorithm IE. In the message, the permitted algorithms are passed as a bitmask. The current code using gsm0808_dec_encrypt_info() passes this on as an array. In order to select_best_cipher(), I could convert that array back to a bitmask. Instead pass the bitmask on from message decoding alongside the struct gsm0808_encrypt_info in req->ei_as_bitmask. In handover_end(), change the condition so that we can also pass HO_RESULT_FAIL_RR_HO_FAIL to emit a Handover Failure. Related: SYS#5839 Change-Id: Iffedc981b60d309ed2e5decd5efedee07a757b53
2022-02-22rename RSL_ENC_ALG_A5 to ALG_A5_NR_TO_RSL, clarifyNeels Hofmeyr4-5/+22
The naming confused me so that I wrote buggy code again. Hopefully this clarifies which representations the code paths are using. In the macro code, highlight the error case of n <= -1 explicitly. Also add ALG_A5_NR_TO_PERM_ALG_BITS. I need the 1<<n case in an upcoming patch. Related: SYS#5839 Change-Id: I7557ae97764bba09c906748a18e9031dfb362611
2022-02-16bts: Add explicit switch case for Cell Id SAIPau Espin Pedrol2-0/+2
This patch imposes no logical change in the code on itself, but makes sure people compiling osmo-bsc uses an old enough libosmocore implementing Cell Identifier SAI. This is important since adding the SAI ID (CELL_IDENT_SAI) displaced CELL_IDENT_WHOLE_GLOBAL_PS to a new number outside of the 3GPP range for cell IDS (4 bits, this way we garantee we won't have the same problem again). This means there was an ABI breakage (see Depends below). As a result, using an osmo-bsc compiled against an older libosmocore , and then using at runtime against a newer version of libosmocore, will most probably provoke some RIM features to not work properly, since libosmocore will handle CGI-PS cell ids sent by osmo-bsc as SAI ones, and most probably do wrong comparisons when matching (they only match up to LAI included). ABI break analysis: osmo-bsc uses CELL_IDENT_WHOLE_GLOBAL_PS in: * gsm0808_dec_cell_id_list2() -> this is called on stuff received from the network, so it's actually fine handling it correctly as CELL_IDENT_UTRAN_SAI instead of CGI_PS. * gsm0808_cell_id_list_add same_cell_id_list_entries gsm0808_enc_cell_id_list2 cell_id_to_cgi-> On old osmo-bsc, When CELL_IDENT_WHOLE_GLOBAL_PS is passed to be encoded as CGI, RAC byte is taken for encoding instead of 2nd CI byte. * gsm0808_cell_ids_match gsm0808_cell_id_u_match cell_id_to_cgi -> If CELL_IDENT_WHOLE_GLOBAL_PS as 0x11 (CELL_IDENT_UTRAN_SAI), 1 byte offset when comparing (1 byte of RAC is taken converting to CGI instead of the 2nd byte of CI). That means match would be wrong if 2nd byte of CI differs. Related: SYS#5838 Depends: libosmocore.git Change-Id Id25e563febdb7640174540136225f399515a0089 Change-Id: I70972efffefd57fd36332fab539683696c32f4a5
2022-02-08bssmap_reset: make T4 user configurablePhilipp Maier3-1/+4
The timer (T4) that controls the re-sending of the BSSMAP RESET can not be changed via the VTY, althrough it is defined via a tdef struct. Lets add a description along with default values to make it configurable via the VTY. Change-Id: I1fb5699220ab8a643a168567a89c6f381fe433a7 Related: SYS#5796
2021-12-20bts: fix sourcecode formatting (excess whitespace)Philipp Maier1-1/+1
Change-Id: Ie4fad0426d1d089156481806a05982a24375b766
2021-12-20bts: add missing return -EINVAL statementsPhilipp Maier1-0/+4
The checks that make sure that an ARFCN falls in the correct range do not return with -EINVAL as they should, instead nothing happens. (Only the check for GSM1800 is corrct) Change-Id: Iddadafe3fbc47e2f980d8e4ab4f320998cb454ff Related: SYS#5369
2021-12-14treewide: remove FSF addressOliver Smith2-8/+0
Remove the paragraph about writing to the Free Software Foundation's mailing address. The FSF has changed addresses in the past, and may do so again. In 2021 this is not useful, let's rather have a bit less boilerplate at the start of source files. Change-Id: Ifbbafe185931c0f508ff8148ef244f25a9620fd8
2021-12-13abis_nm: actively block BTSs with invalid configurationPhilipp Maier4-53/+63
At the moment the BTS configuration is checked, but the check does not have much consequence other than that some initialization that is not executed. The BTS will go into the OML bootstrap phase anyway and most likely fail at some later point due to the invalid configuration. To reduce noise and unexpected behaviour of the BTS lets make sure that the OML boostrap phase can only proceed when the BSC conciders the configuration as valid. Change-Id: I42c1c26a9b800600787b1266a871f95f2114c26e Related: SYS#5369
2021-12-06bts-examples: add example for E1 connected BTSPhilipp Maier1-0/+117
The manual lacks an example on how to set up an E1 connected BTS. Especially the relation between trunk number and E1 line number is not obvious. Change-Id: I02f5d4fe059e5cc9c3ffc2e3636d812532c09239 Related: OS#5308
2021-11-30fix assignment success counters: count *before* cleanup of fsm stateNeels Hofmeyr1-2/+2
Counting the Assignment success after osmo_fsm_inst_term() meant that we were counting a cleared out channel mode, which always yielded signalling mode. Count the Assignment success *before* terminating, so that we correctly count the successful assignment as speech mode. Related: SYS#4878 Related: Icb1386ec2ccd70eb3c026301b9b08ad7177278f7 (osmo-ttcn3-hacks) Change-Id: Ie9fcd1e86f27ecb2f11e2e8813faac365cb470b8
2021-11-30dbg log: also log assignment counters on BTS levelNeels Hofmeyr1-0/+8
Change-Id: I68b3e794ddf97c80f647c3536ec466217b338af9
2021-11-30fix chreq:* counters: typos in chreq:successful_* constantsNeels Hofmeyr1-7/+7
Related: SYS#4878 Related: I17a7702b151ac03fd9f7ecd6927ef42133aad953 (osmo-ttcn3-hacks) Change-Id: I1fde77d5d5920093ab037184eb3518876804353d
2021-11-29dbg log: abis_rsl print_meas_rep(): clarify rxlevNeels Hofmeyr1-1/+1
Change-Id: Ia2c1d59eac556b8f6a56c39abf12b35a3ba807eb
2021-11-29stats: add bsc.paging:expiredOliver Smith4-0/+11
Similar to paging:attempted, count paging:expired not only per BTS, but also for the whole BSC. Add active_paging_requests to struct bsc_subscr, to increase the counter only once if paging expires, and not once per BTS where paging expired. Related: SYS#4878 Change-Id: I9c118e7e3d61ed8c9f1951111255b196905eba4d
2021-11-29Cosmetic: osmo-bsc/osmo_bsc_bssap: fix formattingOliver Smith1-14/+7
Change-Id: Icc4947e68fa46aab180f2047231e51b997cca71b
2021-11-27ipaccess-config: request and print NM_ATT_IPACC_NV_FLAGSVadim Yanitskiy1-1/+30
Below is an example output: """ Received SIGNAL S_NM_GET_ATTR_REP { "primary_oml_ip": "", "primary_oml_port": "0", "unit_id": "6969/0/0", "nv_flags": { "static-ip": "no", "static-gw": "no", "no-dhcp-vsi": "no", "dhcp-enabled": "yes", "led-enabled": "yes", "secondary-oml-enabled": "yes", "diag-enabled": "yes", "cli-enabled": "yes", "http-enabled": "no", "post-enabled": "yes", "snmp-enabled": "yes" } } """ Change-Id: Ic901910878529e6d8b152b3417463bae60644b82
2021-11-27ipaccess-config: improve readability of printed attribute responseVadim Yanitskiy1-2/+18
Change-Id: If99ec89081af4ebd65152fc0a31ebdec491f3876
2021-11-25Disable C/I based MS Power Control Loop by defaultPau Espin Pedrol2-13/+38
osmo-trx-uhd with a B200 has proven to provide bad (lower than usually considered good) C/I values due to high noise (even with band filters in place). Hence, default thresholds (gathered from literature on the topic) are too high and end up in bad algorithm output decisions. Furthermore, most users of Osmocom don't use it in densely populated areas, hence RXLEV based algorithm used when C/I based one is disabled is good enough. Let's disable C/I based one by default, and let advanced users which specific needs to enable and confiure thresholds specifically for their needs (hardware, cell surrounding conditions, etc.). Related: SYS#4917 Change-Id: If1a73c60695379bcfcd0f44c6ec6dd659563e279
2021-11-24hodec2: fix segv for inter-BSC ho targetNeels Hofmeyr1-19/+31
Related: OS#5324 SYS#5259 Change-Id: I5a3345ab0005a73597f5c27207480912a2f5aae6
2021-11-24bsc_subscr_conn_fsm: fix crash if !connOliver Smith1-0/+5
Do not crash in gscon_ensure_mgw_endpoint() if conn is NULL. Related: SYS#5728 Change-Id: Id579243cc9ebbe8f315cd11754166970329dc9cf
2021-11-19abis_nm: use struct sdp_firmware from libosmocorePhilipp Maier1-10/+6
abis_nm locally declares its own struct for the ipaccess firmware header, even though libosmocore defines it as well. Lets use the definition from libosmocore. Change-Id: I69cb45fc40bd20ea2533cc8cd6a68363b59cc408
2021-11-19abis_nm: fix typoPhilipp Maier1-1/+1
Change-Id: I2cb7b986db9d394db2c912247db861704d2c7c23
2021-11-16Bump version: → Espin Pedrol5-30/+407
Change-Id: Ibd4f22f268aa5ec3c1b7839e334ffad69f2e50a9
2021-11-16move time_cc to libosmocore osmo_time_ccNeels Hofmeyr16-1563/+56
Related: SYS#4878 Depends: Iabb17a08e6e1a86f168cdb008fba05ecd4776bdd (libosmocore) Change-Id: Ica9f908a1a30f334a24c59471affa11225117e12
2021-11-15osmo_bsc_main: move generate_ma_for_bts() into bootstrap_bts()Philipp Maier1-3/+4
The function generate_ma_for_bts() is called when the OML TEI comes up. In the same code path boostrap_bts() is called as well. It would be more logical to call generate_ma_for_bts() from boostrap_bts() since it is also part of the bootstrapping process. Change-Id: Ib2ed5b1eac3701cfb3a3e8dd478488ba5404d1fd Related: SYS#5369
2021-11-15osmo_bsc_main: call bootstrap_bts when OML TEI comes upPhilipp Maier1-1/+17
At the moment check_bts and bootstrap_bts is called only once on startup. When a new BTS is set up during runtime bootstrap_bts, nor check_bts is called. This means that some parameters of the BTS stay uninitalized until osmo-bsc is restarted. Lets rather call check_bts() and then bootstrap_bts() when the OML TEI of the BTS comes up. Change-Id: Ie599f809623efd6ea4ab3f39294195fc1ef84b85 Related: SYS#5369
2021-11-15[overpower] By default, permit only for speech channels using AMRVadim Yanitskiy4-15/+25
Change-Id: I087025f9db59348f2f70d4a291f8d887644d6b17 Related: SYS#5319
2021-11-15[overpower] Allow configuring specific channel mode(s)Vadim Yanitskiy5-7/+79
Change-Id: I34d29d7d0f66c629367f3d6e8a660e199ecbe080 Related: SYS#5319
2021-11-15abis_rsl: s/*_acch_cap_for_bts/put_*_acch_cap_ie/gVadim Yanitskiy1-7/+7
Change-Id: I663023adb4f2381d4b8debb01786801803b3d741
2021-11-15abis_rsl: {rep,top}_acch_cap_for_bts(): make *lchan constVadim Yanitskiy1-4/+4
Change-Id: I3e71bb88db7b1eadff5a73fdb98fe7eee2fc2540