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