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_amarisoft.py b/src/osmo_gsm_tester/obj/enb_amarisoft.py
index 996af19..0b748e0 100644
--- a/src/osmo_gsm_tester/obj/enb_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/enb_amarisoft.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 ('uhd', 'zmq')
@@ -62,6 +63,7 @@
self.run_dir = None
self.inst = None
self._bin_prefix = None
+ self.gen_conf = None
self.config_file = None
self.config_sib1_file = None
self.config_sib23_file = None
@@ -209,6 +211,8 @@
config.overlay(values, dict(trx=dict(rf_dev_type=values['enb'].get('rf_dev_type', None),
rf_dev_args=values['enb'].get('rf_dev_args', None))))
+ self.gen_conf = values
+
self.gen_conf_file(self.config_file, AmarisoftENB.CFGFILE, values)
self.gen_conf_file(self.config_sib1_file, AmarisoftENB.CFGFILE_SIB1, values)
self.gen_conf_file(self.config_sib23_file, AmarisoftENB.CFGFILE_SIB23, values)
@@ -233,4 +237,19 @@
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:
+ rfemu_cfg = {'type': 'amarisoftctl',
+ 'addr': self.addr(),
+ 'ports': [9001]
+ }
+ if rfemu_cfg['type'] == 'amarisoftctl': # this one requires extra config:
+ config.overlay(rfemu_cfg, dict(cell_id=cell_list[cell]['cell_id']))
+ rfemu_obj = rfemu.get_instance_by_type(rfemu_cfg['type'], rfemu_cfg)
+ return rfemu_obj
+
# vim: expandtab tabstop=4 shiftwidth=4