AgeCommit message (Collapse)AuthorFilesLines
2021-07-24vty: improve err msg for invalid subslot nrneels/re-estNeels Hofmeyr1-1/+2
Change-Id: I2f649bd2d8d9f217c22b62d2842e1e4fa101ba11
2021-07-24vty: lchan deact: allow omitting the lchan type argNeels Hofmeyr2-17/+44
In the command bts <0-255> trx <0-255> timeslot <0-7> sub-slot <0-7> deactivate fr the final argument indicating the channel type does not make sense and is not actually used. Define a separate vty command for 'deactivate', so that it doesn't require arguments only used for 'activate'. Change-Id: Ibdeca3b1d75b9f6092f566544e9d5f4da67fffce
2021-07-24debug log: indicate change of primary lchan on a connNeels Hofmeyr1-0/+8
Change-Id: Ib4e9a1cde9248f5d3fd8d7d8277623b42670b059
2021-07-24log: fix missing newline in lchan_select.cNeels Hofmeyr1-1/+1
Change-Id: Iea8bc73ba6da24f353ad422cdea3fa88173a9a1c
2021-07-24fix CM Re-Establishment Request: allocate new A connNeels Hofmeyr1-2/+7
For a call re-establishment, the MS shows up on a different cell and requests CM Re-Establishment (3GPP TS 24.008 9.2.4). As soon as the Layer 3 is established, the MSC will clear the first A-connection; the re-establishment *has* to happen on a new separate A-connection. So for a brief moment we must allow two distinct A-interface connections to be used for the same subscriber. Tested by BSC_Tests.TC_cm_reestablishment added in I1e7d446644f46b8a0a94688e618ffb4f23a8900e Related: SYS#5130 Change-Id: I2da9a971dd36c4289a78040adfe85704c8282c59
2021-07-23Introduce VTY option to forbid use of TCH for non-voicecall signallingPau Espin Pedrol6-14/+67
Usual allocation mechansim, when some signalling channel is needed, first tries to reserve an SDCCH, and if all of them are exhausted, then attempts to reserve a TCH as a last resort. This, however, may cause TCH starvation under certain situations, for instance if there high load on other services (LU, SMS, etc.). Hence, it may be desirable for the operator to forbid reservation of TCH slots once SDCCH become exhausted. This commit is thus adding a VTY command which allows forbidding it. The default behavior (allow using TCH timeslots when SDCCHs are exhausted) is kept as before. The above mentioned prohibition is applied only to non-voicecall related signalling services. That's because voicecall services will end up requiring a TCH anyway, and forbidding reservation of TCH straighaway when SDCCHs are exhausted would mean no voice calls could be initiated while still TCHs would be available. Related: SYS#5548 Change-Id: Ib08027125145df26602069bfb51847063b0ccc0c
2021-07-23Introduce libbsc to avoid linking long lists of .o filesPau Espin Pedrol11-246/+35
Every time a new file is added in osmo-bsc, it ends up being a pain because its .o file has to be included to other tests/util binaries, or stubs need to be added. Let's instead bundle all .o files together in an .la file and pass that around. Change-Id: If91dc589ea1e476da105b58846d1c3e720a439e1
2021-07-23Split bts_vty.c creating bts_trx_vty.cPau Espin Pedrol5-799/+863
Change-Id: I15ec8f71a5d31915162cb3ad75ea77e934fa4887
2021-07-22Split bsc_vty.c creating bts_vty.cPau Espin Pedrol7-4941/+5003
Change-Id: I347e7da328fed0733af2eec10a3ca6e02a148308
2021-07-22bts: Clear BTS_STAT_CHAN_*_{TOTAL,USED} on bts disconnectDaniel Willmann6-0/+27
Adds gsm_bts_stats_reset() to clear the stats and calls it from the different models. Change-Id: Ic42687cd73e3546edaa99fb1268a5960ffa43b12 Related: SYS#5541
2021-07-22RES IND: tweak error code on missing Resource Information IENeels Hofmeyr1-1/+1
If the RES IND message is invalid, let's not return ENOENT which translates to "No such file or directory", instead return EINVAL. Related: SYS#5313 Change-Id: Ifd700e90c881874d428f2860603a4ddbf13d705e
2021-07-22RES IND: allow empty Resource Information IENeels Hofmeyr1-2/+4
If all channels of a BTS are in use and there are no interference ratings to be reported, the Resource Information IE may be empty. Do not log this as an error, it is not something that needs operator attention. Related: SYS#5313 Change-Id: I75b851ef1269674f43db3fb3a48518e76182d7f0
2021-07-22Fix recent regression in CHREQ allocationPau Espin Pedrol1-1/+1
Recent commit introduces a silly bug when changing code. Fixing it now. Fixes: fdb87343d7a747575fae0bb436cd9d105b9748e9 Change-Id: I1e8027a3933c3c8450e76e1325d0f7c28a89a6d1
2021-07-21abis_rsl: Log chan rqd reason on resource exhaustion log messagePau Espin Pedrol1-6/+8
This allows better understanding which of use is exhausting channels when there a lot of load. Change-Id: Ic68162c2d52df07b05c76374e2a92148b9a7ccd5
2021-07-20lchan_fsm: Allow rx LCHAN_EV_RLL_REL_IND in state BORKENPau Espin Pedrol1-0/+2
As seen in osmo-bsc log: DCHAN ERROR abis_rsl.c:2287 lchan(12-0-2-TCH_H-1){BORKEN}: Event LCHAN_EV_RLL_REL_IND not permitted Related: SYS#5523 Change-Id: Idc7796d41f3483c89559746d9a00fdf32bf67c57
2021-07-20_select_sdcch_for_call: Avoid 2nd lchan lookup when finally selecting itPau Espin Pedrol1-2/+1
We already looked it up, it's not necessary to look it up again by calling lchan_select_by_type(). Let's instead call lchan_select_set_type() directly on the lchan pointer. Related: SYS#5309 Change-Id: I1054c18f58c9e249f263e3e97a365a1fd8b03a93
2021-07-20Add new lchan_select_set_type() API helperPau Espin Pedrol3-10/+21
It's an easy helper, but it helps in standarizing and finding similar places in code. Morevoer, it will be used in follow-up commit where we first use lchan_avail_by_type and finally we select it in a later stage. Change-Id: I025a40962a5e5d40543b297a0760e47618fb525c
2021-07-19handover_ctrl: add control interface for handover settingsPhilipp Maier7-0/+254
The VTY handover_vtc.c offers a large number of handover specific settings. Those settings are (with one exception) auto generated using macros. Lets add an equivalent for the control interface that uses the same auto generation mechanisms. Change-Id: I12f143906818fd6b16e8783157cbb1eb51e49ffc Depends: libosmocore I53fc207677f52b1dc748b01d58424839cdba807c Related: SYS#5369
2021-07-16extend test_dyn_ts_favor_half_used_tch_h_as_target.ho_vtyNeels Hofmeyr1-0/+5
Clarify that filling half-used TCH/H first only happens on dynamic timeslots, not static ones. Related: SYS#5313 Change-Id: I5213459fb7fb201361ce0d6198fc0c2c745deee1
2021-07-16add test_dyn_ts_favor_static_ts_as_target.ho_vtyNeels Hofmeyr2-0/+39
In a discussion about the effect of interference levels, I noticed that there is not sufficient clarity about how strongly the preference of static timeslots is ranked. This test helps to show what we have. Related: SYS#5313 Change-Id: I0911cd74613045d9fbe29d04eaef036d32049b92
2021-07-16vty 'interference-meas level-bounds': explain duality in orderingNeels Hofmeyr2-3/+4
Related: SYS#5313 Change-Id: If71e20e95d29e7f03739ee04e1ef429bf8bd51ed
2021-07-16separate 'interference-meas level-bounds' cfg and usedNeels Hofmeyr7-21/+28
The VTY defun already indicates BSC_VTY_ATTR_RESTART_ABIS_OML_LINK correctly, but so far we would immediately start using the new values internally, and wrongly interpret interference levels. Fix that. Have bts->interf_meas_params twice: interf_meas_params_cfg for the VTY configured values, and interf_meas_params_used for the values that the BTS actually knows about, after they were sent via OML. In a running BSC, when changing the interference level boundaries on the telnet VTY, the BTS is not immediately told about the change. That would require a BTS restart. Hence store the cfg values separately in interf_meas_params_cfg. For comparing/printing interference levels in a running BTS, only employ the values that were actually sent via OML and placed in interf_meas_params_used. Related: SYS#5313 Change-Id: Iad8cf4151ff7f86dc0549158ed5d91d788d40b1f
2021-07-15cosmetic: Small improvements to _select_sdcch_for_callPau Espin Pedrol1-13/+14
This commit improves some cosmetic and logical aspects from recent commit (see "Fixes" below). * Fix typo s/free_tcch/free_tchh/" * Improve some comments Fixes: fdb87343d7a747575fae0bb436cd9d105b9748e9 Change-Id: Id6217c929068b0182cb2d4a9922bfbf544c8c75d
2021-07-15hodec2: add low-rxqual-assignment penalty timer (2/2)Neels Hofmeyr4-13/+39
Hold off re-assignment after an intra-cell re-assignment due to low rxqual. Adjust test_amr_tch_h_to_f_rxqual.ho_vty to show the changed behaviour. Related: SYS#5198 Change-Id: Id00a07313fe04eec509b336c0637b59c707760e0
2021-07-15hodec2: add low-rxqual-assignment penalty timer (1/2)Neels Hofmeyr1-0/+26
First add a handover test script that shows the behavior without the low-rxqual-assignment penalty timer implemented. When implemented, the changes to this test script will show the change in behavior. Related: SYS#5198 Change-Id: I799fce709c86401546ccfe41b9f57fd579bcd987
2021-07-15handover tests: test passing of penalty timeoutNeels Hofmeyr2-0/+30
With recent addition of fake time in handover_test ('wait cmd'), show how a penalty timeout in handover decision 2 passes and allows a handover again after due time. Related: SYS#5198 Change-Id: I65e59cc7309778cf9d71612669ce84d101c8135e
2021-07-15test_penalty_timer.ho_vty: show lchan recoveryNeels Hofmeyr1-0/+14
Use recently added fake-time 'wait' command to show how the lchan in LCHAN_ST_WAIT_AFTER_ERROR recovers as soon as timer X3111 has passed. This prepares for also waiting for the penalty timeout to pass. Related: SYS#5198 Change-Id: I8f7668b6d08a0dac9e90d2358955f9d5099d39fa
2021-07-15handover_test: add fake-time 'wait'Neels Hofmeyr1-0/+56
Add a 'wait' cmd that lets (fake) time pass. An ucoming patch will show the first use of this: "test_penalty_timer.ho_vty: show lchan recovery" I8f7668b6d08a0dac9e90d2358955f9d5099d39fa My actual original reason to add this follows in patches - "handover tests: test passing of penalty timeout" I65e59cc7309778cf9d71612669ce84d101c8135e - "hodec2: add low-rxqual-assignment penalty timer (2/2)" Id00a07313fe04eec509b336c0637b59c707760e0 Related: SYS#5198 Change-Id: Ia6b5696adef7e7bf649473b4d79b96acf3aa59e3
2021-07-15switch handover penalty timers to CLOCK_MONOTONICNeels Hofmeyr1-4/+4
To be able to add a fake time to handover tests, the penalty timers need to use an osmo_* time source. There already is a fixme comment rightfully asking for a monotonic clock, so this change is overdue anyway. An upcoming patch will prove that this works: "handover tests: test passing of penalty timeout" I65e59cc7309778cf9d71612669ce84d101c8135e Related: SYS#5198 Change-Id: Ifb1ab3165db50511aed4f65aa445798367d7e19e
2021-07-15handover_test: also show when an lchan is busyNeels Hofmeyr2-13/+33
In expect-ts-use, indicate a busy lchan with letter '!'. The code is a bit complex because of the choice made earlier to show two TCH/H subslots as "TCH/HH", "TCH/H-" or "TCH/-H" depending on the subslot states: - show "-" as a shorthand for "all subslots UNUSED" - show a "TCH/" prefix only when there is any "H" or "F" following, i.e. when any subslot is actually established - if a subslot is busy (any other state besides ESTABLISHED and UNUSED), indicate the subslot as '!'. The spectrum of reported state strings for TCH/F is: TCH/F ! - For TCH/H: TCH/HH TCH/H- TCH/-H TCH/H! TCH/!H !- -! - The only current test affected is test_penalty_timer.ho_vty, where a failed handover leaves an lchan in LCHAN_ST_WAIT_AFTER_ERROR. Adjust that test. Rationale: I will soon add tests to verify the accurate timeout of a handover2 penalty timer. While implementing, I noticed that immediate retry of the handover ends up in timeslot 2, because timeslot 1 is still in WAIT_AFTER_ERROR. Instead of working around that, I would like to explicitly show the error state in the test -- it is an important aspect. Related: SYS#5198 Change-Id: I735ce7e2c3e0e450d3f76047d7e47691fe889cad
2021-07-15ensure trigger_ho() returns zero only when HO or AS was indeed triggeredNeels Hofmeyr3-7/+7
In an upcoming patch, handover_decision_2.c will use this indicator to decide whether to start a penalty timer: "hodec2: add low-rxqual-assignment penalty timer (2/2)" Id00a07313fe04eec509b336c0637b59c707760e0 Related: SYS#5198 Change-Id: I5de385e0666f716184a62e6e70d656545ac5d2ee
2021-07-14Avoid switching dyn ts to sdcch8 if it starves later TCHPau Espin Pedrol1-3/+63
In case an MS requests a channel to establish a voice call, we usuually try to assign an SDCCH to negotiate the call and finally make the MS switch to a TCH. However, it doesn't make much sense to provoke a switch of a dynamic TS into SDCCH8 if that would mean we end up with no TS available for TCH at the next step close in time. In that case, we are better assigning the TCH directly so that the full call can be established successfully. Related: SYS#5309 Change-Id: I3b32968949a7bdcbebf5a823359295bac51d8e08
2021-07-13bsc_vty: add vty option to allow call-reestablishmentPhilipp Maier1-0/+23
The rach control parameter value that controls the usage of call-reestablishment is currently hardcoded. Lets add a VTY option for this so that we are able to configure call-reestablishment Change-Id: Ia18c1dde4c001cb4d423f694f8bc146adfd77daf Related: SYS#5130
2021-07-12lchan_fsm: fix potential NULL-pointer dereferenceVadim Yanitskiy1-3/+15
Change-Id: I373855b95f8bde0ce8f9c2ae7bf95c9135d33484 Related: SYS#5526
2021-07-12handover_test: fix ts_str may be uninitializedosmith/build-fixOliver Smith1-2/+2
Fix for: handover_test.c: In function 'res_ind': handover_test.c:1094:30: error: 'ts_str' may be used uninitialized in this function [-Werror=maybe-uninitialized] char subslot_val = ts_str[lchan->nr]; Fixes: f76424 ("RES IND: add test_resource_indication.ho_vty") Change-Id: I398ba24b945bad96896eeb5ddbaff9c48bacf8ab
2021-07-11RES IND: pick lchan with least interferenceNeels Hofmeyr2-29/+57
In lchan_select, do not return on the first available lchan, but iterate through all available lchans. Among those that would match, pick the one with the lowest interference level as indicated by earlier RES IND. Lchans that have no interference ratings are picked last. This feature is off by default, enable per BTS with network bts N channel allocator avoid-interference 1 osmo-bsc still does the same ascending/descending lchan allocation as before this patch with the default setting of: channel allocator avoid-interference 0 Related: SYS#5313 Change-Id: I844494092193811dfd9fa4d52983cbaed0fc9248
2021-07-11RES IND: add test_resource_indication.ho_vtyNeels Hofmeyr3-0/+165
Show that osmo-bsc does not yet take Resource Indication's reported interference levels into account. (An upcoming patch will change that.) This test is not actually doing any handover, but it is using the handover/*.ho_vty scripting that was intended for handover testing. (Like test_dyn_ts_favor_half_used_tch_h_as_target.ho_vty does.) Related: SYS#5313 Change-Id: I56ec61196a1e103f0b4caf18d25d8222bb82cf87
2021-07-11RES IND: add VTY: bts / channel allocator avoid-interference (0|1)Neels Hofmeyr3-0/+63
Store the config option whether the channel allocator should try to avoid lchans with higher interference levels reported in RES IND. The actual implementation of avoiding interference follows in I844494092193811dfd9fa4d52983cbaed0fc9248 Related: SYS#5313 Change-Id: I8b62d0b41ad9e908b27713db9219e3dbc1ebaab7
2021-07-11RES IND: parse msg and store interference levels in lchansNeels Hofmeyr4-3/+106
Also show the current interference levels of unused lchans in the vty. Related: SYS#5313 Change-Id: Iccc1391e8419604bb09e464db8455e053dfbc982
2021-07-11lchan: call reset() upon allocNeels Hofmeyr1-0/+3
call lchan_reset() after allocation, to make sure that lchan->* fields that have a nonzero default value get initialized properly. In particular, a future patch adds interference measurements, and an lchan that never received any Resource Indication info should always indicate that there are no measurements (a nonzero constant). Related: SYS#5313 Change-Id: I700a969f5b11c21dacda9a7cad00c943dce554b3
2021-07-09hodec1: use same automatic FULL/SUBSET choice as in hodec2Neels Hofmeyr1-6/+3
So far handover decision 1 uses the FULL or SUBSET TDMA measurements across all measurement reports, depending on whether the last measurement report indicates that DTX is in use or not. Handover decision 2 since recently uses TDMA_MEAS_SET_AUTO to choose for each individual measurement report whether to use the FULL or the SUBSET value, depending on each single report's DTX use flag. Also switch handover decision 1 to heed every single report's DTX flag, by simply using TDMA_MEAS_SET_AUTO, replacing the current decision. Change-Id: Iebe980254b8c4a53ef9e7d720e417dc67077eff7
2021-07-09hodec2: [2/2] implement automatic choice between FULL and SUBSET measurementsNeels Hofmeyr6-22/+33
Add TDMA_MEAS_SET_AUTO to indicate automatic choice between FULL and SUBSET measurements depending on DTX. So far use only in hodec2. TDMA_MEAS_SET_AUTO looks at each individual measurement report's DTX flag and for each report chooses FULL if DTX is not used, or SUB if DTX is used. The default setting for 'handover2 tdma-measurement' is still 'subset'. To use the automatic choice, users need configure handover2 tdma-measurement auto Change-Id: I67dce55ccf892c8679272ee5dfedc25620f0f725
2021-07-09hodec2: [1/2] implement automatic choice between FULL and SUBSET measurementsNeels Hofmeyr4-26/+82
Cosmetic preparation for enabling automatic choice between FULL and SUBSET measurements depending on DTX in handover decision 2. Change the internal API to pass separate enums for the choices {RXLEV, RXQUAL}, {UL, DL} and {FULL, SUB}. Change-Id: I283e03126a6bc1f5f1b35f9801e841053edd2947
2021-07-09lchan_fsm: Improve timeout logging line in state WAIT_RLL_RTP_ESTABLISHPau Espin Pedrol1-1/+8
This allows quickly finding out whether the timeout is happening due to RLL not established or whether RTP is not ready. In essence, it indicates whether issue may be coming from MGW or from MS/BTS side. If coming from MGW, the timer T3101 is in general not a problem and the issue should be related to some misbehaving. If coming from MS/BTS, T3101 may require tunning (it could be a misbehaving of the MS/BTS too, or simply bad signal). Related: SYS#5526 Change-Id: Ib655f71aec584962c70d84a4405d996505dff53c
2021-07-09doc: bts.adoc: Update dyn ts section to include SDCCH8 supportPau Espin Pedrol1-5/+6
Related: SYS#5309 Change-Id: I40f4b19e7df83351c9c9e65d71880ac6aaa4ee88
2021-07-08lchan_fsm: Allow rx LCHAN_EV_RLL_REL_IND in WAIT_RF_RELEASE_ACKPau Espin Pedrol1-0/+8
As seen in osmo-bsc log during heavy load scenario: <000f> abis_rsl.c:2171 lchan(12-2-6-TCH_H-0)[0x559b880d1f40]{WAIT_RF_RELEASE_ACK}: Event LCHAN_EV_RLL_REL_IND not permitted Related: SYS#5523 Change-Id: Ie307872851490ae4d60c8117a5f4e2d8c2a414d6
2021-07-06Support SDCCH8 in osmo dyn tsPau Espin Pedrol3-0/+12
This feature signals support to configure Osmocom Dynamic Timeslot type as SDCCH8, on top of historically supported TCH/H and TCH/F. The idea is that when unneeded, the TS is configured as PDCH, and as soon as there's need for an SDCCH and there's none available, the TS is dynamically reconfigured to SDCCH8. Once all logical channels in the dynamic TS are released and hence becomes free, the BSC will reconfigure it to PDCH. Related: SYS#5309 Depends: libosmocore.git Change-Id Ifc0ca8916bd3e93e5a60a7dd7391d2588fdb5532 Change-Id: I29ac8b90168dba3ac309daeb0b6cfdbbcb8e9172
2021-07-06Rename osmo dyn ts enums to contain SDCCH8Pau Espin Pedrol18-76/+81
They will gain support to be activated as SDCCH/8 soon too. Related: OS#5309 Depends: libosmocore.git I56dcfe4d17899630b17f80145c3ced72f1e91e68 Change-Id: Id5b89fe589a52ff88486435ac43809edb4b80f98
2021-07-05assignment_fsm: Add assert to guard ptr accessPau Espin Pedrol1-0/+1
Let's make sure the null pointer is caught by the assert if ever code ends up here with conn->lchan being NULL. Change-Id: I404df638da6a93caa535f10fd330ea24a775bfc3
2021-07-05assignment_fsm: Fix null pointer dereference rx ASSIGNMENT_EV_LCHAN_ERRORPau Espin Pedrol1-1/+1
gsm_lchan_name always expects a valid lchan pointer. This patch fixes a crash seen: """ <000f> lchan_fsm.c:99 lchan(12-2-5-TCH_H-1)[0x559b880f2980]{WAIT_RLL_RTP_ESTABLISH}: (type=TCH_H) Signalling Assignment FSM of error (lchan allocation failed in state WAIT_RLL_RTP_ESTABLISH: Timeout) Assert failed lchan ../../include/osmocom/bsc/gsm_data.h:1034 """ Related: SYS#5392 Change-Id: I23a337d411e857954008c6f8ae60be714509d351