aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmo-bts/gsm_data.h
AgeCommit message (Collapse)AuthorFilesLines
2021-10-08rsl: prevent race condition during timeslot re-configurationVadim Yanitskiy1-1/+0
It may happen that the BSC requests logical channel activation on a dynamic timeslot, which is in a process of switching from one pchan type to another due to a preceding channel activation request. In this case 'struct gsm_bts_trx_ts' already holds an msgb with the preceding RSL CHANnel ACTIVation message, that is normally handled once the PHY completes the process of timeslot re-configuration. On receipt of subsequent RSL CHANnel ACTIVation messages, in function dyn_ts_l1_reconnect() we overwrite the preceeding msgb (memleak), by the most recent one. And once the timeslot re-configuration is done, only the most recent CHANnel ACTIVation message gets ACKed. In order to avoid this, let's move the msgb ownership to 'struct gsm_lchan', so it cannot be overwritten by the CHANnel ACTIVation message that is related to a different lchan on the same timeslot. Change-Id: Ia625c2827fca883ea712076706d5ef21ed793ba6 Related: I3b602ac9dbe0ab3e80eb30de573c9b48a79872d8 Fixes: OS#5245
2021-10-07nm_channel_fsm: Release lchans after BTS shutdownPau Espin Pedrol1-0/+2
This fixes some TTCN3 tests where some lchan resources were kept from previous tests. Change-Id: I78dca32cd061fba86cc88c4c4f323b33d51c58d0
2021-10-07Move lchan,power_ctrl specific code from gsm_data.h to their own filesPau Espin Pedrol1-420/+1
Let's split all lchan and power_control specific stuff into their own headers, it helps finding out data and operations available related to them. We already have similar classification in osmo-bsc. Change-Id: I6424dcbd2e329fc1a516f8886359554ed7e9487e
2021-10-07MS Power Control Loop: Use P_CON_INTERVAL=2 by defaultPau Espin Pedrol1-0/+1
Have a more stable loop with less temporary oscillations at the expense of increased reaction time. 4 SACCH blocks (P_CON_INTERVAL=2) is the minimum interval to get stable measurements for the last requested MS Power level. With P_CON_INTERVAL=1, are also made during a period with stable power being use to transmit, but the MS Power level used (and announced in MR) is not the last one requested by the BTS, but the one requested in the previous loop iteration. This can make the MS and BTS bounce 2 values forth and back, and create some temporary oscillation. See osmo-bsc User manual section "Power Control" for more information. Related: SYS#5371 Change-Id: I91c505447f68714239a4f033d4f06e91893df201
2021-10-07Introduce gsm_lchan_init() function helperPau Espin Pedrol1-0/+1
Let's move lchan specific struct stuff into lchan.c Change-Id: I9cb96707c63b8b7d76591d25fe906f02e34bb76b
2021-09-27osmo-bts-trx: implement Temporary Overpower for SACCH/FACCHVadim Yanitskiy1-0/+3
GSM/EDGE Evolution and Performance, Section 12.3 suggests Temporary Overpower as another solution to improve SACCH/FACCH performance in case of bad C/I. The idea here is that you increment the DL transmit power by 2..4dB only for FACCH/SACCH bursts, while keeping all voice bursts at the lower (normal) level as determined by BS power control. SACCH blocks can be recognized by the channel type, since they're always transmitted in specific frames of a multiframe. FACCH blocks, however, are not predictable and can substitute voice blocks at (almost) any time. Thus we need to mark FACCH bursts as such in the logical channel handlers (using TRX_BR_F_FACCH). Change-Id: Ie8a626fefccf1eb07271058e5126ec106cb1abcf Related: SYS#5319
2021-09-26gsm_lchan2chan_nr(): separate RSL specific variant of this APIVadim Yanitskiy1-0/+1
The ip.access style dynamic timeslots are a bit special in a way that on the A-bis/RSL we always use the Channel Number value of TCH/F, even in PDCH mode. This is why gsm_lchan2chan_nr() would always return values corresponding to TCH/F for TCH/F_PDCH. This behavior is only acceptable in the context of RSL messages, while other parts of the code base may not work properly due to this trick. A good example is the scheduler in osmo-bts-trx, where we have to patch Channel Number value to make channel activation work. DPCU INFO pcu_sock.c:853 Activate request received: TRX=0 TS=5 DL1C INFO l1sap.c:2043 (bts=0,trx=0,ts=5,ss=0) Activating channel TCH/F on TS5 DL1C NOTICE scheduler.c:1097 (bts=0,trx=0,ts=5,ss=0) Activating PDTCH DL1C NOTICE scheduler.c:1097 (bts=0,trx=0,ts=5,ss=0) Activating PTCCH In the code branch responsible for channel deactivation, we somehow forgot to add the same workaround, so deactivation does not work: DL1C INFO l1sap.c:2076 (bts=0,trx=0,ts=5,ss=0) Deactivating channel TCH/F on TS5 DTRX INFO trx_if.c:255 phy0.0: Enqueuing TRX control command 'CMD NOHANDOVER 5 0' DRSL NOTICE rsl.c:1286 (bts=0,trx=0,ts=5,ss=0) (bts=0,trx=0,ts=5,ss=0) not sending REL ACK Because of that, TCH/F_PDCH timeslots actually remain active after deactivation, so the scheduler keeps producing L1SAP DATA.ind. DL1P NOTICE l1sap.c:126 (bts=0,trx=0,ts=5,ss=0) assuming active lchan, but state is NONE DL1P ERROR l1sap.c:732 1583426/1194/00/29/14 No lchan for DATA MEAS IND (chan_nr=PDCH on TS5) DPCU NOTICE pcu_sock.c:973 PCU socket not connected, dropping message DL1P NOTICE l1sap.c:126 (bts=0,trx=0,ts=5,ss=0) assuming active lchan, but state is NONE DPCU NOTICE pcu_sock.c:973 PCU socket not connected, dropping message DL1P NOTICE l1sap.c:126 (bts=0,trx=0,ts=5,ss=0) assuming active lchan, but state is NONE DL1P ERROR l1sap.c:732 1583430/1194/04/33/18 No lchan for DATA MEAS IND (chan_nr=PDCH on TS5) DPCU NOTICE pcu_sock.c:973 PCU socket not connected, dropping message DL1P NOTICE l1sap.c:126 (bts=0,trx=0,ts=5,ss=0) assuming active lchan, but state is NONE DPCU NOTICE pcu_sock.c:973 PCU socket not connected, dropping message Instead of patching Channel Number in various places, let's rather make the RSL specific behavior configurable by having two variants of gsm_lchan2chan_nr(). Change-Id: I01680140c7201bf5284b278bceaea8ae01c122b2 Fixes: OS#5238
2021-09-14Support configuring TA loop SACCH block ratePau Espin Pedrol1-0/+2
Similar to what is already provided for power control loops. However, there's no existing way to communicate TA control parameters from the BSC to the BTS, so implement them locally in BTS vty. Related: SYS#5371 Change-Id: I9fa71f836bb9a79b0ef2567bfcfdf38ff217840b
2021-09-13MS Power Control Loop: Feed UL C/I from correct measurement periodPau Espin Pedrol1-2/+4
As per 3GPP TS 45.008 sec 4.2, the ms_pwr received in L1 SACCH Header is the value used over previous measurement period. Hence, we need to feed the algo with the measurements taken over that same period. Related: SYS#4917 Change-Id: I13c0014fdd73f823ae5b1256c35bfa7d97cfa334
2021-09-13lchan: Move TA CTRL param to its own substructPau Espin Pedrol1-2/+8
Field is renamed to look similar to similar fields in power control loop. This is a preparation commit, next one will add functionality to skip SACCH blocksi (P_CON_INTERVAL). Related: SYS#5371 Change-Id: I169ce58ab827e38b64f4b15f935097a9118fa118
2021-09-11early IMM ASS: add configurable delay for RR IMM ASSNeels Hofmeyr1-0/+2
During live testing, it has become apparent that some IMM ASS still fail when sending the RR IMM ASS directly upon the target channel becoming active. Add a bit of delay after activation, to give some time for the channel to light up for the MS. Default is 50ms. Related: OS#5559 Change-Id: Ia1e63b98944dc840cde212fc732e20277cdc5585
2021-09-03BS Power Control Loop: Support EWMA average algo for RxQual measPau Espin Pedrol1-0/+1
params->rxqual_meas.upper_thresh is left unchecked in lchan_bs_pwr_ctrl() on this commit on purpose, to keep this commit with old behavior wrt to algo logic. Change-Id: If7e3987df89d680cfa443195ab2f225681d0e6cf
2021-09-03MS Power Control Loop: Support EWMA algorithm for C/I measurementsPau Espin Pedrol1-0/+1
Change-Id: I52eb0558fd7a215a6ee0b2aced189ae4a37d8a22 Related: SYS#4917
2021-09-03MS Power Control Loop: Take C/I into accountPau Espin Pedrol1-0/+8
This commit extends existing MS Power Control Loop algorithm to take into account computed C/I values on the UL, received from MS. The related C/I parameters used by the algorithm are configured at and provided by the BSC, which transmits them to the BTS similar to already existing parameters. Using C/I instead of existing RxQual is preferred due to extended granularity of C/I (bigger range than RxQual's 0-7). Furthermore, existing literature (such as "GSM/EDGE: Evolution and Performance" Table 10.3) provides detailed information about expected target values, even different values for different channel types. Hence, it was decided to support setting different MS Power Parameters for different channel types. These MS Power Parameters are Osmocom specific, ie. supported only by newish versions of osmo-bts. Older versions of osmo-bts should ignore the new IEs added just fine. The new IEs containing the MS POwer Parameters are not send for non osmo-bts BTSs, hence this commit is secure with regards to running osmo-bsc against an ip.access BTS such as nanoBTS. Related: SYS#4917 Depends: libosmocore.git Change-Id Iffef0611430ad6c90606149c398d80158633bbca Change-Id: I5dfd8ff9ab6b499646498b507624758dcc160fb6
2021-08-18add osmo_tdef groups, exposing T timers on VTY configNeels Hofmeyr1-0/+3
We have two osmocom specific timers used in the BTS, X1 and X2. Expose those on the VTY configuration, as timer group 'bts'. This prepares for a subsequent patch, where I would like to add another configurable timer. This provides the basic infrastructure for that. Related: SYS#5559 Change-Id: I0f56f9425134679219884b0c3c2f29e77aff5e64
2021-08-18enable Early Immediate AssignmentNeels Hofmeyr1-0/+5
When an Immediate Assignment comes in targeting an lchan that is not yet active, then hold back the RR Immediate Assignment until the channel becomes active. This allows the BSC to send the Immediate Assignment before first waiting for the Channel Activation ACK, saving one Abis roundtrip, and helping avoid double allocation on high latency Abis links. Related: SYS#5559 Related: I56c25cde152040fb66bdba44399bd37671ae3df2 (osmo-bsc) Related: Ifb2c62431a91dafa6116b5d6b9410930f00a6e18 (osmo-ttcn3-hacks) Change-Id: Ie52765b238b01f22fb327fe12327fbf10abcad4c
2021-08-16remove unused LCHAN_S_INACTIVENeels Hofmeyr1-1/+0
Change-Id: Ia738eaa796264fe0a97a2c86d6bbd37eaffe0a59
2021-07-01osmo-bts-trx: implement BCCH carrier power reduction modeVadim Yanitskiy1-0/+3
The BCCH carrier (sometimes called C0) of a BTS shall maintain discontinuous Downlink transmission at full power in order to stay 'visible' to the mobile stations. Because of that, early versions of 3GPP TS 45.008 prohibited BS power reduction on C0. However, in the recent 3GPP TS 45.008 there is a feature called 'BCCH carrier power reduction operation'. This is a special mode of operation, where the variation of RF level for some timeslots is relaxed for the purpose of energy saving. In BCCH carrier power reduction operation, for timeslots on the C0 carrier, except timeslots carrying BCCH/CCCH, the output power may be lower than the output power used for timeslots carrying BCCH/CCCH. In this case the maximum allowed difference in output power actually transmitted by the BTS is 6 dB. The power reduction operation can be controlled by the BSC by sending BS POWER CONTROL on the A-bis/RSL with the Channel Number IE set to 0x80 (RSL_CHAN_BCCH). This makes osmo-bts reduce the transmission power on inactive timeslots of the BCCH carrier. This is a non-standard, Osmocom specific extension, so indicate support of this feature to the BSC in the feature vector. Also add a VTY command to allow enabling/disabling the power reduction locally. Add some signalling notes to the A-bis/RSL manual. For more details, see 3GPP TS 45.008, section 7.1. Change-Id: I3dcee6e910ccc61c5c63c728db9ea04327e2fc98 Depends: I69283b3f35988fc7a1a1dcf1a1ad3b67f08ec716 Related: SYS#4919
2021-06-29gsm_data: Drop unused function gsm_pchan_parse()Pau Espin Pedrol1-1/+0
Change-Id: I8f49811c1b694c5ef1fb9178d5ff4558172089b0
2021-06-18Report interference levels in RSL RF RESource INDicationVadim Yanitskiy1-0/+18
This change implements general interference averaging logic for the higher layers. In l1sap_info_time_ind(), where we receive TDMA time updates from BTS model, call rsl_tx_rf_res() for each transceiver according to the interval defined by the Intave parameter received from the BSC. In rsl_tx_rf_res() perform the actual averaging for each inactive logical channel, and then send everything to the BSC over the A-bis/RSL. The BTS model specific code needs to report the measurements for each logical channel every 104 TDMA frames (SACCH period) by calling gsm_lchan_interf_meas_push(). Change-Id: Id80fdbef087de625149755165c025c0a9563dc85 Related: SYS#5313, OS#1569
2021-06-05[VAMOS] Implement the concept of 'shadow' timeslotsVadim Yanitskiy1-0/+13
Change-Id: I48b44b4df9ffb1cca105aebbd868c29b21f3b1d6 Depends: Ia0bd8695a3f12331b696fe69117189cdd48b584d Related: SYS#4895, OS#4941
2021-06-04[VAMOS] gsm_data: rework and rename gsm_lchan_name_compute()Vadim Yanitskiy1-1/+1
Change-Id: Id5cc40db04a654d94f5f75d4aad45439d66528cc Related: SYS#4895, OS#4941
2021-06-04[VAMOS] osmo-bts-trx: rework handling of Training SequenceVadim Yanitskiy1-3/+6
The TSC (Training Sequence Code) value in 'struct gsm_bts_trx_ts' is always initialized in oml_rx_set_chan_attr() during the OML bootstrapping, so there is no need for gsm_ts_tsc() - remove it. Store the initial TSC value in 'struct gsm_bts_trx_ts', so we can apply a different TSC value during the RSL CHANnel ACTIVation. Store the Training Sequence Code/Set in 'struct trx_dl_burst_req'. These values are indicated to the transceiver (TRXDv2 PDUs, 'MTS' field) and used by the new TRX_{GMSK,8PSK}_NB_TSC macros. Change-Id: I3744bc308b99ef941e6e9d139444e414abebc14b Related: SYS#4895, OS#4941
2021-05-23[VAMOS] gsm_data.h: introduce and use BTS_TSC macroVadim Yanitskiy1-0/+1
Change-Id: I0cf915d2d3a640aa1442cf6abe9a314261b4a64e Related: SYS#5315, OS#4940
2021-05-23[VAMOS] gsm_data.h: fix wrong bit-mask in BSIC2BCC macroVadim Yanitskiy1-1/+1
BCC takes 3 LSB bits of the BSIC, so we should apply 0b111 or 0x07. The BSIC is specified in 3GPP TS 03.03 section 4.3.2. Change-Id: Id24ad64e6c6de080ab43faa272daf844fbba6954 Related: SYS#5315, OS#4940
2021-05-23[VAMOS] common: make 'struct gsm_bts_trx_ts' pointers constVadim Yanitskiy1-3/+3
Change-Id: I0369ef4ae603a4afed0661a5894df6a7135b1919
2021-05-18[VAMOS] Re-organize osmo-bts-trx specific structuresVadim Yanitskiy1-0/+3
Together with the 'generic' structures which used to be shared between osmo-bsc and osmo-bts some time ago, we also have the following osmo-bts-trx specific structures (in hierarchical order): - struct l1sched_trx (struct gsm_bts_trx), - struct l1sched_ts (struct gsm_bts_trx_ts), - struct l1sched_chan_state (struct gsm_lchan). These structures are not integrated into the tree of the generic structures, but maintained in a _separate tree_ instead. Until recently, only the 'l1sched_trx' had a pointer to generic 'gsm_bts_trx', so in order to find the corresponding 'gsm_lchan' for 'l1sched_chan_state' one would need to traverse all the way up to 'l1sched_trx' and then tracerse another three backwards. + gsm_network | --+ gsm_bts (0..255) | --+ l1sched_trx --------------------> gsm_bts_trx (0..255) | | --+ l1sched_trx_ts --+ gsm_bts_trx_ts (8) | | --+ l1sched_chan_state --+ gsm_lchan (up to 8) I find this architecture a bit over-complicated, especially given that 'l1sched_trx' is kind of a dummy node containing nothing else than a pointer to 'gsm_bts_trx' and the list of 'l1sched_trx_ts'. In this path I slightly change the architecture as follows: + gsm_network | --+ gsm_bts (0..255) | --+ gsm_bts_trx (0..255) | --+ l1sched_trx_ts <----------------> gsm_bts_trx_ts (8) | | --+ l1sched_chan_state --+ gsm_lchan (up to 8) Note that unfortunately we cannot 1:1 map 'l1sched_chan_state' to 'gsm_lchan' (like we do for 'l1sched_trx_ts' and 'gsm_bts_trx_ts') because there is no direct mapping. The former is a higl-level representation of a logical channel, while the later represents one specific logical channel type like FCCH, SDCCH/0 or SACCH/0. osmo-bts-virtual re-uses the osmo-bts-trx hierarchy, so it's also affected by this change. Change-Id: I7c4379e43a25e9d858d582a99bf6c4b65c9af481
2021-03-01l1sap: Store status of SRR in an lchan struct memeberPhilipp Maier1-0/+1
The MS sets the SRR bit in the L1 SACCH header to request DL-SACCH repetition from the BTS. At the moment we access the l1_info stored in tle lchan struct each time we want to check the status of the SRR bit. However, it is more convinient to do this once at reception and store the status of the status of the flag in a separate struct member. Change-Id: Ieddd45d7890343d64db14b9c726f6fa2f25714f6 Related: SYS#5114
2021-02-16gsm_data: handle l1_info with structsPhilipp Maier1-6/+1
in struct gsm_lchan and also in other places l1_info is handled in its binary form. Libosmocore now offers structs to handle l1 info, so lets use those structs to get rid of all the manual decoding of l1_info. Depends: libosmocore I23c1890b89d5a0574eb05dace9f64cc59d6f6df7 Change-Id: I5eb516d7849750f3dd174d48c9f07dabf2c80515
2021-02-07power_control: implement handling of P_Con_INTERVAL parameterVadim Yanitskiy1-0/+5
Change-Id: Ibf9956b2c6d829b38e9fda7d1f29790036219f42 Related: SYS#4918
2021-01-08power_control: properly track the first initial stateVadim Yanitskiy1-0/+2
Change-Id: I16e7474b5affbd90855a2e407b305e9dec581dfa Related: SYS#4918, SYS#4917
2021-01-08power_control: generalize measurement pre-processing stateVadim Yanitskiy1-3/+13
This way EWMA based filtering can also be applied to RxQual. Change-Id: I439c00b394da670e314f217b3246cc85ce8213c6 Related: SYS#4918, SYS#4917
2021-01-08power_control: migrate MS/BS control loops to the new paramsVadim Yanitskiy1-1/+0
In change [1] the new power control structures and default params were introduced. In change [2], the existing VTY commands for MS power control in the BTS were deprecated and changed to use the new structures as storage. Finally, in change [3], handling of the power control parameters on the A-bis/RSL was implemented. This change is the final logical step in the mentioned chain: it makes both MS/BS power control loops use the new parameters, and removes the old structures. The actual implementation of both power control loops remains the same, however the expected output of some unit tests for the Downlink loop needs to be changed: - TC_fixed_mode: disabling dynamic power control becomes a separate step of the test script since the field 'fixed' is removed; - TC_rxlev_target: RxLev thresholds are printed 'as-is'. Not all of the new parameters are used by the power control loops yet. Further improvements to be done in the follow up commits. [1] I6d41eb238aa6d4f5b77596c5477c2ecbe86de2a8 [2] Icbd9a7d31ce6723294130a31a179a002fccb4612 [3] I5a901eca5a78a0335a6954064e602e65cda85390 Change-Id: Ib18f84c40227841d95a36063a6789bf63054fc2e Related: SYS#4918
2021-01-04power_control: check-in new parameters and default valuesVadim Yanitskiy1-4/+63
For the sake of simplicity, the old structures that are still used by MS/BS power control loops are kept in place. Migration to the new structures requires additional changes to the existing power control logic, so it will be done in the follow-up changes. The new parameters are integrated as follows: + struct gsm_bts - a BTS instance: | Hard-coded default (fall-back) parameters for all transceivers. | +-+-> struct gsm_bts_trx - a TRX instance (transceiver): | Default parameters for all logical channels inherited from | 'struct gsm_bts' at start-up. May be overwritten by the | BSC using ip.access specific 'Measurement Pre-processing | Defaults' message on the A-bis/RSL interface. | +---> struct gsm_lchan - a logical channel (e.g. TCH or SDCCH): Connection specific parameters inherited from 'struct gsm_bts_trx'. May be overwritten by parameters sent by the BSC in CHANnel ACTIVation and other messages. Change-Id: I6d41eb238aa6d4f5b77596c5477c2ecbe86de2a8 Related: SYS#4918
2020-12-06power_control: clarify units in 'struct lchan_power_ctrl_state'Vadim Yanitskiy1-0/+3
Change-Id: I934f2d1e1064eed7587bc5693ef981bf449a1b81 Related: SYS#4918
2020-12-06power_control: implement BS (Downlink) Power ControlVadim Yanitskiy1-4/+2
We already have MS Power Control, which according to 3GPP 45.008 shall be implemented in the MS to minimize the transmit power in the Uplink direction. The BS Power Control may optionally be implemented by the network side for the same purpose. Using Downlink signal measurements reported by the MS, the BSS (either BSC, or BTS) may control Downlink attenuation in a way that the transmit power remains as low as possible, or remains in a specific range corresponding to good RxLev values on the MS side. This change implements autonomous BS Power Control, that can optionally be enabled by the BSC. BS Power Control re-uses parts of the MS Power Control code, so all parameters can be configured in the same way - via the VTY interface or a configuration file. This basically means that features like hysteresis and EWMA based filtering are also available for BS Power Control. The only difference is that RxQual values higher than 0 would trigger the logic to reduce the current attenuation twice. Note that one of the unit tests ('TC_rxlev_max_min') fails, as the power step limitations for raising and lowering look wrong to me, and the related discussion is still ongoing. Change-Id: I5b509e71d5f668b6b8b2abf8053c27f2a7c78451 Related: SYS#4918
2020-12-04power_control: generalize power control state structureVadim Yanitskiy1-8/+11
Change-Id: I8c6ad8d14349e8a05084c2912644c5202f951f52 Related: SYS#4918
2020-11-28l1sap: add repeated uplink SACCHPhilipp Maier1-0/+1
3GPP TS 44.006, section 11 describes a method how the uplink SACCH transmission can be repeated to increase transmission reliability. Change-Id: I7e4cc33cc010866e41e3b594351a7f7bf93e08ac Related: OS#4795, SYS#5114
2020-11-27l1sap: add repeated downlink SACCHPhilipp Maier1-0/+3
3GPP TS 44.006, section 11 describes a method how the downlink SACCH transmission can be repeated to increase transmission reliability. Change-Id: I00806f936b15fbaf6a4e7bbd61f3bec262cdbb28 Related: OS#4794, SYS#5114
2020-11-27l1sap: add repeated downlink FACCHPhilipp Maier1-0/+12
3GPP TS 44.006, section 10 describes a method how the downlink FACCH transmission can be repeated to increase transmission reliability. Change-Id: I72f0cf7eaaef9f80fc35e752c90ae0e2d24d0c75 Depends: libosmocore I6dda239e9cd7033297bed1deb5eb1d9f87b8433f Related: OS#4796 SYS#5114
2020-11-26part 1 of: fix SAPIs for handover to match 48.058 4.1.{3,4}Neels Hofmeyr1-0/+16
This part adds the common lchan flags to indicate whether DL SACCH should be activated. Note that currently, osmo-bsc *always* sends the MS Power IE as well as the TA IE, also for inter-cell HO, so in the osmoverse, nothing will change until we also adjust osmo-bsc. See OS#4858. Change-Id: Ibea973ccadf5d424213f141f97a61395856b76de
2020-10-15power_control: implement EWMA based Uplink power filteringVadim Yanitskiy1-0/+3
So far the Uplink power control loop did not filter the Uplink RSSI measurements (reported by the BTS) at all. The lack of filtering makes our implementation too quick on the trigger, so in the real deployments there will be unneeded Tx power oscillations. In order to reduce this effect, let's implement a very simple EWMA (also known as Single Pole IIR) filtering that is defined as follows: Avg[n] = a * Pwr[n] + (1 - a) * Avg[n - 1] where parameter 'a' determines how much weight of the latest UL RSSI measurement result 'Pwr[n]' carries vs the weight of the average 'Avg[n - 1]'. The value of 'a' is usually a float in range 0 .. 1, so: - value 0.5 gives equal weight to both 'Pwr[n]' and 'Avg[n - 1]'; - value 1.0 means no filtering at all (pass through); - value 0.0 makes no sense. This formula was further optimized with the use of '+=' operator. The floating point math was also eliminated by scaling everything up (by 100). For more details, see: https://en.wikipedia.org/wiki/Moving_average https://en.wikipedia.org/wiki/Low-pass_filter#Simple_infinite_impulse_response_filter https://tomroelandts.com/articles/low-pass-single-pole-iir-filter The EWMA filtering is now *enabled by default*, but can be disabled or (re-)configured over the VTY at any time: ! Completely disable filtering no uplink-power-filtering ! Enable EWMA smoothing with the given parameters uplink-power-filtering algo ewma beta <1-99> Note that the VTY command expects 'beta' instead of 'alpha': alpha = (100 - beta) and the value must be in %. This is done for simplicity: 1% means lowest smoothing, 99% means highest smoothing. Let's say we have EWMA filtering enabled with alpha = 0.4, and get -98 dBm on the input, while the last output value was -60 dBm. The new output would be: Avg[n] = 0.4 * Pwr[n] + 0.6 * Avg[n - 1] Avg[n] = (0.4 * -98) + (0.6 * -60) Avg[n] = -75.2 => around -75 Of course, this is not a silver bullet, but better than nothing. Change-Id: Ib6dcadbf14ef59696c6a546bd323bda92d399f17 Related: SYS#4916
2020-10-15gsm_data: check in and use enum lchan_rel_act_kindVadim Yanitskiy1-1/+10
Change-Id: If7a7e90dda77a1989420e329c5d60805b28360c7
2020-10-01gsm_data.h: Drop unused struct fieldPau Espin Pedrol1-1/+0
Probably a leftover from openbsc times. Change-Id: I0b62c41bcb992df376668c6feb6ac7ada35d471d
2020-09-17gsm_data: rename hopping.{ma,ma_len} to hopping.arfcn_{list,num}Vadim Yanitskiy1-2/+2
MA (Mobile Allocation) is actually a bit-mask indicating those ARFCNs of the Cell Allocation, which must be used as the hopping sequence. What we store in struct gsm_bts_trx_ts is the actual list of hopping channels, so let's name it properly and eliminate possible confusion. Change-Id: I677d66e428fa0fe119ebc37bc2a4e6cc05c251c4
2020-09-17struct gsm_bts_trx[_ts]: remove unused parsed NM attribute listVadim Yanitskiy1-1/+0
This list is already a part of struct gsm_abis_mo. Change-Id: I19b907bea500569c6e7e1b64b50e1c2ee2014f1c
2020-08-07osmo-bts-trx/scheduler: implement baseband frequency hoppingVadim Yanitskiy1-0/+3
The idea behind the baseband frequency hopping is quite simple: we have several RF carriers (transceivers) transmitting and receiving on fixed frequencies (just like in a regular multi-trx setup), and an additional burst routing layer between the schedulear and the transceiver interface (TRXD over UDP). Speaking in terms of the proposed implementation: - on Downlink, dlfh_route_br() calculates the ARFCN corresponding to the current TDMA frame number according to the hopping sequence parametets, and picks the transceiver with matching ARFCN; - on Uplink, ulfh_route_bi() iterates over the transceiver list of of the BTS, calculating hopping ARFCNs for equivalent timeslots, and picks the one with ARFCN matching the received burst. In order to avoid frequent transceiver lookups on the Downlink path, dlfh_route_br() maintains a "cache" in the timeslot state structure. Unfortunately, this "cache" seems to be useless on the Uplink path, so ulfh_route_bi() always needs to lookup the matching transceiver for each burst received over the TRXD interface. It may also happen that the scheduler will be unable to route an Uplink or Downlink burst, e.g. due to inconsistent / incorrect hopping sequence parameters received from the BSC, or in case if a transceiver gets RF-locked by the BTS operator. Such events are logged as "FATAL" and aditionally signalled by the following osmo-bts-trx specific rate counters: - trx_sched:dl_fh_no_carrier (Downlink), and - trx_sched:ul_fh_no_carrier (Uplink). Change-Id: I68f4ae09fd0789ad0d8f1c1e17e17dfc4de8e462 Related: SYS#4868, OS#4546
2020-07-14Move struct gsm_bts_trx: gsm_data.* & bts.* => bts_trx.*Pau Espin Pedrol1-53/+0
Move all struct gsm_bts_trx references from bulky gsm_data to its own file containing all related definitions and implementations. Also move a few functions clearly related to that object which were placed in bts.* Change-Id: Iebaf5b221c48b571f45408af867ce6f9c0cd9f4a
2020-07-05Move gsm_bts code gsm-data.* => bts.*Pau Espin Pedrol1-309/+1
bts.h refers to struct gsm_bts object, but we still had a bunch of stuff in bulky gsm_data.* from old days. Let's move stuff where it belongs to start clean up of gsm_data. Change-Id: I0a4219e3f64f625ee8b364bf408b8d2bcc8085c5
2020-07-05Move nm_state and Mo related code gsm_data.* => oml.*Pau Espin Pedrol1-37/+1
Change-Id: I57ea9c4ddbe5443b9b6afe3f8e6b38170d0e5a0e