Commit Graph

38 Commits

Author SHA1 Message Date
Andre Puschmann 6e081aa1dc amarisoft_enb: add NR support
this patch adds the ability to configure NR cells with
Amarisoft eNB. It adds the new DRB-NR template and updates
the normal enb.cfg template to allow using it as LTE only
or with NR cells (5G NSA).

Change-Id: Ia27bbc6db5920ce14bacabe8043601aa2adaa5fe
2021-05-05 14:26:56 +02:00
Andre Puschmann a54ca0b514 enb: add rx_ant param
Change-Id: Iada98fce3608808914562d9f7e2af2c230e03cae
2021-05-03 13:43:44 +02:00
Andre Puschmann f69b948148 enb.py: increase ZMQ trx timeout to 8s
increase value further to avoid failed tests due to load on system

Change-Id: I77b7864e7ef60faf0262dc24325915d73dd2d5a3
2021-03-16 18:10:28 +01:00
Andre Puschmann 0320ec2e95 enb.py: increase zmq trx timeout to 4000ms
with many parallel jobs running on one machine we should
relax the timeout a bit to avoid false positives.

Change-Id: Ib32a07559bd5a4b0165f6d3431c5ac57cc050f44
2021-03-16 18:04:40 +01:00
Andre Puschmann 3ce672594f enb,epc,ms: refactor KPI API
we previously mixed component specific and component agnostic APIs
(stdout vs. log file for example) for setting and retrieving KPI.

This patch propose to use a single abstract get_kpis() method for
all components that can be enriched with component-specific
stuff as desired.

In the case of srsLTE blocks, the main implementation will
remain in srslte_common() and is shared among srsENB/srsUE/srsEPC.

The KPI analyzer in srslte_common() extract and also manages
all three KPI sources (log, csv and stdout) independently.

In addition to the get_kpis() method that always returns a flat
dictionary, it also exposes get_kpi_tree() that return
a dict of KPI dicts that will be used for the Junit.xml generation.

Change-Id: I4bacc6b8a0cb92a581edfb947100b57022265265
2021-03-16 18:04:40 +01:00
Nils Fürste a81801558e enb: Set cipher and integrity via scenario file
This patch enables setting cipher and integrity algorithms
in Amarisoft eNB and srsENB via scenario files. If no
settings are defined following defaults are applied:
- Cipher algorithm: EEA0, EEA2, EEA1
- Integrity algorithm: EIA2, EIA1, EIA0

Example of setting cipher algorithms:
- 4g:srsue-rftype@uhd+srsenb-rftype@uhd+mod-enb-cipher@eea1+mod-enb-cipher@eea0+mod-enb-nprb@6

Change-Id: I595206b7d49016fb6d0aec175c828d9537c53886
2021-02-08 17:48:09 +01:00
Andre Puschmann 215bec2f3c enb: add abstract method stop()
implement as noop for Amarisoft eNB, srsENB will send q+Enter to stdin,
which is implemented in class srslte_common()

Change-Id: Ide606e1a6b523997215aa2fa39d4d56ae1f49181
2021-02-08 17:48:09 +01:00
Andre Puschmann f249a026a0 enb,ue,process: move stdout counter helper to process objects
this patch adds the stdout counter to count events happening
on the stdout (known from the UE already) to the common
process class so they can also be used from the eNB (and other objects)

In addition, we add a PRACH counter to be used for tests.

Change-Id: I434f072b8aa6f4dce9f90889c6b40832f6798ff8
2021-02-08 17:48:09 +01:00
Andre Puschmann bfd3fe659e enb: include name label and run_addr in enb remote path
this allows to quickly identify the enb host in the logs

Change-Id: I9c979de852a23041e43692e97ebcbfb389b52fdb
2021-01-07 16:30:25 +01:00
Pau Espin ef7256a138 enb: Support cells from different ENBs in ncell_list
Change-Id: I1242c56ff42caea06e7f96317def82064fd11325
2020-11-09 18:54:26 +01:00
Andre Puschmann a7fd39448c srsenb_rr.conf: add PCI, TAC and root_seq_idx as cell param
make sure to insert cell specific TAC, PCI and root seq ind
into cell config and do not depend on cell index for a particular
enb. This causes issues in multi-eNB setups.

Change-Id: I6642128a449a0562dd23f7fa393ff48ae2503006
2020-11-09 13:10:21 +01:00
Pau Espin 4acb45a381 enb: Fix non-1st ENB gnubreaker remote address
ENB was using its own address as a remote address when the broker is
used, which actually only holds true for the first ENB (since the broker
is currently run on the same host/address of the first ENB).

Change-Id: I5c83075d140632846c6d357152963754d16b4633
2020-10-23 14:29:03 +02:00
Pau Espin a2d4e2f54e enb: Name preferrably by label, use it in remote run dir
This way several ENB will place its config and logs into different dirs.

Change-Id: I9b0c74cd63bc3888f380c66d94271beafc0db915
2020-10-22 16:04:12 +02:00
Pau Espin fbb8611381 gnuradio zmq broker refactoring
First step towards support everal ENBs and installing the remote script
at runtime:

* The gnuradio broker class is moved to its own file, to decouple it
  from RFemu.
* The ENBs are registered earlier in the test so that the GrBroker knows
  when to start (delay start + setup until all ENBs have been configured).
* Handle ENBs internally as a list.

Change-Id: I4f1095bbc7ed0a816fe47caef44f7becadd9d737
2020-10-16 18:23:58 +02:00
Andre Puschmann d0682bad0f enb: add basic TDD config option
this patch adds the basic notion of FDD and TDD duplexing modes
to the eNB object. So far we've always assume FDD.

Since only Amarisoft eNB supports TDD, the required config
template changes, etc. are only applied there.

The patch also adds a scenario to enable the default TDD config.

Change-Id: I37216b5bfdf527d221913283b6c41d3c8fd6b500
2020-10-16 14:17:36 +00:00
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 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 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 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 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 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
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
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 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 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
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 1abff4e260 enb: Reuse run_node to hold run info
Change-Id: If396940f154813d42ff3d3364c44b8979179127f
2020-05-28 13:13:05 +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 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 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 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 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 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
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
Pau Espin e1a58bd8dd Move object classes used by tests into obj/ subdir
Change-Id: I0b2963cf00acd1f9036dca2e87aa3b87a0f8066d
2020-04-11 19:15:56 +02:00