aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2022-08-18osmo-bts-trx: amr_loop: trigger the loop unconditionally2022q2Vadim Yanitskiy3-30/+1
The logic responsible for enabling and disabling the loop appears to be broken: during my experiments trx_loop_amr_set() was never called with loop=1. It's not clear what's the motivation behind this breaker, so I propose to rip it out for now. This patch finally makes the loop work (confirmed with a TEMS phone). Related: SYS#5917, OS#4984 Change-Id: I09b649973d4269c4082a4fafa493c37825f95a9c (cherry picked from commit 541b7525aee81fbeed23be9cddf909ebcca6ed6d)
2022-05-17Revert "osmo-bts-trx: rx_tchf_fn(): do not treat AFS_SID_UPDATE as SUB frame"Vadim Yanitskiy1-5/+1
This reverts commit 1f9fbd881602f20f5d83b94f2332c18c19b680e0, which was a workaround rather than a proper fix. The root problem has been fixed in libosmocoding [1], so ~50% BER is not the case for AFS_SID_UPDATE frames anymore. Related: I813081a4c0865958eee2496fe251ae17235ac842 (libosmocore.git) Change-Id: Iebe139632daf1d1f72e39fe9d1497059f68625b9
2022-05-15osmo-bts-trx: rx_tchf_fn(): do not treat AFS_SID_UPDATE as SUB frameVadim Yanitskiy1-1/+5
We have two similar values in enum gsm0503_amr_dtx_frames: * AFS_SID_UPDATE - precursor of SID UPDATE, * AFS_SID_UPDATE_CN - the actual SID UPDATE. The former is internally used by libosmocoding to mark the current frame as a precursor of the actual SID UPDATE frame - the later. +---+---+---+---+---+---+---+---+ | _ | _ | _ | _ | a | b | c | d | AFS_SID_UPDATE +---+---+---+---+---+---+---+---+ | a | b | c | d | _ | _ | _ | _ | AFS_SID_UPDATE_CN +---+---+---+---+---+---+---+---+ ^ | | We're here. Do not treat the precursor frames as a SUB frames, as they contain no information (rc=-1) and usually have *expected* BER ~50%. This fixes unexpected RXQUAL-SUB > 0 in the Uplink measurements during DTX. Change-Id: I46f32bbbcb6284615d05b8703945c5ca4da55b92 Related: SYS#5853
2022-05-10measurement: fix matching of SUB frames by TDMA FNVadim Yanitskiy2-69/+32
3GPP TS 45.008, section 8.3 defines active TDMA frame subsets for TCH channels, which shall always be transmitted even during the silence periods in DTX mode of operation. Each frame number listed in this section corresponds to a single burst. The Uplink measurements always contain TDMA FN of the *first* burst of a block, so it does not make sense to match the given FN against all FNs in the respective subset. Instead, we should match only specific FNs in accordance with the block mapping rules defined in 3GPP TS 45.002, section 7, table 1. In the active subset for TCH/F there is only one *complete* block starting at FN=52. Incomplete blocks {52, 53, 54, 55} and {56, 57, 58, 59} contain only 50% of the useful bits (partial SID) and thus ~50% BER, so we don't treat them as SUB. In the active subsets for TCH/H there are two *complete* blocks for each sub-slot. Their respective first FNs can be efficiently defined in a lookup table (see ts45008_dtx_tchh_fn_map[]). Note that we can use a single lookup table for both sub-slots of TCH/H because their TDMA FNs do not overlap. This patch fixes unexpected SUB-RxQual values > 0 on TCH channels with DTXu enabled and other than AMR (HR, FR, EFR) codec in use. Change-Id: I8cc3a755a8ad4dc564439aab2298c1e97ac0592d Related: SYS#5853
2022-05-10measurement: move SACCH detection to process_l1sap_meas_data()Vadim Yanitskiy3-46/+16
SACCH detection can be simplified by checking the RSL Link ID in process_l1sap_meas_data(). This eliminates the need to lookup the multiframe position by calling trx_sched_is_sacch_fn(), which definitely takes more CPU time than just L1SAP_IS_LINK_SACCH(). Calling trx_sched_is_sacch_fn() is still required for BTS models reporting the measurements via PRIM_MPH_INFO (legacy way), separately from the related Uplink blocks. This patch can be summarized as follows: * detect SACCH and set .is_sub=1 in process_l1sap_meas_data(); ** for PRIM_MPH_INFO use trx_sched_is_sacch_fn(); ** for PRIM_PH_DATA use L1SAP_IS_LINK_SACCH(); * do not call trx_sched_is_sacch_fn() from ts45008_83_is_sub(); * modify the unit test - test_ts45008_83_is_sub_single(); ** remove test_ts45008_83_is_sub_is_sacch(). Change-Id: I507e96ee34ac0f8b7a2a6f16a8c7f92bc467df60 Related: SYS#5853
2022-05-10measurement: log SUB/FULL as text in lchan_new_ul_meas()Vadim Yanitskiy1-4/+5
Change-Id: Idfaf8ad2ac0fd4da57a0981563e6ad6104fa4e41 Related: SYS#5853
2022-05-10tests/meas: improve test_ts45008_83_is_sub_is_sub()Vadim Yanitskiy1-44/+47
This function should also take lchan type into account. Change-Id: I6920a04e0a6c846647fa1b6b3a3c80bbd6617b99 Related: SYS#5853
2022-05-10tests/meas: improve logging in test_ts45008_83_is_sub_single()Vadim Yanitskiy1-8/+3
* Print unexpected TDMA FNs, each on a separate new line. * Do not abort() on mismatch, keep running. Change-Id: I32c104b139f32a39c8347de19de6ad7caec811de Related: SYS#5853
2022-05-10struct bts_ul_meas: reflect C/I units in field name s/c_i/ci_cb/Vadim Yanitskiy5-11/+11
Change-Id: If07f7f2a3ea996cbfc6a9087fa34402e38a7fd9f Related: SYS#5853
2022-05-10scheduler: trx_sched_is_sacch_fn(): make ts pointer constVadim Yanitskiy2-2/+2
Change-Id: I48a1a549d7c1553bccaa01cdc818873a4c6cdf0a
2022-05-06osmo-bts-trx: drop Uplink loss detection from Downlink pathVadim Yanitskiy5-122/+0
Attempting to detect missing Uplink frames in the *Downlink* path is an ugly hack, that was needed before we had proper per-lchan detection of missing bursts and NOPE indications in TRXDv1. * [1] per-lchan detection of missing bursts was fixed in Aug 2018. * [2] TRXDv1 support was introduced in Jul 2019. Today is 2022 and it makes no sense to keep this hack. Even if the transceiver does not support TRXDv1, per-lchan detection will compensate the missing Uplink bursts. Change-Id: Ic292d180ba64206fb4d88adb284f9f9d058b4587 Related: [1] I70d05b67a35ddcbdd1b6394dbd7198404a440e76 Related: [2] If61c71d20d590bf07bfd019afb33000a0b6135bd
2022-04-29pcu_sock: comment out {dl,ul}_tbf_ext related warningsVadim Yanitskiy1-2/+2
The gitlog shows that these warnings were added in 744f745d7a508605254afa8f78412ad410d153b0 by jolly (in 2012!). As nobody has bothered for the past ten years, degrade them to comments. Change-Id: Iebf9961cffbd7aa20b263f7dc0016a44782dec60 Related: osmo-bsc.git I9ef7e18f56aa86b48f0ffeec58406260736170f3
2022-04-29osmo-bts-trx: rx_{tchh,tchf}_fn(): improve logging of AMR DTX framesVadim Yanitskiy2-3/+7
Change-Id: I0ec06113fff2a89d7810cd4d8c26d6e0c74f93bd Related: SYS#5853
2022-04-26src/common/bts.c: set BTS_FEAT_CCNOliver Smith1-0/+1
OsmoBSC assumed since If91d85331d402c3ab9c32b70c2c66cd7ba6ceb28 that OsmoBTS has CCN (NACC, Network Assisted Cell Change). With OsmoBSC Idf2d933aa8b03b1f708e56a08707fe6c620a97aa, instead of hardcoding some features for OsmoBTS in OsmoBSC, only the features reported by the BTS are used. Therefore report that BTS_FEATURE_CCN is supported in OsmoBTS. For previous OsmoBSC versions, this fixes the message: Get Attributes Response: reported feature 'CCN' is not supported, while we thought it is. Related: SYS#5922, OS#5538 Change-Id: Ic407e3be82afe61ed64b1cecf3dc94d2caff380a
2022-04-25src/common/bts.c: set BTS_FEAT_PAGING_COORDINATIONOliver Smith6-5/+1
I did not realize with my previous patch that there's a common place where features available for all backends should be enabled. So move it there. Related: SYS#5922, OS#5538 Change-Id: Id688ddae5cd714355fcc5324f33c9397fecae261
2022-04-25model_init: order features alphabetically, part 2Oliver Smith3-6/+9
Order the ones I've overlooked as well. Related: SYS#5922, OS#5538 Change-Id: I0aa344de9ea4849de0fcd7b44bfaa70274af594b
2022-04-21model_init: set BTS_FEAT_PAGINATION_COORDINATIONOliver Smith5-0/+5
According to osmo-bsc I0e80ca5afc06737273b6699bde6e325e454b57f6, the PAGING_COORDINATION feature should be well supported in osmo-bts. Adjust the bts_model_init functions to report this to the BSC, so it properly sets this in SI13 and so we can avoid this notice in the log: Get Attributes Response: reported feature 'PAGING_COORDINATION' is not supported, while we thought it is. Related: SYS#5922, OS#5538 Change-Id: Ib06829501f4221a7f7b0344ec7991ceba74e7641
2022-04-21model_init: order features alphabeticallyOliver Smith5-30/+35
Make it easier to compare the lists of features. Related: SYS#5922, OS#5538 Change-Id: I67887d89912d963fbbe90590c8467cbbd2566e09
2022-04-21osmo-bts-trx: check if scheduling of [dummy] FACCH/H is allowedVadim Yanitskiy2-1/+13
Currently (without this patch) if tch_dl_dequeue() yields nothing we're scheduling dummy FACCH/H *regardless* if it's permitted to start at the given TDMA FN or not. This may result in misaligned FACCH transmission, so the MS will not able to decode anything and will report BER>0. With this patch applied we schedule FACCH/H if it's allowed to start at the current TDMA FN; otherwise send half-filled bursts with even numbered bits contaning 232 encoded bits of the previous L2 frame and 232 odd numbered bits all set to 0. This patch does not guard against sporadic gaps in the Downlink TCH queue. However when tch_dl_dequeue() constantly yields nothing, e.g. when we end up with a codec mismatch, then this additional check saves us from starting misaligned FACCH/H transmission. If we start at a wrong TDMA offset, then all subsequent FACCH frames will be scheduled at wrong offsets and thus none of them will be decoded by the MS. Change-Id: I6f8af140a6ccf3d5fd7b98f6cb5c18e2c5e2f61b Related: SYS#5919, OS#4823
2022-04-21VTY: fix NULL-pointer dereference in 'show transceiver'Vadim Yanitskiy1-0/+5
Change-Id: I403a027f064a4898eb74a11381bab3c884ec8ccf
2022-04-20osmo-bts-trx: fix scheduling of dummy FACCH/H and FACCH/FVadim Yanitskiy2-0/+3
* dl_ongoing_facch must be set for correct FACCH/H scheduling; * dl_facch_bursts must be set for FACCH overpower to work. Change-Id: Ief12eb67ad80de3b71f5226858dc2e0c8ae76948 Related: SYS#5919, OS#4823
2022-04-20osmo-bts-trx: tx_tchh_fn(): make handling of FACCH/H cleanerVadim Yanitskiy1-4/+9
If set, chan_state->dl_ongoing_facch indicates that we're sending the 2 (out of 6) middle bursts of FACCH/H. In this case there is no room for encoding an additional frame, because both even and odd numbered bits are occupied by a previously encoded FACCH/H. Right after calling tch_dl_dequeue(): * do not check the dequeued message against NULL, * do not compare the message length to GSM_MACBLOCK_LEN, * immediately free() it and jump to the sending part. Change-Id: Ib923b8f5cc1063e9fc18acd2bdd003fd09f4b70f Related: SYS#5919, OS#4823
2022-04-20osmo-bts-trx: prioritize FACCH in s/tx_tch_common()/tch_dl_dequeue()/sVadim Yanitskiy2-41/+41
Unlike SACCH, FACCH has no dedicated slots on the multiframe layout. It's multiplexed together with TCH (speech or data) frames basically by replacing (stealing) them. This is common for both TCH/F and TCH/H, with the only difference that FACCH/H steals two TCH frames (not just one) due to a longer interleaving period. Let's implement the multiplexing in the common function, which is used to dequeue to be transmitted frames - this slightly reduces code duplication. Use a new name, so that it's clear what it does. Change-Id: I9822b1a17185d5487f0f6d3ed0203e806c053d7d Related: SYS#5919, OS#4823
2022-04-20bts-trx: sched_lchan_tchh.c: Workaround gcc false positive errorPau Espin Pedrol1-1/+2
Manual analysis of code didn't end up in finding any issue, so this seems a false positive (I can really understand gcc failing to do proper job here, this function has way to many jumps here and there. """ /sched_lchan_tchh.c:88:13: error: ‘rc’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 88 | int rc, amr = 0; | ^~ """ Change-Id: Ifebaee63a9dad04976ffb4438c32360687ef095a
2022-04-20osmo-bts-trx: amr_loop: do not miss C/I samplesVadim Yanitskiy1-4/+4
Keep collecting C/I samples even if the MS has not yet applied previously requested codec mode. The C/I ratio is expected to stay more or less the same, no matter which codec mode is used. Change-Id: Ieb5473ead7200f652b5d0e339e4e252d6567482d Related: SYS#5917, OS#4984
2022-04-20osmo-bts-trx: amr_loop: log if AMR mode remains unchangedVadim Yanitskiy1-0/+3
Change-Id: I0272d11cfaad0e1c13d2858b3bc61d6527898018 Related: SYS#5917, OS#4984
2022-04-20osmo-bts-trx: amr_loop: allow upgrading codec mode > 0Vadim Yanitskiy1-1/+7
With the current implementation the AMR loop is unable to upgrade the current codec mode unless it reaches the worst possible value. The problem is in the 'else' statement connection both 'if's. Change-Id: I4c0fb28813373c3d4addd28c66f5136d2c4f9ed8 Related: SYS#5917, OS#4984
2022-04-20osmo-bts-trx: amr_loop: improve logging in trx_loop_amr_input()Vadim Yanitskiy1-11/+12
Currently we're logging AMR mode *indexes*, not the actual modes. Let's make it cleaner for the user by logging both mode and index. Change-Id: I4feb3a3823799a290a50a48275e45f3331874d1a Related: SYS#5917, OS#4984
2022-04-20osmo-bts-trx: use C/I in the AMR link adaptation loopVadim Yanitskiy6-49/+53
Change-Id: Ide84bf864f56020c0265cfb9731615d4f7bad7f5 Related: SYS#5917, OS#4984
2022-04-20osmo-bts-trx: amr_loop: simplify trx_loop_amr_set()Vadim Yanitskiy1-9/+4
Change-Id: Ibeed00ef48450edfe1e0d4e179fb4c777b11beb9 Related: SYS#5917, OS#4984
2022-04-19common: fix coding style: if is not a functionVadim Yanitskiy3-7/+7
Change-Id: I890d7734c83d108d3c2cd2c7699ace880f13ca8b
2022-04-17struct amr_multirate_conf: remove ms_mode[], raname bts_mode[]Vadim Yanitskiy7-38/+37
Looks like this structure was copied from openbsc/osmo-bsc as-is. The ms_mode[] makes no sense in the context of BTS, so remove it and rename bts_mode[] to mode[] for the sake of brevity. Change-Id: I7442360ed857554440a0b9854f2d2bbab9dc5a71 Related: SYS#5917, OS#4984
2022-04-15tests: use 'check_PROGRAMS' instead of 'noinst_PROGRAMS'Vadim Yanitskiy11-11/+11
When using 'check_PROGRAMS', autoconf/automake generates smarter Makefiles, so that the test programs are not being compiled during the normal 'make all', but only during 'make check'. Change-Id: I18ebb7395024a490da743c0bcb20959e6e9c7017
2022-04-13amr: fix parsing of threshold and hysteresis in amr_parse_mr_conf()Vadim Yanitskiy2-9/+12
Change-Id: I8febb60b0ad91903c7869871f41d1c123dbe5ce3 Related: SYS#5917, OS#4984
2022-04-13tests/amr: add a unit test for amr_parse_mr_conf()Vadim Yanitskiy5-2/+55
This unit test demonstrates a problem in amr_parse_mr_conf(): the threshold and hysteresis values are parsed incorrectly. They are expected to match what we have in amr_fr_bts_mode_def[]: Mode[0] = 0/13/4 Mode[1] = 2/25/4 Mode[2] = 5/37/4 This will be fixed in a follow-up patch. Change-Id: Iab7e8878e62f598959e80fcb7e729b7f496962a2 Related: SYS#5917, OS#4984
2022-04-13tests/amr/Makefile.am: use proper binary name prefix 'amr_test_'Vadim Yanitskiy1-2/+2
Both misc_test_{SOURCES,LDADD} were simply ignored because binary 'misc_test' is not listed in noinst_PROGRAMS... Change-Id: Ia1739bab76261ff6d50824462b8ed2e0b34fb464 Related: SYS#5917, OS#4984
2022-04-13rsl: use hard-coded defaults if the MultiRate conf IE is absentVadim Yanitskiy3-1/+107
This configuration will be used as a fall-back when the MultiRate configuration IE is not included in the CHAN ACT/MODIFY messages. Change-Id: Ie96af636105ee1ffe2d9a0bd9eea375faebad149 Related: osmo-bsc.git Ic5f8d55d250976d8d4c9cae2d89480fd52326717 Related: SYS#5917, OS#4984
2022-04-13osmo-bts-trx: bts_report_interf_meas(): remove unused fn paramVadim Yanitskiy1-3/+2
Change-Id: Iec25b28e418ce1f66bbc7e0696a3ceebb02e9c82
2022-04-13l1sap: l1sap_chan_act(): remove unused *tp argumentVadim Yanitskiy5-6/+6
Change-Id: I2030f05b55fc9370e71ff12b26ffe1142f4acfc8
2022-04-13l1sap: l1sap_chan_act(): alloc DTX FSM only for TCHVadim Yanitskiy1-1/+1
Change-Id: Ieb5728b7a9e7d7c58449deaa5a6c4d8755b6e213
2022-04-13osmo-bts-virtual: remove unused 'codec_mode_request' argumentVadim Yanitskiy1-4/+3
Change-Id: If5001d7b19820478d0e88fea3126e5dd4fbd2634
2022-04-13rsl: misc / cosmetic fixes for tx_ipac_XXcx_nack()Vadim Yanitskiy1-4/+4
Change-Id: Ia7367cdfc6e1b1ebaabdf21e0a050fc1543968b2
2022-04-13rsl: always check return value of rsl_tlv_parse()Vadim Yanitskiy1-24/+57
Change-Id: I07cbd2849d83af28eb0458547f0eacc81347df23
2022-04-13logging: use a different color tone for DLOOPVadim Yanitskiy1-1/+1
Normal blue (34) is really hard to read on terminals with dark background. Let's use light blue (94) instead. Change-Id: Iadc9b8fb74ec17455435893a532c2f12e02cb804
2022-04-12rsl: parse_multirate_config(): check if AMR codec is usedVadim Yanitskiy1-1/+15
3GPP TS 48.058 defines the MultiRate configuration IE as optional, and states that it's "included if the Channel Mode indicates that a multi-rate codec is used". If I understand this correctly, it may be omitted even if a multi-rate codec is requested. Otherwise it would have been defined as a conditional IE. For now let's print a warnig if this IE was expected, but missing. We may need to apply some hard-coded defaults in this case. If this IE is present, but the Channel Mode indicates a codec other than AMR, let's send NACK with cause=RSL_ERR_OPT_IE_ERROR, assuming that the CHAN ACT/MODIFY message is malformed. Change-Id: I6ddc0b46a268ed56ac727cda57d0d68b2746fd59 Related: SYS#5917, OS#4984
2022-04-12rsl: rsl_rx_chan_{activ,modif}: do not sent an Error ReportVadim Yanitskiy1-6/+2
Sending an Error Report along with a NACK makes no sense. Change-Id: Idae55645c34970f839bb0eef61a7326a1026b20c Related: SYS#5917, OS#4984
2022-04-12rsl: de-duplicate parsing of MultiRate configuration IEVadim Yanitskiy1-24/+33
Change-Id: I98e10c3e947b9a4605e9db5bf7f499dc24bccad7 Related: SYS#5917, OS#4984
2022-04-11osmo-bts-trx: amr_loop: remove unneeded #includesVadim Yanitskiy1-4/+0
Change-Id: I6d181f19711dc14695abd0f8e2586329e91aa68d Related: SYS#5917, OS#4984
2022-04-11osmo-bts-trx: use '#pragma once' in amr_loop.hVadim Yanitskiy1-4/+1
Change-Id: I98e42485955de4a261b6c8d865e84c313c1145d5 Related: SYS#5917, OS#4984
2022-04-11osmo-bts-trx: rename 'loops.[ch]' to 'amr_loop.[ch]'Vadim Yanitskiy6-7/+7
There is nothing else except the AMR link adaptation loop in these files. Change-Id: Iff2c0d32da5cd89824197d05f4732ce974c12f28 Related: SYS#5917, OS#4984