Commit Graph

110 Commits

Author SHA1 Message Date
Pau Espin 410912333e 4g: Introduce ZMQ GnuRadio stream broker
srsENB currently creates 1 zmq stream (1 tx, 1 rx) for each cell (2 if
MIMO is enabled). Each cell transceives on a given EARFCN (and several
cells can transmit on same EARFCN).

However, for handover test purposes, we want to join all cells operating
on the same EARFCN to transceive on the same ZMQ conn, so that an srsUE
can interact with them at the same time (same as if the medium was shared).
Furthermore, we want to set different gains on each of those paths
before merging them in order to emulate RF conditions like handover.

In order to do so, a new element called the Broker is introduced, which
is placed in between ENBs and UEs ZMQ conenctions, multiplexing the
connections on the ENB side towards the UE side.

A separate process for the broker is run remotely (ENB run host) which
listens on a ctrl socket for commands. An internal Broker class is used
in osmo-gsm-tester to interact with the remote script, for instance to
configure the ports, start and stop the remote process, send commands to
it, etc.
On each ENB, when the rfemu "gnuradio_zmq" rfemu implementation is selected
in configuration, it will configure its zmq connections and the UE ones to
go over the Broker.

As a result, that means the UE zmq port configuration is expected to be
different than when no broker is in used, since there's the multiplexing
per EARFCN in between.

In this commit, only 1 ENB is supported, but multi-enb support is
planned in the future.

The handover test passes in the docker setup with this config:
"""
OSMO_GSM_TESTER_OPTS="-T -l dbg -s 4g:srsue-rftype@zmq+srsenb-rftype@zmq+" \
	"mod-enb-nprb@6+mod-enb-ncells@2+mod-enb-cells-2ca+suite-4g@10,2+" \
	"mod-enb-meas-enable -t =handover.py"
"""

and in resources.conf (or scenario), added:
"""
enb:
  ...
  cell_list:
    - dl_rfemu:
       type: gnuradio_zmq
    - dl_rfemu:
        type: gnuradio_zmq
"""

Note that since the broker is used, there's not need for mod-srsue-ncarriers@2
since the broker is joining the 2 enb cells into 1 stream on the UE side.

Change-Id: I6282cda400558dcb356276786d91e6388524c5b1
2020-10-15 12:34:36 +00:00
Pau Espin 4b7c585561 ms: Fix and use ms msisdn() getter
The getter method was named the same as the itnernal field, and hence
when used it would fail since the intenral field would be sleect and
fail to be called.

Change-Id: I2f631eb6256eb0e065f41d5b7531395c4a054cd8
2020-10-15 14:01:27 +02:00
Pau Espin 92a29d6b7e enb/ue: Assign zmq binding ports dynamically at runtime
ports are assigned increasingly in blocks in the range 2000-2200.

Change-Id: If2abddeb2ad6819de4f3ce64daaf00d2f527f9d2
2020-10-15 11:57:01 +00:00
Andre Puschmann e3f40f9904 rfemu_srsenb_stdin: use negative dB value to set attenuation
the logic for the RF emulator on the command line is, like the
Amarisoft equivalent, to set a negative gain value to express
attenuation. Therefore, the sign needs to be inverted.

Change-Id: I7b6ac611a9f711bbdc1570602bfd797a5346ab86
2020-10-13 18:05:28 +02:00
Andre Puschmann 54307cbf09 {enb,epc,ms}_srs: remove uneeded class variable
self.kpis is define in base class

Change-Id: I49c9c9cdf7bc31270d3cfe182a79b197a742dd2c
2020-10-13 17:57:38 +02:00
Pau Espin 1f46d24935 Introduce RFemu stdin implementation for srsENB
Change-Id: I5487dec3691cbf424306369f94f337ed34a10c70
2020-10-12 20:46:58 +02:00
Andre Puschmann b5f0444021 srs{enb,ue}: add rf_dev_sync option to config templates
pass-through the option so they can be used in templates

just concatenate with rf_dev_args for srsLTE eNB/UE, arguments
parsing will handle them

Change-Id: I3818026c159780f29968888f547163cdf730afad
2020-10-12 17:27:25 +02:00
Andre Puschmann c489f190be enb_amarisoft: add rf_dev_sync option to specify the sync type
this allows to specify "external_clock" for example to use
the external REF input of an USRP

Change-Id: Ie066993440840cbd2c18e8f0c0c577b92ac7092d
2020-10-12 16:47:11 +02:00
Andre Puschmann e3a1910915 ms_srs: add freq_offset as resource param
this allows to specify a freq tuning offset in Hz in the MS resource config

Change-Id: Iab726edd27e890d2c2dddbea91afe80d8a5068aa
2020-10-06 09:52:46 +02:00
Andre Puschmann 182109db4d srslte_common: fix indent in whole file
Change-Id: I8aee79e9d451761dde8f35f84d75483dc4e23040
2020-10-05 20:03:13 +02:00
Andre Puschmann f4fb48af9a srslte_common: add get_num_phy_errors() method
the get_num_phy_errors() uses the external KPI analyzer module
to calculate the number of PHY layers errors in a vector of log metrics

Change-Id: I0c8de87e7f83f986e288585640ce56847959c497
2020-10-05 15:24:17 +02:00
Andre Puschmann c1c2f3d16f enb_amarisoft: reduce max achievable UL rate for 100 PRB
Change-Id: Ib7a0b8e2948cdf6c0a15d4ad2bf7d218a6b28ea2
2020-10-05 13:49:12 +02:00
Andre Puschmann 0e00f38aa2 lte: update UHD device args for MIMO usage
the USRP B210 device args were not ideal for MIMO configs for
both Amarisoft and srsLTE.

Change-Id: I3785bb96eb7c10a6b10b3d1a86fa71d1f787a7a3
2020-10-05 13:49:12 +02:00
Andre Puschmann a9fb751e69 ms_srs: fix ZMQ config for 4xCA
add missing freq config for 4xCA

Change-Id: I88a389f5b03d6b55ff5ef403d5107c648a11686f
2020-10-05 13:49:12 +02:00
Andre Puschmann 99fb78bfca {enb,epc,ms}_srs: refactor start/stop and KPI helpers
refactor some of the functionality to srslte_common

Change-Id: I2ff36df6f1a07ed8ddac39d296d62fe44a215283
2020-10-05 13:49:12 +02:00
Andre Puschmann 3d3bbcb3ae reduce max expected UL rate for 4xCA 100 PRB
this needs to be reverte once extendedBSRs are supported

Change-Id: I8432c744868afe43e2b150f6fcecd8cb3a0458a3
2020-10-05 13:49:12 +02:00
Andre Puschmann 645b5ccd8e enb_amarisoft: temporary reduce max UL rate on 2nd CC
this is due to a confirmed bug in Amarisoft eNB. will
be reverted as soon as the fix is released.

Change-Id: I182b46cf9e6c2f428c9535edf3c7df3daa912f18
2020-10-05 13:49:12 +02:00
Andre Puschmann 4db88de2fa enb_srs: expose DL AWGN channel modifier for srsENB
we've added the modifier to configure Amarisoft eNB channel
model. This patch enables it for srsENB.

Change-Id: I30e65d0431b2d2792986128287caf8b23a22b2c1
2020-09-20 10:01:17 +00:00
Andre Puschmann 7d3b83ee93 enb: incorporate number of carriers into ue_max_rate() API
this allows the enb to calculate the max rate in a single
spot rather than each test individually

Change-Id: Id225a986e0b271cf9c057c74c9aefd6c7f3d39d6
2020-09-20 10:01:17 +00:00
Andre Puschmann 9bcbb9aea7 ms_srs: trim leading zeros in UE metrics when calculating min_rolling_avg
this avoids a false negative detection when the UE attach takes a bit
longer and the first seconds all zeros are reported in the CSV

the HO test, for example, would fail in such a case as it expects
no zero TP over the course of the experiment.

Change-Id: I96dab17bb19249504dedda6659aed5eac0a65a26
2020-08-27 15:37:54 +02:00
Andre Puschmann 0cfc08436d enb: expose RRC inactivity timer
allow the user to specifiy the RRC inactiviy timer used in the eNB.
set the default value to 20s

Change-Id: I6a264b8dee893b883d40a48831cbb47eb15e1e7b
2020-08-27 15:37:54 +02:00
Andre Puschmann d899cf4b4e rfemu_amarisoft: handle exception and log event if WS is closed
the WS is closed if the eNB process dies. this patch will log an
event but not stop the experiment.

Change-Id: I0fafc7e38954400540375d51813e96500700f50c
2020-08-27 15:37:54 +02:00
Andre Puschmann 58422c5e87 enb_srs: add sleep after stopping srsENB to allow log flush
add similar concept used in the UE to allow the process to flush
the logs

Change-Id: I9f8341869f89cd7ae845072b9da4f6070fa2d242
2020-08-27 15:37:54 +02:00
Andre Puschmann 053ee5fbb7 iperf3: increase additional wait time for iperf client
we've noticed that the Iperf client times out too soon in
some experiment. It seems that this happens with ZMQ if
the RAT is too slow (slower than realtime) and the eNB buffers
too much data. This causes iperf to still receive DL data
for example long after the configured runtime.

Change-Id: I9b823ab22812c96920d54fb7342c8d4c578d5270
2020-07-15 11:48:23 +02:00
Pau Espin 03fab0922e iperf3: server: Avoid copying logfile during cleanup if already copied previously
Change-Id: I44e28f326fd476d27eb021922d38e9ca913aec69
2020-07-13 19:13:55 +02:00
Pau Espin 6b9a50e2e1 iperf3: Avoid creating empty log file
Since a while ago, we avoid by default using the --logfile param to log
the json output to a different file, in order to stay compatible with
older versions of iperf3.
However, the local logfile was still being created, and was not
overwritten with the remote file with content because there's none
created remotely (due to reasons explained above).

Change-Id: I218ec28dc65febc7bd083d6d15854319bf4f3daf
2020-07-13 19:07:29 +02:00
Pau Espin 0f7f265114 4G: Add milenage support
Change-Id: I4c1fb9bfec9927f2bfa29e6b27959323838f59e5
2020-07-13 18:33:53 +02:00
Andre Puschmann 008fd3194b enb_amarisoft: add support for PHY signal log file
when phy.signal=1 is set in the log_options, the eNB will dump
a binary file that needs to be copied back as well

Change-Id: I63d13cb74572ac065d5a3fcfb1632552d0a6dbc6
2020-07-09 13:43:00 +00:00
Andre Puschmann 69dd689644 rfemu_minicircuits: reset attenuation to zero in dtor
this avoids issues when the channel emulation stops in the middle
of a high attenuation values and the device is left in this state.

Change-Id: I9aeafc68bf81b8932aac4cb28040b9aea6bfcbdb
2020-07-09 13:43:00 +00:00
Andre Puschmann 955249d39d enb_amarisoft: add option to enable and configure DL AWGN channel
expose option to enable DL AWGN noise and make SNR configurable

Change-Id: Ib248e87e5abd855d4c974eab42ec40828c6e1d40
2020-07-09 13:43:00 +00:00
Pau Espin 969a4eebae Introduce stress tool object
This object allows to run the "stress" cmdline program in the background
on the specifies run_node, to simulate system load.

To run stress, a test can simply do:
stress = tenv.stress(epc.run_node())
stress.start(cpu_workers=2, mem_workers=1, io_workers=1)

And the test environment will remember to stop it when the test finishes.

Change-Id: I21023e6c64c48109f294291bfe3d8d8f4e1de038
2020-07-02 13:22:48 +02:00
Andre Puschmann 2ebcff934d enb_amarisoft: register log options as config scheme
allows setting those in scenario files

Change-Id: Idefd3c628441ededbee9411117ec426dd585eae0
2020-07-01 12:28:31 +02:00
Andre Puschmann f8c99a863d ms_srs: add min_rolling_average calculation
useful metric to detect low/zero downlink throughput for longer
time periods

Change-Id: I77a82a68689bc6c21cb9227dc9e7616d03e2b547
2020-07-01 10:52:09 +02:00
Andre Puschmann ba40facbaf enb_srs: remove comment introduced through copy+paste
Change-Id: I7d14ae5c17bd1cd1c1b23657dc60dc331519e32c
2020-07-01 10:52:09 +02:00
Andre Puschmann f14ff812ce {ms,enb}_srs: add method to read kpi from a test run
this method uses the kpi_analyzer module for analyzing
stdout, CSV metrics and the logfile (if present).

if the module can't be loaded, no KPI will be added.

Change-Id: I28226a375f9ac4e08424c488062ae6a74a19af92
2020-07-01 10:52:09 +02:00
Pau Espin 315b078fe8 Drop using patchelf out of PATH
New patchelf 0.11 release is out and it has fixes hitting us in both 0.9
and 0.10 on different binaries. So let's simply requiring having
patchelf 0.11 in all cases and be done with it (actually, if not running
4G binaries, using 0.9 is enough).

Related: OS#4389
Change-Id: I2701e46e7710db4c923a68e6b3a2f3c7b126f356
2020-06-25 20:04:29 +02:00
Andre Puschmann 82ced3fb1d {enb,epc,ms}_srs: expose log.all_level parameter
expose paramter to set log level, use warning as default

Change-Id: I4e77e5351399aefef47a309c82b8805e2c6022c5
2020-06-23 16:41:00 +02:00
Andre Puschmann 7c1c8d62e8 ms_srs: fix scp-back-metrics routine
every call to verify_metrics would copy back metrics again. see log here:

23:29:22.149299 run                 srsue(pid=31521): Terminating (SIGINT)
23:29:22.368263 run                 srsue(pid=31521): Terminated: ok {rc=0}
23:29:28.401035 run      scp-back-metrics(pid=32265): Launched
23:29:29.423083 run      scp-back-metrics(pid=32265): Terminated: ok {rc=0}
23:29:29.490275 run      scp-back-metrics(pid=32271): Launched
23:29:30.513852 run      scp-back-metrics(pid=32271): Terminated: ok {rc=0}
23:29:30.550862 run      scp-back-metrics(pid=32277): Launched
23:29:31.573962 run      scp-back-metrics(pid=32277): Terminated: ok {rc=0}

this patch only copies back metrics only once. also make sure that, similar
to logs, metrics are always copied back at the end of the run even if they
are not used for metrics checking. this is needed to run the plotting
script.

Change-Id: Ie7c156a5b2c8768bf90ff8e86515976e0d454c25
2020-06-23 16:41:00 +02:00
Andre Puschmann 55b455cbf6 iperf3: add getter to retrieve received bitrate
Change-Id: Id5676ce002cab6d52480b9b0f996f3065fd5dda6
2020-06-23 16:41:00 +02:00
Andre Puschmann 0957e9e095 enb: add getter for number of cells of an eNB
In order to set up the channel emulator we need to calculate the total
number of RF channels that a eNB has from within a test.

Change-Id: If641993033eb5dcdc6e2d6afdc8426ed322241ca
2020-06-23 16:41:00 +02:00
Andre Puschmann 219ec75aa9 iperf3: add getter to read the actual run time of an iperf client run
this is helpful to run some action for the exact run time of an iperf3
session. note that if no time spec is given when calling
"prepare_test_proc()", a modifier could set the runtime of an DL experiment
to an arbitrary value so we need to have a mechanism to read
the actual time from within a test

Change-Id: I484a0add322ffd269a1e9df72a00cf348950b268
2020-06-23 16:41:00 +02:00
Pau Espin 14bb5ff9de ms_osmo_mobile.py: Fix missing sublcass implementation of abstract MS methods
Change-Id: Icddab08c84ef97924d10801d7128158f515bcd01
2020-06-17 12:29:03 +02:00
Pau Espin 5680255fb5 iperf3: Add support for setting TOS
Change-Id: I3ccc249ad1c9598c606303c52eff6823f45afa7b
2020-06-16 10:04:04 +00:00
Pau Espin 229f11647e iperf3: Refactor iperf3cli popen arg list generation
Change-Id: I10ab737e1317a52b6ccbd0de2470a9cf0c90c934
2020-06-16 10:04:04 +00:00
Andre Puschmann be50eae49b ms_srs: fix additional_args init
regressions after porting to list. init to new empty list

Change-Id: I06f370462934ca35f3aa13bbfcd9e5fc3df91895
2020-06-15 22:12:46 +02:00
Pau Espin e592de8056 srs: Convert additional_args attr to list to allow combining different params
Change-Id: I4b371332cd6fbe11b98c85c79a6f8fdcc776a57b
2020-06-15 17:31:23 +02:00
Andre Puschmann f678c4dfec iperf3: increase extra timeout to 30s
10s was too short and has still caused tests to fail because they were
stopped just before the iperf finished.

30s seems to be enought and has passed multiple times so far

Change-Id: I80b732a060356aa98882ff0e8b5debaf623ba0fb
2020-06-15 15:09:37 +00:00
Andre Puschmann 8b1547b562 rfemu: add max attenuation getter
this allows to query the maximum channel attenuation from within a test case

Change-Id: I35f7cb188790c59bbf2450f78c663fbc9440e406
2020-06-15 15:09:37 +00:00
Andre Puschmann ccb632037d enb_amarisoft: fix typo
Change-Id: Ie898da5eae10af96c2bca6c2413bdff4a5160e9f
2020-06-15 15:09:37 +00:00
Andre Puschmann b0ebcbcf10 epc: refactor run_wait() method and rename to prepare_proc()
this refactor no longer enforces blocking operation of the process.
Instead it returns the process object to the caller who
can now run either proc.launch() for non-blocking operation
or proc.launch_sync() for blocking mode.

The non-block mode allos doing other stuff in the background,
for example controlling the rfemu while running a ping.

Change-Id: Ia6372e55a8829f722e40db537d9dfd63a94d1be9
2020-06-15 15:09:37 +00:00