aboutsummaryrefslogtreecommitdiffstats
path: root/src/common
AgeCommit message (Collapse)AuthorFilesLines
2020-04-01l1sap: fix gsmtap_ph_rach(): properly pack 8-bit and 11-bit RAVadim Yanitskiy1-2/+12
According to 3GPP TS 44.004, section 7.4a, two alternative RACH block formats are specified: 8 bit (1 octet) and 11 bit. The bit order is little-endian (right to left). In L1SAP PH-RACH.ind structure (see ph_rach_ind_param) we use a field of type uint16_t to store RA values regardles of the block format. Thus when packing it to bytes, we cannot just cast uint16_t* to uint8_t*, we need to do some bit shifting. Change-Id: I0e91d825bb2e1897647dd5403c311d833a89ff2e
2020-03-24VTY: add "test send-failure-event-report"Oliver Smith1-0/+20
Send test failure event report OML message to the BSC. I found this useful while manually testing related handling code in OsmoBSC. Related: OS#1605 Change-Id: I0c4eba1636d8faf5012db26643bdf1d9fb6bfa1e
2020-03-22trx: Use NOPE indications on SDCCHHarld Welte1-0/+12
Without using the NOPE indication it might happen that we get into the following situation: * bursts 0,1,2 of a given block are received * burst 3 is lost on the radio interface, OsmoTRX sends NOPE * osmo-bts-trx doesn't pass the NOPE the the rx_tch*_fn() * we never detect the end of the block, never perform decoding and even if the burst could be fully decoded, we loose the block Related: OS#4661 Related: OS#2975 Change-Id: Idfc5c9a23db808c5f87ef5646c7e1d1cd3127371
2020-03-22trx: Use NOPE indications from OsmoTRX for TCH/F and TCH/HHarld Welte1-0/+3
Without using the NOPE indication it might happen that we get into the following situation: * bursts 0,1,2 of a given block are received * burst 3 is lost on the radio interface, OsmoTRX sends NOPE * osmo-bts-trx doesn't pass the NOPE the the rx_tch*_fn() * we never detect the end of the block, never perform decoding and even if the burst could be fully decoded, we loose the block For voice, it can lead to lost RTP frames in uplink, which is also problematic. Let's deal with burst_len=0 in rx_tch*_fn() and use it as nope_fn. Closes: OS#4661 Related: OS#2975 Change-Id: I0fbf4617daf24bd8aecfd9cfe1efd66cf73a277a
2020-03-08rsl: make IP DSCP configurableOliver Smith3-2/+26
Related: OS#4438 Depends: libosmo-abis I41603db8c1286660ad57ac1c78a8fb393a2b080b Change-Id: Icdef5d40243fefdeae23f3bcf9c6702e8487928a
2020-03-08l1sap: Use msgb_pull_l2() and unify l1sap_tch_ind + l1sap_ph_data_indHarald Welte1-3/+2
In l1sap_ph_data_ind() we can use msgb_pull_l2() which is an exact implementation of the functionality there. In l1sap_tch_ind(), the existing code is actually wrong by making the assumption that the msgb contains exactly an entire osmo_phsap_prim. Better to also dynamically compute the number of bytes to ensure we only pull those ahead of the L2 header, no matter what their exact count. Change-Id: I13f7f8ba93795e40b1fb4a306fe765e059f642cf
2020-02-29common/sysinfo: reduce criticality of a logging messageVadim Yanitskiy1-1/+1
During the process of bootstrapping, it may happen that System Information Type 3 is not yet received from the BSC, while the BTS already needs to transmit a block on AGCH or PCH. Since the RSL link is established later than the OML link, it's kind of expected, so we should not log it as error. Change-Id: I41aa3dbe375cf42c39032bafa80dba94d6219d35
2020-02-27vty: fix left shift by 31 cannot be represented in type 'int'Vadim Yanitskiy1-1/+1
Change-Id: I3e5940e8f360bf6563f4c1b5ebd09579f9108c81
2020-02-17osmo-bts-sysmo: merge measurement data and payloadPhilipp Maier1-1/+11
For osmo-bts-sysmo the MPH INFO MEAS IND indication is still sent separately. Lets merge the measurement information into the PH DATA Change-Id: Iffe7865727fbf9bca8eb32a96e8ea05cf718a948 Related: OS#2977
2020-02-12l1sap: Change loglevel of Rx TCH.ind INFO->DEBUGPau Espin Pedrol1-1/+1
This line appears tens of times per second when a call is ongoing, making it impossible to follow logs on INFO level. Change-Id: Iadb1baf55df2f6d96f85260f2e8d03627fef7e66
2020-01-20l1sap: merge MEAS IND into PRIM PH DATA / PRIM TCHPhilipp Maier3-21/+95
The MPH INFO MEAS IND indication, which contains the uplink measurement data is sent in parallel to the PH DATA and TCH indications as a separate indications. This makes the overall uplink measurement data processing unnecessarly complex. So lets put the data that is relevant for measurement into the PH DATA and TCH indications directly. This change only affects osmo-bts-trx at the moment. In order to keep the upper layers (l1sap.c) compatible we add an autodection to switch between separate measurement indications and included measurement data. Related: OS#2977 Depends: libosmocore I2c34b02d329f9df190c5035c396403ca0a4f9c42 Change-Id: I710d0b7cf193afa8515807836ee69b8b7db84a84
2020-01-20measurment: write irssi_full_sum variable correctlyPhilipp Maier1-1/+1
The variable irssi_full_sum is not populated with a dummy value when we are not able to compute irssi_full_sum. Instead we mistakenly write MEASUREMENT_DUMMY_IRSSI to ber_full_sum, which is wrong Change-Id: I44d7cb48e3c68ab1b48c78cceb9381ce3e39d7e8 Related: OS#2987
2020-01-20ta_control: move timing advance code from osmo-bts-trx to commonPhilipp Maier3-1/+62
The timing advance controller that is implemented in loops.c of osmo-bts-trx only works for osmo-bts-trx and not for any of the phy based bts. Lets move the timing advance controller into the common part and make it available for every bts. Also lets add a unit-test. Change-Id: If7ddf74db3abc9b9872abe620a0aeebe3327e70a Related: SYS#4567
2020-01-14L1SAP: use LOGL_DEBUG for logging from rach_pass_filter()Vadim Yanitskiy1-3/+3
Due to relatively small training sequence of Access Bursts, there can be frequent false-positives (basically noise). Fortunately, we can distinguish them from the real Access Bursts by checking the signal measurements attached to them (BER, ToA and C/I). Let's reduce verbosity of logging messages as they are mostly useful for debugging and may confuse the users / operators. Change-Id: I7ab6727ffff00140a7f9e762b299b711481393f1
2020-01-12rsl.c: Fix compiler error on gcc-9.2.1Harald Welte1-1/+1
rsl.c: In function ‘rsl_rx_ipac_XXcx’: rsl.c:2147:39: error: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size 28 [-Werror=format-truncation=] 2147 | snprintf(cname, sizeof(cname), "bts@%s", ipstr); | ^~ rsl.c:2147:3: note: ‘snprintf’ output between 5 and 260 bytes into a destination of size 32 2147 | snprintf(cname, sizeof(cname), "bts@%s", ipstr); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Change-Id: Id982a814f401e304327d25c77666f039bc156c1f
2020-01-11common/abis.c: make use of RSL TEI from OML IPA RSL ConnectVadim Yanitskiy2-2/+5
Change-Id: I5927f59a49724170a63e87be604973f7c9d5d8be
2020-01-11common/vty.c: get rid of generic exit / end commandsVadim Yanitskiy1-42/+0
Those commands are now handled by libosmovty itself. Change-Id: I425f9058ae15de929e2ba0283d4057bdf767aeeb
2020-01-06measurement: use signed integer for division of ta256b_sumMichael McTernan1-1/+1
The variable ta256b_sum is int32_t and num_ul_meas_actual is unsigned int. When ta256b_sum is negative the division produces the wrong result. This is beacuse the division is performed unsigned as the usual arithmetic conversions promote to unsigned where both both operands are the same width. Lets fix this by casting num_ul_meas_actual to signed. (Note that in the same function there are various other averages computed in the same pattern, but they have unsigned operands and so are correct.) Related: SYS#4728 Change-Id: I37e3f69109c5ca2948bd4cdb7aa017bf2fcb8172
2020-01-03l1sap.c: ensure ms power control loop is runningPhilipp Maier1-0/+2
When a bad SACCH frame is received the processing of the frame is ended early and lchan_ms_pwr_ctrl() is not called. This means that the power control loop does not get informed about a situation where the signal level is very weak and increasing the ms power would make sense. In order to ensure that the power control keeps working on lost SACCH frames, lets call lchan_ms_pwr_ctrl() with the current RSSI and the requested (BSC) power setting. Related: OS#4281 Change-Id: I4fb85754b1a69376b02da7f4b175c6e8ec9cc35c
2020-01-03rsl: ensure measurement reports are sentPhilipp Maier3-5/+32
osmo-bts currently does not generate a measurement report in case the SACCH of the related traffic channel is lost. This is a problem because the moment when reception gets bad measurmenet reporting is crucial to carry out handover decisions effectively. The presence of a SACCH block controls the conclusion of the measurement interval and the sending of the RSL measurement report. The latter one not only requires a measurmenet indication, it also requires a fully intact SACCH block. Lets use the NOPE / IDLE indications from V1 of the TRXD protocol to ensure a SACCH block is always reported up to l1sap.c. In cases where the SACCH is bad, trigger the sending of the RSL measurement report manually without attaching the measurmenet data from the MS (which we do not have in this case) Related: OS#2975 Depends: osmo-ttcn3-hacks Ib2f511991349ab15e02db9c5e45f0df3645835a4 Change-Id: Idfa8ef94e8cf131ff234dac8f93f337051663ae2
2019-12-31osmo-bts-trx/vty: ensure backwards compatibility with older config filesVadim Yanitskiy1-2/+11
osmo-bts-trx used to have its own (low-level) MS Power Control loop, but recently it has been ripped out. Since [1], the process fails to start if the configuration file still contains 'ms-power-control dsp'. Let's be more tolerant: override 'dsp' by 'osmo' and print a warning. [1] I49706926b1e962b18791174627bc3cc0cd0cd9d5 Change-Id: I4facd21bca3d8cb80d21e83ea267bc013e474533
2019-12-23l1sap: is_fille_frame(): verify len of data comparedPau Espin Pedrol1-0/+3
Change-Id: Id3d1725ff36091ed5c57927caad09a8baea6f52e
2019-12-05power_control.c: Clarify loop algo vars and use correct ones during logPau Espin Pedrol1-18/+18
Rename some variables so that: * Variables containing power control levels end up with "_lvl". * Variables containing power levels end up with _dbm. * Move old current_dbm var to be ms_dbm, to match its power control level counterpart ms_power_lvl, and add current_dbm to match its counterpart ns_power_ctrl.current. Now that variables are more clear, it also becomes clear that old "diff > 0" condition, apart from difficult, was currently wrong, since in order to print the raise/low verb we want to compare between old and new values, not between received and new values. Let's fix that in this same commit. Change-Id: I4e279a6b93fbcc5da25bf8c9213310939fd493ce
2019-12-05power_control.c: Log maximum allowed MS Power LevelPau Espin Pedrol1-6/+10
Change-Id: I983ff824ef6f54f1e800819d622158d5e2a51f04
2019-12-05rsl: Clarify when autnonoums MS Power Ctrl Loop is usedPau Espin Pedrol1-9/+6
Simplify when the fixed field is set in rsl_rx_chan_activ. Comment talks about enabling autonoumous control loop, but it is actually describing it when disabling it, which is confusing. Change-Id: Id6b444a33ab062f6dab11a0ce62d8aecaea87591
2019-12-04rach_pass_filter(): Add information about channel typeHarald Welte1-10/+11
When logging about filtering access bursts, let's indicate if this is on a CCCH, PDCH or handover related. Change-Id: I03f21f2b54cbe5aad36ac71a614d5df98867df80
2019-12-03rsl_rx_chan_act: Apply bitmask when parsing IE MS_POWERPau Espin Pedrol1-1/+1
Change-Id: I99c6a4d353f405582d5e4f9d12c01c25c7bb4dff
2019-12-02common/abis.c: use tall_bts_ctx as talloc-context for libosmo_abis_init()Vadim Yanitskiy1-1/+1
This way it's much easier to introspect the library internal talloc allocations from the VTY interface. Change-Id: Ic8d9fc7ce3da8abf0ea73d2b20366133cd801c37
2019-12-02common/abis.c: pass gsm_bts_trx to e1inp_sign_link_create()Vadim Yanitskiy1-4/+2
Change-Id: I8a6242d3e02f9bd19d287ecad18e001a5991175f
2019-11-26common/vty.c: fix: properly assert() the result of get_string_value()Vadim Yanitskiy1-2/+2
Change-Id: I6ecd46371e601ad0fb629f9756b36c9c4758a958 Fixes: CID#205067, CID#205068
2019-11-22pcuif_proto.h: extend RACH.ind with TRX and timeslot number fieldsVadim Yanitskiy2-5/+10
Since there can be multiple PDCH channels configured on different timeslots, different TRXes, and BTSes, the PTCCH/U handling code in OsmoPCU needs to know the exact origin of a given RACH.ind. Otherwise, it is not known which subscriber originated a given PTCCH/U indication, and hence it is impossible to send PTCCH/D Timing Advance notification properly. Fortunately, we can extend the RACH.ind message without even bumping the protocol version, because every single PDU has a fixed size defined by the largest message - INFO.ind. In case if the actual message payload is smaller, the rest is filled with a constant padding byte (0x00). Older versions of OsmoPCU will consider the new fields as padding, while the messages from older OsmoBTS versions will always have both fields set to 0x00. Since C0/TS0 cannot be configured to PDCH, this can be easily detected on the other end. Change-Id: Iff38934a108b6b1cd298669834263a7d5296c3f6 Related: OS#4102, OS#1545
2019-11-20power_control.c: Limit speed of announced MS Power Level value changesPau Espin Pedrol1-4/+17
It's not a good idea to request big changes in MS Power based on sporadic bad signal received, let's instead change announced MS power levels more smoothly to avoid possible big signal strength fluctations, similar to what is already done in osmo-bts-trx specific loop (loops.c). Related: OS#1851 Change-Id: Iecc4ec7e21471ec853ad2d5659af4052aba5444c
2019-11-20power_control.c: Don't use announced MS Power level as input for loop ↵Pau Espin Pedrol2-25/+4
calculations Use instead the received MS Power currently in use by the MS matching the measured signal. This way there's no need to wait for the MS to reach the announced MS power level or add checks in case the MS doesn't support that specific power level. Furthermore, more fine grained announced power level value can be obtained faster due to more input iterations not being dropped while waiting. osmo-bts-trx specific algo was not following this approach and using announced MS power instead because it's wowrking at a lower level and henche was not using the transmitted MS Power level value by the MS as input for the calculation. The "if (diff < 2 && diff > -2))" condition is dropped since equal signal strength may still result in a different MS power level announced (the one currently used by the MS during tx of last SACCH block). Related: OS#1851 Change-Id: I4494dc27a295a3dca1d3331d4ff712d486643e13
2019-11-19osmo-bts-trx: general handling of NOPE / IDLE indicationsVadim Yanitskiy1-0/+15
Each logical channel can now optionally have an additional handler, that will be called when a NOPE / IDLE indication is received from the transceiver. The aim of that handler is to keep the logical channel state updated in case if one or more Uplink bursts are lost. Change-Id: I71c552f44c25e56e9779d8b8ef5d4de9f8475637 Related: OS#3428
2019-11-14Introduce BTS feature BTS_FEAT_MS_PWR_CTRL_DSPPau Espin Pedrol3-1/+12
It indicates whether BTS model supports managing an MS Power Control Loop over HW/DSP instead of using the software based osmocom algorithm present in osmo-bts. osmo-bts-trx own loop implementation is considered to be a "DSP/HW" one since it acts on lower layers and interferes with osmocom algorithm since it controls the same end variable "lchan->ms_power_ctrl.current", this way we make sure both aren't enabled at the same time. Old behavior in kept: if common upper-layer algo is not enabled explicitly in VTY (ms-power-control osmo) and bts-trx specific lower layer algo is neither enabled (osmotrx ms-power-loop <xyz>), then no power control is done at all. Related: OS#1851 Change-Id: I49706926b1e962b18791174627bc3cc0cd0cd9d5
2019-11-14power_control.c: Fix ms pwr ctrl skipped if MS doesn't support announced MS ↵Pau Espin Pedrol2-2/+14
Power Level Related: OS#1851 Change-Id: I1a9c00fe4eb3fa1eaa7997a9ec20716ddfe180a7
2019-11-14power_control.c: Log rx current and target signal levelsPau Espin Pedrol1-4/+6
Change-Id: I31ce7930a1daa20a2ff81f31a37df94298c877d6
2019-11-14power_control.c: Apply latests improvements from loops.cPau Espin Pedrol1-45/+66
Several improvements have been made lately to MS Power Control loop from osmo-bts-trx in loops.c. Let's port these to the common algorithm. Related: OS#1851 Change-Id: I579967cc8bb69dc76a315c6c9d3a351f5961d92f
2019-11-14Move and rename gsm_lchan.ms_power fieldPau Espin Pedrol3-15/+14
Make it clear that it contains the maximum MS power level (TS 05.05) and not the one to be used. The one aimed at is in ms_power_ctrl.current. Since it's used in related code, move it inside the ms_power_ctrl struct too. Related: OS#1851 Change-Id: Ib264ec7dac87355cef6415461ed74bd8e9c8ca52
2019-11-14rsl: Remove unneeded duplicate reset on some lchan fieldsPau Espin Pedrol1-3/+0
Both ms_power and ms_power_ctrl are reset to 0 again further below. Change-Id: Ia2a5da068d440232361d57bd5ac33eddebf05ebe
2019-11-14Change gsm_lchan field fixed to boolPau Espin Pedrol1-8/+8
Change-Id: I715ef151b67a21e325c574585a257e71b4b0ce2a
2019-11-14Change gsm_bts_trx field to bool and rename itPau Espin Pedrol2-4/+4
Thies field is used to store and retrieve whether MS power needs to be calculated and updated by osmo-bts software or autonomously by lower layers. Previous name was not clear and may have been understood as indicating whether MS Power Control loop is done or not in general, and the responsible for that is located under lchan's ms_power_ctrl.fixed. Related: OS#1851 Change-Id: Ic690ab69866a7377f1597e24aa7b0214831c1cbe
2019-11-14cosmetic: Fix trailing whitespacePau Espin Pedrol1-1/+1
Change-Id: I7b9a091226e3c7dd60b3921ab0d53688f42d1a4d
2019-11-12rsl: Fix logged value in rx MS Power ControlPau Espin Pedrol1-1/+1
The interesting value in this case is the incoming new ms max power. Change-Id: Ib6fcb21b1b4bdbc8b749a1b8543d97331699ef3b
2019-11-12rsl: Assign recv pwr to lchan's max ms powerPau Espin Pedrol1-2/+22
Otherwise older ms_power value will be kept and used as a maximum. From TS 08.58 sec 4.8 "MS power control": """ If power control is supported by BTS and it is to be used, this is indicated by optional parameters in the MS POWER CONTROL message (or the CHANNEL ACTIVATION message). Based on the measurements performed on the uplink, TRX then attempts to keep the power control parameters within the limits set by the MS POWER CONTROL message (or by the CHANNEL ACTIVATION message). """ Change-Id: I0583eef477c33279ee5bfcda80141f365413a276
2019-10-28cosmetic: l1sap.c: Fix typoPau Espin Pedrol1-1/+1
Change-Id: I9fee7be915546cfd11810c74d511beb8ec10d044
2019-10-28power_control.c: Take into account RSL CHAN ACT ms power level limitsPau Espin Pedrol1-0/+7
This is similar commit to Ifda92155bd9c277ac150a327a7ab63c854087788, which previously fixed same issue for osmo-bts-trx specific power control loop code. TS 48.058 sec 4.8 MS power control: """ TRX then attempts to keep the power control parameters within the limits set by the MS POWER CONTROL message (or by the CHANNEL ACTIVATION message) by changing the MS Power Level field of the L1 header sent to MS in each SACCH block. """ Should fix TTCN3 BTS_Tests.TC_rsl_ms_pwr_dyn_max for non-bts-trx BTS models. Related: OS#1622 Change-Id: I376b52d7bee44132993a69cf532bd418171d0ca2
2019-10-21vty.c: avoid coverity BAD_SHIFT issuesOliver Smith1-0/+2
Make it obvious for compilers and for coverity, that the sapi value used to shift a bit for the sapi_mask is always <= 31. The sapi value is an index of the value string l1sap_common_sapi_names, which has 24 entries. Fixes: CID#205067, CID#205068 Change-Id: Id8be0ab67479b1f76a4f624bd3a5242e4fe59f4b
2019-10-21vty.c: don't ignore get_string_value() errorsOliver Smith1-4/+4
Change uint8_t sapi to int, so we can properly assert on errors from get_string_value(). Fixes: CID#205066, CID#205069 Change-Id: I4d30afacfab93051868ae8f462cee9ad3dbc7fd0
2019-10-17Fix common misspellings and typosMartin Hauke10-23/+23
Change-Id: I403b9029f57fec3fdec2c1e2cbeac0f6eab53f24