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
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
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
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
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
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
Setting the log.ctx manually is not needed anymore and it's actually
harmful since all palces where it was used, a log.Origin already in path
was being passed, causing a origin loop.
Change-Id: I0511b9f7bc59e3c7f2269ff3155d0c95db58d063
Use tailored sample rate only use for 6, 50 and 75 PRB. For all other bandwidths,
we use the full LTE rate and downsample.
With 5.76e6 as base sample rate, for example, we had some issue during the tests like:
[zmq] Error: tx time is 0.178 ms in the past (7833600 < 7835648)
[zmq] Error: tx time is 0.011 ms in the past (7835520 < 7835648)
Using a higher sample rate seems to work better.
Change-Id: I53678587b2c5e0e5dccb1b55a328ad2f1a97fc4c
rename UE helper functions to query RRC connected/idle state
and adapt tests accordingly
also add helper to retrieve assinged IP address
Change-Id: I6cd057e34b4df6a1a73695355dd6406d7e039546
when calculating the dl and ul bitrate, it is required to take the
sum of all active component carriers since they are reported seperately
inside the CSV file
Change-Id: If30ec3f22ce5871f911433e6a6997e9c6e7ca210
we've only waited when running with ZMQ but in fact we need
to always wait because the UE may need some time to
gracefully exit, i.e. send the detach request and shut down correctly.
this is checked in cleanup() and verity_metrics(), so also before copying back
the CSV metrics. But we only wait once.
Change-Id: I47e46b8ccce41c9a62d2d6866260d22c927e710d
this allows to sum dl_brate and ul_brate and perform
the known operations, like max, average, etc. on both
UL and DL bitrate combined
For examples, with this CSV ..
time;cc;pci;earfcn;rsrp;pl;cfo;dl_mcs;dl_snr;dl_turbo;dl_brate;dl_bler;ul_ta;ul_mcs;ul_buff;ul_brate;ul_bler;rf_o;rf_u;rf_l;is_attached
1999;0;1;3400;-67;59;913;27;29;0.50;10432.000000;0;2.6;20;0.0;10848.000000;0;0.0;0.0;0.0;1.0
2998;0;1;3400;-67;59;912;28;29;0.50;2136.000000;0;2.6;20;0.0;1680.000000;0;0.0;0.0;0.0;1.0
3997;0;1;3400;-69;61;909;28;29;0.50;2136.000000;0;2.6;20;0.0;1680.000000;0;0.0;0.0;0.0;1.0
.. one could calculate the average of DL and UL bit rate with:
ue.verify_metric(1e6, operation='avg', metric='dl_brate+ul_brate', criterion='gt', window=test_duration)
and veriy that it's average is greater than 1 Mbit/s
Change-Id: I5c7c80bb107fa6b93b215176e6ebbb5dc8594860
this allows to calculate the rolling average over a specific
window in time and take the maximum of that
this is useful to get average value for 30s UDP traffic for
example from the UE metrics
Change-Id: I34bbfe08dbc1f27b86c9805f54649d44d697fa18
The API was doing far more stuff than its name indicated. Even more
important stuff, like making sure the process is killed at the end with
-9 after ssh connection is dropped.
Change-Id: If043ecab509b34b0922824d73db916196274ec64
numpy is used in a few places in the class code so we need to jhave it
available in a bigger scope, while still only loading when needed.
Change-Id: Iea66e623e1c980a62d691e20dacb00df99fdd78f
This test currently only works with AmarisoftENB and srsUE, because:
* srsENB has no handover support yet
* AmarisoftUE doesn't provide any known way to verify handovers.
As a result, it usually runs with following filters and modifiers:
amarisoftenb-rftype@uhd+srsue-rftype@uhd+mod-enb-ncells@2+mod-enb-meas-enable
The get_counter() API may change in the future based on information
available from other implementations.
Change-Id: I0dff4af7e3a89804a03842ad4a4d697bca3a9773
This way we benefit from:
* knowing which attributes are used/required by each object class and
subclass
* Having validation function definitions near the class going to use them
Change-Id: I8fd6773c51d19405a585977af4ed72cad2b21db1
similar to the eNB patches this fixes the CA and MIMO radio
parameters. In pricinple this could also be reused for the
AmarisoftUE but since we currently don't have a means to test
it I left it for a future commit.
Change-Id: I16b00009f97d61a9ab4715e5d727024661d3d0be