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
diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py
index c9721d1..e657b04 100644
--- a/src/osmo_gsm_tester/obj/enb_srs.py
+++ b/src/osmo_gsm_tester/obj/enb_srs.py
@@ -22,6 +22,7 @@
from ..core import log, util, config, template, process, remote
from . import enb
+from . import rfemu
def rf_type_valid(rf_type_str):
return rf_type_str in ('zmq', 'uhd', 'soapy', 'bladerf')
@@ -60,6 +61,7 @@
super().__init__(suite_run, conf, srsENB.BINFILE)
self.ue = None
self.run_dir = None
+ self.gen_conf = None
self.config_file = None
self.config_sib_file = None
self.config_rr_file = None
@@ -221,6 +223,8 @@
config.overlay(values, dict(enb=dict(rf_dev_args=rf_dev_args)))
+ self.gen_conf = values
+
self.gen_conf_file(self.config_file, srsENB.CFGFILE, values)
self.gen_conf_file(self.config_sib_file, srsENB.CFGFILE_SIB, values)
self.gen_conf_file(self.config_rr_file, srsENB.CFGFILE_RR, values)
@@ -243,4 +247,14 @@
def running(self):
return not self.process.terminated()
+ def get_rfemu(self, cell=0, dl=True):
+ cell_list = self.gen_conf['enb'].get('cell_list', None)
+ if cell_list is None or len(cell_list) < cell + 1:
+ raise log.Error('cell_list attribute or subitem not found!')
+ rfemu_cfg = cell_list[cell].get('dl_rfemu', None)
+ if rfemu_cfg is None: # craft amarisfot by default:
+ raise log.Error('rfemu attribute not found in cell_list item!')
+ rfemu_obj = rfemu.get_instance_by_type(rfemu_cfg['type'], rfemu_cfg)
+ return rfemu_obj
+
# vim: expandtab tabstop=4 shiftwidth=4