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
diff --git a/src/osmo_gsm_tester/obj/enb.py b/src/osmo_gsm_tester/obj/enb.py
index 906164e..3b0ae8f 100644
--- a/src/osmo_gsm_tester/obj/enb.py
+++ b/src/osmo_gsm_tester/obj/enb.py
@@ -21,7 +21,7 @@
from ..core import log, config
from ..core import schema
from . import run_node
-from .rfemu_gnuradio_zmq import GrBroker
+from .gnuradio_zmq_broker import GrBroker
def on_register_schemas():
resource_schema = {
@@ -91,7 +91,9 @@
self._num_cells = None
self._epc = None
self.gen_conf = None
- self.gr_broker = None
+ self.gr_broker = GrBroker.ref()
+ self.gr_broker.register_enb(self)
+ self._use_gr_broker = False
def using_grbroker(self, cfg_values):
# whether we are to use Grbroker in between ENB and UE.
@@ -189,7 +191,8 @@
enb_bind_port = resourcep.next_zmq_port_range(self, num_ports)
self.assign_enb_zmq_ports(values, 'zmq_enb_bind_port', enb_bind_port)
# If we are to use a GrBroker, then initialize here to have remote zmq ports available:
- if self.using_grbroker(values):
+ self._use_gr_broker = self.using_grbroker(values)
+ if self._use_gr_broker:
zmq_enb_peer_port = resourcep.next_zmq_port_range(self, num_ports)
self.assign_enb_zmq_ports(values, 'zmq_enb_peer_port', zmq_enb_peer_port) # These are actually bound to GrBroker
self.assign_enb_zmq_ports_joined_earfcn(values, 'zmq_ue_bind_port', ue_bind_port) # This is were GrBroker binds on the UE side
@@ -197,8 +200,7 @@
self.assign_enb_zmq_ports_joined_earfcn(values, 'zmq_ue_peer_port', zmq_ue_peer_port) # This is were GrBroker binds on the UE side
# Already set gen_conf here in advance since gr_broker needs the cell list
self.gen_conf = values
- self.gr_broker = GrBroker.ref()
- self.gr_broker.handle_enb(self)
+ self.gr_broker.start()
else:
self.assign_enb_zmq_ports(values, 'zmq_enb_peer_port', ue_bind_port)
self.assign_enb_zmq_ports(values, 'zmq_ue_bind_port', ue_bind_port) #If no broker we need to match amount of ports
@@ -223,6 +225,7 @@
def cleanup(self):
'Nothing to do by default. Subclass can override if required.'
if self.gr_broker:
+ self.gr_broker.unregister_enb(self)
GrBroker.unref()
self.gr_broker = None
@@ -247,7 +250,7 @@
def get_zmq_rf_dev_args(self, cfg_values):
base_srate = self.num_prb2base_srate(self.num_prb())
- if self.gr_broker:
+ if self._use_gr_broker:
ul_rem_addr = self.addr()
else:
ul_rem_addr = self.ue.addr()
@@ -274,7 +277,7 @@
idx = 0
earfcns_done = []
for cell in cell_list:
- if self.gr_broker:
+ if self._use_gr_broker:
if cell['dl_earfcn'] in earfcns_done:
continue
earfcns_done.append(cell['dl_earfcn'])