osmo-bts-trx declares a connection failure when the radio link counter
S reaches 0. This counter is decreased every time the Viterbi decoder
yields a decoding error on the Uplink SACCH. For more details, see
3GPP TS 45.008, section 5.2.
The scheduler in osmo-bts-trx expects NOPE indications to be sent by
the transceiver in the absence of valid Uplink bursts. However, due
to the asynchronous nature of TRXD link, our virtual Um interface
implementation, fake_trx.py, does not generate NOPE indications on
it's own. Instead, trxcon is sending empty TRXDv0 PDUs (BURST.req),
which are then translated to proper TRXDv1 NOPE.ind by fake_trx.py.
The TC_conn_fail_crit currently sends L1CTL_DM_REL_REQ in order to
simulate connection loss, what makes trxcon disable all active
timeslots and thus stop sending NOPE.req to fake_trx.py.
Let's tune trxcon back to BCCH, in order to ensure that NOPE.req
messages are still being sent, so that osmo-bts-trx will be able
to declare a connection failure over the RSL as expected.
Change-Id: I34aee95111eafea90eeeea861682f1b4547d7b03
Related: Ic292d180ba64206fb4d88adb284f9f9d058b4587
The RSL MultiRate configuration IE is all about AMR (Adaptive Multi
Rate) codec, so there is no need for 'amr_' prefix in field names.
Change-Id: If63ee50e8681ad4e0a202f142f2fca2268d55079
There is no real need to pass the multi-rate parameters explicitly
in each invocation of ts_RSL_MultirateCfg. The exact multi-rate
configuration does not matter in scope of BTS specific tests.
Change-Id: I24117af8c5b7b11fe4b8f24fca5279ad97b46fab
Both testcases were introduced in 2021 [1], however they're not
executed on Jenkins because they're not present in control section.
Fixes: [1] I38e8a1cf15eb41a621b457b39024283a767c94be
Change-Id: Iebf6d14321b54e7ef261443aece03296540ebe92
As was explained in [1], until recently we relied on trxcon sendig
dummy RR Measurement Reports with patched L1 SACCH Header values.
Now trxcon does not patch it for us, so we need to send Uplink
SACCH blocks with the correct L1H ourselves.
Revision 2 of [1] was successfully tested and proved to fix the
above-mentioned testcases. However during code review I was asked
to make the statements sending Uplink SACCH blocks self-explanatory.
In revision 3 of [1] I modified the code to call f_send_meas_rep(),
which was introduced in [2], which as stated in the commit message
is using g_pars.l1_pars.{ms_power_level,ms_actual_ta} instead of
the values from received L1H. Of course this does not work.
Add and use f_send_meas_rep_l1h(), which allows to send the given L1H.
Take a chance to add a log() statement, so that we can see what we Tx.
Change-Id: Ia79a0a7b06394bd34d0f40226cf40e6e8bd2ba35
Fixes: [1] I31dd6b9026d04403092256176f67785a0a6486ad
Related: [2] Ia5d0315e053702df5fa8dad8c6c66c11c9f3edcb
Related: OS#5635
There is a time window between activation of a dedicated channel and
receipt of a L1CTL_DATA_REQ with the first RR Measurement Report, in
which the L1 may need to start transmission on Uplink SACCH.
In this case the L1 is using a dummy SACCH block with hard-coded L1
SACCH header values and hard-coded Measurement Results.
Until recently we relied on implementation specific behavior of trxcon
patching the L1 SACCH header in hard-coded dummy SACCH block. This
behavior was changed, so TC_ms_pwr_ctrl_{constant,pf_ewma} started to
fail. Let's properly populate the SACCH cache to fix these TCs.
Change-Id: I89eb90815e86db466ea626f4c25f2634c1d942d5
Depends: osmocom-bb.git I0f467fc07cf844cc73465f235b36ba7d00788c9f
Related: OS#5635
We used to rely on trxcon sendig dummy RR Measurement Reports and
patching the L1 SACCH Header with the configured MS Power Level
and Timing Advance values. Since recently, the following testcases
started to fail because trxcon does not patch dummy MRs anymore:
* TC_rsl_ms_pwr_dyn_ass_updown,
* TC_rsl_ms_pwr_dyn_max, and
* TC_rsl_ms_pwr_dyn_up.
Do not rely on dummy MRs, send SACCH blocks with the expected
MS Power Level and Timing Advance values from the testsuites.
f_send_meas_rep() internally uses:
* g_pars.l1_pars.ms_power_level, and
* g_pars.l1_pars.ms_actual_ta.
Change-Id: I31dd6b9026d04403092256176f67785a0a6486ad
Related: OS#5635
The key difference is that f_send_meas_rep() simply sends an RR
Measurement Report and does not wait until it's received on the RSL.
Change-Id: Ia5d0315e053702df5fa8dad8c6c66c11c9f3edcb
A comment in f_TC_rsl_ms_pwr_dyn_up() states:
> By default, the MS power loop gets triggered every 4th SACCH block (1.92s).
> We need 9 * 4 dB steps to get from 0 dBm to 33 dBm, so 9 * 1.92s total.
> Add an extra offset to avoid race conditions: +1.92s.
so the alt statement is expected to block for 19.2s, while the guard
timer is set to 20.0s by default. This is not enough, given that
f_TC_rsl_ms_pwr_dyn_up() also needs to wait for the first SACCH block
before entering the alt statement.
Let's give it more time to run in order to avoid sporadic failures.
Change-Id: Ib7de8383c95ac9e00560f786ec4c56f79f7d81bc
Related: OS#5635
Sending L1CTL_DM_REL_REQ does not make the L1 tune back to CCCH/BCCH.
We need to send a L1CTL_FBSB_REQ after releasing a dedicated channel
if we want to establish another one. This is essential when running
tests using Calypso PHY, and will be required once we have proper
trxcon_fsm implementation [1] merged.
Related: [1] osmocom-bb.git Ifaf63ead9dd180181358e771367b2a686ba159ca
Change-Id: I65fb243a62fc7670b43f467d6b79268cdfb98f36
Move parameter 'fpc' at the end and assign false by default, so that
there is not need to pass false. We never set it to true anyway.
Change-Id: I8a0ef562c2426a637fbb9fe3d50711ee7738d04f
If a CRXC message contains optional remote IP and port IEs, the
CRCX ACK received from the BTS is expected to contain its listen
address and port. In some cases osmo-bts may indicate nonsense
addr='0.0.0.0', and indeed the RTP_Emulation component is not gonna
like this. This makes both BTS_Tests.TC_speech_rtp_tch[fh] test
cases fail whenever executed in Docker:
Connection refused (unexpected)
Let's work this around by sending the remote IP and port IEs in
additional MDCX message and omitting them in CRCX. This mimics
osmo-bsc's behavior and makes both test cases pass.
Change-Id: I03453e72f62819989dfe6aa12d8bd889fced1046
Related: OS#5242
Average size of osmo-bts.log after running ttcn3-bts-test is ~178 MB,
and more than 52% (!) of it is the OML logging messages. Other than
making the logfile bigger, bursts of OML messages make it really hard
to follow the output of osmo-bts when running tests natively.
Change-Id: Ib5346a3ca42917169e195f905472ccea7579e5eb
Since recenly, osmo-bts is using P_CON_INTERVAL=2 by default. This
means that the MS power loop gets triggered every 4th SACCH block
(1.92s), so we need more time to reach the maximim Tx power.
Change-Id: I9266f7284fcdb0afa3473f575640689e334e89a8
Related: osmo-bts.git I91c505447f68714239a4f033d4f06e91893df201
Related: OS#5517
The test case scenario can be summarized as follows:
1. Activate a logical channel for async handover.
1.a. Tune the MS side to that channel.
1.b. Make sure that no Downlink DCCH is received.
2. Send a handover Access Burst to the BTS.
2.a. Expect RR Physical Information to be received Ny1 times.
2.b. Expect no other data to be received on Downlink DCCH.
Currently the new test case fails for several reasons:
* osmo-bts-trx starts transmitting on DCCH before the handover
Access Burst is received, this is wong;
* trxcon immediately starts sending dummy frames on Uplink
DCCH, causing osmo-bts to stop sendig RR Physical Info.
Change-Id: I9469027ce88fb2750f1eceef2d8a56d4b8ee4d03
Related: SYS#5838
In TTCN-3 it's possible to call one altstep from another. This
allows us to build complex hierarchies of simple altsteps, where
one is built on top of the others. I call this altstep-oriented
programming. This change adds the following hierarchy:
* as_l1ctl_dl_msg() - triggers on receipt of a L1CTL DATA.ind
matching the given RSL chan_nr/link_id and data templates;
* as_dl_lapdm_dummy() - triggers on receipt of dummy LAPDm
func=UI frames with empty payload (repeats by default);
* as_dl_dcch_lapdm_ab() - triggers on receipt of a Downlink DCCH
containing a L2 payload that matches the given LAPDm frame;
* as_dl_dcch_pdu() - triggers on receipt of a LAPDm AB frame
with a L3 payload matching the given template.
All of these altsteps (except as_dl_lapdm_dummy()) expect an 'out'
parameter, which will hold the matched (and possibly decoded) data.
Example:
var PDU_ML3_NW_MS pdu;
alt {
[] as_dl_lapdm_dummy(); /* Ignore empty LAPDm func=UI frames */
[] as_dl_dcch_pdu(pdu, tr_CM_SERV_ACC) { setverdict(pass); }
[] as_dl_dcch_pdu(pdu, tr_CM_SERV_REJ) { setverdict(fail); }
[] as_dl_dcch_pdu(pdu, ?) { setverdict(inconc, "Unexpected PDU"); }
}
Change-Id: Ia4d502488cbb6bccc4d2656206ae6649bfa71007
Related: SYS#5838
Currently we execute both test cases on *all* available dedicated
channels from g_AllChannels[]. Given that SACCH is slow, and in
some cases we intentionally wait for a timeout of 3.0 seconds to
expire, the overall execution time is quite long. We have a risk
of the test execution being aborted due to the guard timeout.
I agree that using g_AllChannels[] makes sense for TC_ho_rach, which
tests handover RACH detection. There we want to be sure that detection
works on all slots of all DCCH types (especially when running a setup
with real MS/BTS hardware).
But for both TC_sacch_chan_act_ho_{sync,async} it's enough to run
on different channel types (see g_AllChanTypes[]), because what
we actually want to test is the Downlink SACCH operation.
Change-Id: Ic1937edd72ff842cb619e153d0f6a624ceb95281
Related: SYS#5838, OS#4008, OS#4009
According to 3GPP TS 48.058:
* 4.1.3 async handover: "If the MS Power IE is present the BTS
*may* start transmission also on the SACCH".
* 4.1.4 sync handover: "If only the MS Power IE is present the BTS
*may* start transmission also on the SACCH".
"May" does not mean "shall", so osmo-bts does not.
Change-Id: I5e97944e56b7860f2d912cd8d3c978a0f1e08645
Related: SYS#5838, OS#4008, OS#4009
TTCN-3 offers a very convinient way of matching an octetstring
against a record template (decoding target) on the fly, so that
there is no need to attempt decoding it manually beforehand.
This can be done by using the 'decmatch' keyword (see B.1.2.9).
Unfortunately, decmatch fails if an octetstring is longer than
the encoded variant of the decoding target (e.g. has padding).
Let's work this around by adding a 'padding' field, so during
decoding all remaining octets will be stored in it.
Change-Id: I0151adf7790127617f7cb57c9a9ec6c28721e95a
Related: SYS#5838
This eliminates the need for using log2str() and improves readability.
Change-Id: Iaf9b03fb81ec4fa2ca4f0a0b2f0b50491c6a9d80
Related: SYS#5838, OS#4008, OS#4009
It's better if we run ttcn3-bts-test with the default values, given
that they were significantly reduced some time ago.
Change-Id: Id97e848e5dfd0b6c504d06f62642511cfd5a0f66
Related: I7da3d0948f38e12342fb714b29f8edc5e9d0933d (osmo-bts)
Related: OS#4487
The first interference report may contain unreliable values, so we
ignore it and start the actual matching only after receiving it.
Change-Id: I44b0db6675ecf740fba7ad2a6882f86da018febf
Related: SYS#5313
Starting from [1] osmo-bts does average the interference levels as
defined by the Intave parameter before reporting over the PCUIF.
In TC_pcu_interf_ind we expect to receive an interference report
every 480ms (one SACCH period), so let's the Intave to 1.
[1] osmo-bts.git I3fbaad5dbc3bbd305b3ad4cb4bfb431a42cfbffc
Change-Id: I070b195af8c62454edd8de961cce6be2c120ae48
Related: SYS#5313
Otherwise they fail, because BS power control is normally not
permitted on the BCCH carrier (unless it's in power saving mode).
Change-Id: Ied3e38986690850f0323d4db072cf59b6975587e
Related: SYS#4918
Given that the test suite acts as the BSC, it's known in advance
which exact logical channel is going to be activated. Therefore,
it's not necessary to send an Immediate Assignment with the known
Channel Description IE over the Um interface (via L1CTL).
On the other hand, we may still want to validate the process of
dedicated channel establishment, involving the use of Immediate
Assignment procedure. So instead of doing this every time when
a ConnHdlr component needs to activate a logical channel, let's
split the existing logic into a separate test case - TC_est_dchan.
This change facilitates the goal of running test cases against
additional transceivers (not only against C0). Currently this
is not possible, because a ConnHdlr component has no access to
C0/AGCH when executed on Cx > 0.
Change-Id: I8df3db36f35190241735629a961f09d73bd0e5f5
The idea behind these test cases is to make sure that osmo-bts
does send RSL MEASurement RESult messages regardless of what
was received on SACCH: RR Measurement Report or SAPI=3 data.
Change-Id: I7d17d6e5f413f2de78db944f23ad731b81ad24cf
Set the executable name in each regen_makefile.sh explicitly with -e,
instead of having it set indirectly from the first .ttcn file. Make it
consistent by placing the name on top of each of these files.
Fix for warning:
ttcn3_makefilegen: warning: File `BSC_Tests.ttcn' was given more than once for the Makefile.
Related: OS#5252
Change-Id: I5ed03f8f3ed905483620dc7bae33b617bbb8507f
Make all regen_makefile.sh more readable and diff friendly by moving
each entry in FILES and CPPFLAGS_TTCN3 into separate lines. Order
entries alphabetically.
Related: OS#5252
Change-Id: I6b6866eb9f6ec6232e4ae434517457a4c8c1c050
Since recently, osmo-bts may not be restarting after each test. Which
means the supp-meas-info is not reset when test starts. Hence, some of
these tests started failing because a previous test set a value
different than the default one.
Change-Id: Iaa16b33781a8f490fc1cdbafda407755371dbe7f
These test cases can potentially break the IUT or cause weird/unexpected
behavior. Ensure that they are executed last, not affecting the others.
Change-Id: I167a9e6eb2e3fe1d9c73994c428d8419074d96c3
Fixes: I3b602ac9dbe0ab3e80eb30de573c9b48a79872d8
Related: OS#5245