Commit Graph

57 Commits

Author SHA1 Message Date
Andre Puschmann 0a5011047a enb,ms: refactor base_rate selection for ZMQ
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
2020-06-10 15:41:46 +02:00
Andre Puschmann acdf416796 enb_amarisoft: decrease max rate for TM2+
perhaps additional CRS for MIMO up to 25 PRB result in slighlt lower max rate

Change-Id: I128085e308f400622683905245d42f92a631e81d
2020-06-10 15:41:46 +02:00
Andre Puschmann 10ed8dc3a7 enb_srs: add extra head room for max rate with 6 PRB in MIMO mode
the overhead with 6 PRB and MIMO is a bit higher when compared
to other PRBs resulting in lower achievable throughput

Change-Id: I63888435553bba4f7be88cc745e24472921a7fb4
2020-06-10 15:41:46 +02:00
Andre Puschmann 419a662f76 ms_srs: refactor UE state getter functions
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
2020-06-10 15:40:00 +02:00
Andre Puschmann 3c978fe0f2 ms_srs: add PRACH, reestablishment and paging counter
this allows to query the number of PRACH attempts and paging
messages received during a test

Change-Id: I592ace7c38d98bfbbec5001a3cdfffe21733ef9f
2020-06-10 10:12:49 +02:00
Andre Puschmann aa7b5b7751 epc: add run function to EPC
this allows, for example, to run a ping originating from the core to the UE

Change-Id: Id86c61cbccd41b77f94f125d8d127e2ab5e46cd9
2020-06-10 10:12:49 +02:00
Andre Puschmann 61d150b115 enb: refactor ue_max_rate() and move helper function back to sub classes
It turned out that the Amarisoft and SRS eNB scheduler produces
slightly different maximum data rates for both UL and DL.

Change-Id: I30fa7006906d101c53ba586fb06bced3945aa960
2020-06-10 10:12:49 +02:00
Pau Espin 166dc10769 testenv: Support test overlaying a directory to look for templates
This way tests which require a very specific config file can override
specific template files used by object classes.

Change-Id: I65d1b1e826d2d430ee83810d998b98d0ccaa07cd
2020-06-04 20:03:07 +02:00
Andre Puschmann eb7ced1367 ms_srs: sum bitrates for all component carrier
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
2020-05-29 09:55:59 +00:00
Andre Puschmann 346ffd9192 enb: remove freq config for zmq operation
specifiying the rx/tx_freq for the eNB is optional. But when
it's done it needs to be correct. There seems to be an issue
when mapping the freq[0-3] between srsENB and Amarisoft eNB.

So it's safe to just drop the config here altogether.

Change-Id: I70f5776173c2df5894031f68df2f6c3a900b79f8
2020-05-29 09:55:40 +00:00
Pau Espin eddff7c03c ms_{srs,amarisoft}: Support selecting tgz based on run_node's run label
Change-Id: I2c4cab02fa34c7acc7e57c3fec5a42c26d2a9208
2020-05-28 13:13:05 +00:00
Pau Espin b452ed6db1 enb_{srs,amarisoft}: Support selecting tgz based on run_node's run label
Change-Id: Ie1c8ccd2ffc9680bd72159872f3de0d59f1b9b0b
2020-05-28 13:13:05 +00:00
Pau Espin 5f826be20a ms_{srs,amarisoft}: Reuse run_node to hold run info
Change-Id: Ifdea48fed0bfc152131c53b87c34b4514c632917
2020-05-28 13:13:05 +00:00
Pau Espin 1abff4e260 enb: Reuse run_node to hold run info
Change-Id: If396940f154813d42ff3d3364c44b8979179127f
2020-05-28 13:13:05 +00:00
Pau Espin e921995ce7 epc_{amarisoft,srs}: Support selecting tgz based on run_node's run label
Change-Id: I90b8dab8bdc9980a7d2486d890cff183c07f1809
2020-05-28 13:13:05 +00:00
Pau Espin 6e0b6fb074 Support identifying different tgz files based on run_label attribute
tgz files in trials can be categorized in subdirectories, allowing to
select different bianry files at runtime based on the target run node
which is going to run them. This way for instance one can have a binary
linked against libs for eg. CentOS under run_label "centos/" or an ARM
target under "arm", and then use "run_label: arm" on the resource using
it.

Change-Id: Iaf2e97da3aff693395f44f0e93b184d4846cf6da
2020-05-28 13:13:05 +00:00
Andre Puschmann 26890f3c31 ms_srs: wait 6s after stopping srsUE
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
2020-05-26 13:55:39 +00:00
Andre Puschmann 71b430c22f enb: fix UL max rate calculation
don't double the maximum rate for UL traffic in MIMO since
we are only using MIMO in the downlink

Change-Id: I018e8ba8cb822a4bd57b8d0e420dd496172ac229
2020-05-26 13:55:39 +00:00
Andre Puschmann 1a96ecdeb6 ms_srs: allow + operator when specifying CSV columns
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
2020-05-26 13:55:39 +00:00
Andre Puschmann 2cfa4a3d3c ms_srs: add max rolling average as metric operation
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
2020-05-26 13:55:39 +00:00
Pau Espin 6f31de823e enb_srs: Use RemoteProcessSafeExit instead of RemoteProcess
It is known that sometimes srsENB hangs until it is killed -9, specially
when using ZMQ backend. Let's use RemoteProcessSafeExit in order to make
sure it is killed in an acceptable time (srs binaries use some
preventive sigalarm 6 seconds auto-kill procedure, hence we use 7
seconds) before next test is started and potentially try to re-use the
same ENB and fails due to previous one still running.

Change-Id: I905bd753c7822feccf1c1bb59752698f1d1b85f0
2020-05-25 16:12:09 +02:00
Pau Espin 0d64f16544 Replace RemoteProcessFixIgnoreSIGHUP with RemoteProcessSafeExit
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
2020-05-25 15:52:59 +02:00
Pau Espin d84a8387be 4g: Pass max bitrate to iperf3
Otherwise bitrate 0 (unlimited) does weird stuff, like iperf3 hanging
forever in DL.

Change-Id: I631243cce132923d9024f8161cf96161c51cdae5
2020-05-25 14:23:39 +02:00
Pau Espin f4ab97fb4a iperf3: Support runing test with bidirectional data
Change-Id: Ia6f12c65fd3ea26d412997741cb8685a9646af43
2020-05-25 14:11:07 +02:00
Pau Espin 3a0dea682e iperf3: Support using configuring UDP protocol
Change-Id: I0b3545847b01ae3d029881f243fea276f0fa39de
2020-05-22 15:20:27 +02:00
Pau Espin 27b609f4d3 ms_srs.py: Fix typos in comments
Change-Id: Iaa09ed696eb58e63c366f26e94c66f27b5f733bf
2020-05-21 13:21:56 +02:00
Pau Espin b1d8d30526 esme: fix smpplib imports
smpplib modules are used in several places, so it's not enough to import
them in the constructor since they are only imported for the function
scope.

Change-Id: I6511e28c7ef6aa86e85a7e03aa10a67d87896588
2020-05-11 11:55:48 +02:00
Pau Espin 620d2ee5ba ms_srs: fix numpy import
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
2020-05-11 11:52:14 +02:00
Pau Espin 2a2d846430 obj: Fix objects placing their content in suite rundir instead of test rundir
Change-Id: I421d35473575086b93d5c8db98b909cc6c83d896
2020-05-11 10:56:52 +02:00
Pau Espin 18ff1e6e25 ms_driver: Fix typos after recent refactorings
Change-Id: Id9709743648d60792ec64c97ab1bc6811c4e3e1e
2020-05-07 17:10:51 +02:00
Andre Puschmann d27b3ba2e2 srs_{enb,ue}: don't set sc12 as OTW format
Change-Id: I7fc20d998b082f5c37b2451f1900161f997954b1
2020-05-06 20:21:18 +00:00
Andre Puschmann 549826d424 enb: add rf_port to cell list param
we need to make the rf_port a param in the cell list because for CA with
two cells on different EARFNCs, the RF port is different

for two cells without CA on the same EARFCN the RF port is the same

so we need to be able to configure it

Change-Id: I32e83cc34811588757104c5ce1cae7277402addd
2020-05-06 20:21:18 +00:00
Pau Espin eaefe6b533 suites/4g: Introduce sample handover test
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
2020-05-06 16:24:53 +02:00
Pau Espin a8b8990bb8 rfemu_amarisoftctrl: import websocket module on first use
Change-Id: I568af52ffb7ac57222697f5d861a532c0e2a70de
2020-05-05 18:26:31 +02:00
Pau Espin 326091555b powersupply_sispm: import sispm and usb modules on first use
Change-Id: I6045bb739e5c69972014a9d27be3a24b7ad61c9a
2020-05-05 18:26:31 +02:00
Pau Espin a1daa51665 ms_ofono: import pydbus and GLib modules on first use
Change-Id: I754e1290eb5593c0ef168f74747f42db1b50f16c
2020-05-05 18:26:31 +02:00
Pau Espin 45149393e7 esme: import smpplib module on first use
Change-Id: Icc92937fdada9210f788805dbc42b80014e345e8
2020-05-05 18:21:58 +02:00
Pau Espin cc89cd0c5f ms_srs: import numpy module on first use
Change-Id: I2ce974954028bdbc7bc1561c4538b909edee2cb1
2020-05-05 17:49:27 +02:00
Pau Espin a442cb8e5f Update obj classes in obj/ to use testenv instead of suite_run
Change-Id: Idf41243a497de7bc507b9f1cd1b38640f456f815
2020-05-05 13:56:01 +02:00
Pau Espin 1ee5ec5db2 Move object subclass instance allocation logic out of suite.py/resource.py
This way we get rid of object related content in resource.py and we can
finally move it to core/ in next commit.

Change-Id: Ia5b861115ae3ae1b90149863c4265dcc730b8cd4
2020-05-04 17:22:53 +02:00
Pau Espin ea8c3d4b12 Generate schemas dynamically from pieces provided by each object class
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
2020-05-04 16:36:33 +02:00
Andre Puschmann 333b868492 ms_srs: fix ZMQ radio arguments for CA and MIMO configs
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
2020-04-21 15:05:51 +02:00
Andre Puschmann e2a6da6b48 enb: refactored rf_args handling for ZMQ-based radio
this patch moves the rf_dev_args creation for both eNB types
into the eNB base class, since they are identical.

the patch also fixes the arguments for all CA and MIMO configurations

Change-Id: I8ca3ed83e65dc07927385267e5970bc4f5b120d5
2020-04-21 15:05:51 +02:00
Pau Espin a6d6304afc srsue, amarisoft/srsENB: Support setting rx/tx_gain attributes
Change-Id: I4228ba8746a54db4c17443718c01069d431361b9
2020-04-20 16:10:57 +02:00
Pau Espin 491f77cd0f enb: Add attribute to set 'id'
Change-Id: I8ce296c7875d557062dc13e7093ce0400050f2ce
2020-04-20 16:10:57 +02:00
Pau Espin d4404d54c0 enb: Implement initial RF emulation API
Two implementations are provided:
* Amarisoft Ctrl interface (websocket)
* Mini-Circuits Programmable Attenuator (HW, HTTP API) [1]

in Amarisoft ENBs, if no rfemu is configured explicitly, the Ctrl
interface one is used by default, while still being possible to use the
HW one.

[1] https://www.minicircuits.com/pdfs/RC4DAT-6G-60.pdf

Change-Id: Ie98a3fb9bcd2b87b96ecbb5b79e0f53981892a32
2020-04-20 13:30:27 +02:00
Pau Espin a65b505adc powersupply.py: Fix import module line typo
Recent commit changed the import line so it runs only when required, but
added a typo making tests uing it fail.

Change-Id: Id3e5c16adc763a9b79cc464937c541abd15f98de
Fixes: 2b959580b9
2020-04-19 18:56:43 +02:00
Pau Espin f46ae22b3d enb: Add cell_list attribute
It allows configuring each cell_list up to a maximum of 'num_cells'.

Change-Id: I4fd30a3e37789b76bfaddc2beba1815154daab7f
2020-04-17 20:08:28 +02:00
Pau Espin 2b959580b9 powersupply: Import sublcass module only if used
This way we avoid unconditionally importing all subclass dependencies,
and make them optional based on whether the setup has devices of that
type or not.

Change-Id: I0d2f8b26364b45f0d837cc51078784d1d0fa7ea1
2020-04-17 16:53:17 +02:00
Andre Puschmann 4b5a09a83c enb: add optional gtp_bind_addr paramter to enb class
this allows to optionally specify a the GTP bind_address for a enb object
in the resources.conf

this address is then used for binding the listening socket for gtp connections
which, in turn, allows to run the enb and epc on the same host.

when gtp_bind_addr is not specified, addr is used by default

this is especially useful if eNB and EPC run on the same host
and ZMQ is used for RF between eNB and UE. Two eNB addresses
are needed in this case, one bind address and one "remote-accessable"
address for the UEs ZMQ radio to connect to

Change-Id: I4fe38f31401428ed3e74e1d0b64960f0af122d37
2020-04-16 22:03:09 +02:00