Initial srsLTE support

2 tests (iperf3, ping) working against a full srs{UE,ENB,EPC} network
using ZeroMQ backend for RF (so no real RF support yet, that will come
next).

Related: OS##4295, OS#4296

Change-Id: I290c0d79258a9f94f00c7ff2e1c6c5579c0e32f4
diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py
index 457bfb3..c2faa36 100644
--- a/src/osmo_gsm_tester/suite.py
+++ b/src/osmo_gsm_tester/suite.py
@@ -25,6 +25,7 @@
 from .event_loop import MainLoop
 from . import osmo_nitb, osmo_hlr, osmo_mgcpgw, osmo_mgw, osmo_msc, osmo_bsc, osmo_stp, osmo_ggsn, osmo_sgsn, esme, osmocon, ms_driver, iperf3, process
 from . import run_node
+from . import srs_epc
 
 class Timeout(Exception):
     pass
@@ -362,6 +363,18 @@
     def run_node(self, specifics=None):
         return run_node.RunNode.from_conf(self.reserved_resources.get(resource.R_RUN_NODE, specifics=specifics))
 
+    def enb(self, specifics=None):
+        enb = enb_obj(self, self.reserved_resources.get(resource.R_ENB, specifics=specifics))
+        self.register_for_cleanup(enb)
+        return enb
+
+    def epc(self, run_node=None):
+        if run_node is None:
+            run_node = self.run_node()
+        epc_obj = srs_epc.srsEPC(self, run_node)
+        self.register_for_cleanup(epc_obj)
+        return epc_obj
+
     def osmocon(self, specifics=None):
         conf = self.reserved_resources.get(resource.R_OSMOCON, specifics=specifics)
         osmocon_obj = osmocon.Osmocon(self, conf=conf)
@@ -481,4 +494,12 @@
         raise RuntimeError('No such BTS type is defined: %r' % bts_type)
     return bts_class(suite_run, conf)
 
+def enb_obj(suite_run, conf):
+    enb_type = conf.get('type')
+    log.dbg('create ENB object', type=enb_type)
+    enb_class = resource.KNOWN_ENB_TYPES.get(enb_type)
+    if enb_class is None:
+        raise RuntimeError('No such ENB type is defined: %r' % enb_type)
+    return enb_class(suite_run, conf)
+
 # vim: expandtab tabstop=4 shiftwidth=4