enb/ue: Assign zmq binding ports dynamically at runtime
ports are assigned increasingly in blocks in the range 2000-2200. Change-Id: If2abddeb2ad6819de4f3ce64daaf00d2f527f9d2
This commit is contained in:
parent
6628a50e4e
commit
92a29d6b7e
|
@ -184,6 +184,15 @@ class ResourcesPool(log.Origin):
|
|||
# BVCI=0 and =1 are reserved, avoid them.
|
||||
return self.next_persistent_value('bvci', '2', schema.uint16, lambda x: str(int(x)+1) if int(x) < pow(2,16) - 1 else '2', origin)
|
||||
|
||||
def next_zmq_port_range(self, origin, num_ports):
|
||||
# Allocate continuous num_ports port between 2000 and 2200. returns base port.
|
||||
# Assumption: base port is always an odd number.
|
||||
num_ports = num_ports if num_ports % 2 == 0 else num_ports + 1
|
||||
base_port = self.next_persistent_value('bvci', '2000', schema.uint16,
|
||||
lambda x: str(int(x)+num_ports) if int(x) < 2200 - num_ports else '2000', origin)
|
||||
return int(base_port)
|
||||
|
||||
|
||||
class NoResourceExn(log.Error):
|
||||
pass
|
||||
|
||||
|
|
|
@ -85,6 +85,7 @@ class eNodeB(log.Origin, metaclass=ABCMeta):
|
|||
self._num_prb = 0
|
||||
self._num_cells = None
|
||||
self._epc = None
|
||||
self._zmq_base_bind_port = None
|
||||
|
||||
def configure(self, config_specifics_li):
|
||||
values = dict(enb=config.get_defaults('enb'))
|
||||
|
@ -149,6 +150,9 @@ class eNodeB(log.Origin, metaclass=ABCMeta):
|
|||
def num_prb(self):
|
||||
return self._num_prb
|
||||
|
||||
def zmq_base_bind_port(self):
|
||||
return self._zmq_base_bind_port
|
||||
|
||||
#reference: srsLTE.git srslte_symbol_sz()
|
||||
def num_prb2symbol_sz(self, num_prb):
|
||||
if num_prb == 6:
|
||||
|
@ -166,16 +170,19 @@ class eNodeB(log.Origin, metaclass=ABCMeta):
|
|||
|
||||
def get_zmq_rf_dev_args(self):
|
||||
base_srate = self.num_prb2base_srate(self.num_prb())
|
||||
if self._zmq_base_bind_port is None:
|
||||
self._zmq_base_bind_port = self.testenv.suite().resource_pool().next_zmq_port_range(self, 4)
|
||||
ue_base_port = self.ue.zmq_base_bind_port()
|
||||
# Define all 8 possible RF ports (2x CA with 2x2 MIMO)
|
||||
rf_dev_args = 'fail_on_disconnect=true' \
|
||||
+ ',tx_port0=tcp://' + self.addr() + ':2000' \
|
||||
+ ',tx_port1=tcp://' + self.addr() + ':2002' \
|
||||
+ ',tx_port2=tcp://' + self.addr() + ':2004' \
|
||||
+ ',tx_port3=tcp://' + self.addr() + ':2006' \
|
||||
+ ',rx_port0=tcp://' + self.ue.addr() + ':2001' \
|
||||
+ ',rx_port1=tcp://' + self.ue.addr() + ':2003' \
|
||||
+ ',rx_port2=tcp://' + self.ue.addr() + ':2005' \
|
||||
+ ',rx_port3=tcp://' + self.ue.addr() + ':2007'
|
||||
+ ',tx_port0=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 0) \
|
||||
+ ',tx_port1=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 1) \
|
||||
+ ',tx_port2=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 2) \
|
||||
+ ',tx_port3=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 3) \
|
||||
+ ',rx_port0=tcp://' + self.ue.addr() + ':' + str(ue_base_port + 0) \
|
||||
+ ',rx_port1=tcp://' + self.ue.addr() + ':' + str(ue_base_port + 1) \
|
||||
+ ',rx_port2=tcp://' + self.ue.addr() + ':' + str(ue_base_port + 2) \
|
||||
+ ',rx_port3=tcp://' + self.ue.addr() + ':' + str(ue_base_port + 3)
|
||||
|
||||
rf_dev_args += ',id=enb,base_srate=' + str(base_srate)
|
||||
|
||||
|
|
|
@ -101,6 +101,9 @@ class AmarisoftUE(MS):
|
|||
self.testenv = testenv
|
||||
if not rf_type_valid(conf.get('rf_dev_type', None)):
|
||||
raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
|
||||
if conf.get('rf_dev_type') == 'zmq':
|
||||
# Define all 4 possible local RF ports (2x CA with 2x2 MIMO)
|
||||
self._zmq_base_bind_port = self.testenv.suite().resource_pool().next_zmq_port_range(self, 4)
|
||||
|
||||
def bin_prefix(self):
|
||||
if self._bin_prefix is None:
|
||||
|
@ -123,6 +126,9 @@ class AmarisoftUE(MS):
|
|||
def netns(self):
|
||||
return "amarisoftue1"
|
||||
|
||||
def zmq_base_bind_port(self):
|
||||
return self._zmq_base_bind_port
|
||||
|
||||
def stop(self):
|
||||
self.testenv.stop_process(self.process)
|
||||
|
||||
|
@ -242,10 +248,11 @@ class AmarisoftUE(MS):
|
|||
# We need to set some specific variables programatically here to match IP addresses:
|
||||
if self._conf.get('rf_dev_type') == 'zmq':
|
||||
base_srate = num_prb2base_srate(self.enb.num_prb())
|
||||
rf_dev_args = 'tx_port0=tcp://' + self.addr() + ':2001' \
|
||||
+ ',tx_port1=tcp://' + self.addr() + ':2003' \
|
||||
+ ',rx_port0=tcp://' + self.enb.addr() + ':2000' \
|
||||
+ ',rx_port1=tcp://' + self.enb.addr() + ':2002' \
|
||||
enb_base_port = self.enb.zmq_base_bind_port()
|
||||
rf_dev_args = 'tx_port0=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 0) \
|
||||
+ ',tx_port1=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 1) \
|
||||
+ ',rx_port0=tcp://' + self.enb.addr() + ':' + str(enb_base_port + 0) \
|
||||
+ ',rx_port1=tcp://' + self.enb.addr() + ':' + str(enb_base_port + 1) \
|
||||
+ ',tx_freq=2510e6,rx_freq=2630e6,tx_freq2=2530e6,rx_freq2=2650e6' \
|
||||
+ ',id=ue,base_srate='+ str(base_srate)
|
||||
config.overlay(values, dict(ue=dict(sample_rate = base_srate / (1000*1000),
|
||||
|
|
|
@ -100,6 +100,10 @@ class srsUE(MS, srslte_common):
|
|||
self._additional_args = []
|
||||
if not rf_type_valid(conf.get('rf_dev_type', None)):
|
||||
raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
|
||||
self._zmq_base_bind_port = None
|
||||
if conf.get('rf_dev_type') == 'zmq':
|
||||
# Define all 4 possible local RF ports (2x CA with 2x2 MIMO)
|
||||
self._zmq_base_bind_port = self.testenv.suite().resource_pool().next_zmq_port_range(self, 4)
|
||||
|
||||
def cleanup(self):
|
||||
if self.process is None:
|
||||
|
@ -151,6 +155,9 @@ class srsUE(MS, srslte_common):
|
|||
def netns(self):
|
||||
return "srsue1"
|
||||
|
||||
def zmq_base_bind_port(self):
|
||||
return self._zmq_base_bind_port
|
||||
|
||||
def connect(self, enb):
|
||||
self.log('Starting srsue')
|
||||
self.enb = enb
|
||||
|
@ -264,14 +271,15 @@ class srsUE(MS, srslte_common):
|
|||
if self._conf.get('rf_dev_type') == 'zmq':
|
||||
base_srate = num_prb2base_srate(self.enb.num_prb())
|
||||
# Define all 8 possible RF ports (2x CA with 2x2 MIMO)
|
||||
rf_dev_args = 'tx_port0=tcp://' + self.addr() + ':2001' \
|
||||
+ ',tx_port1=tcp://' + self.addr() + ':2003' \
|
||||
+ ',tx_port2=tcp://' + self.addr() + ':2005' \
|
||||
+ ',tx_port3=tcp://' + self.addr() + ':2007' \
|
||||
+ ',rx_port0=tcp://' + self.enb.addr() + ':2000' \
|
||||
+ ',rx_port1=tcp://' + self.enb.addr() + ':2002' \
|
||||
+ ',rx_port2=tcp://' + self.enb.addr() + ':2004' \
|
||||
+ ',rx_port3=tcp://' + self.enb.addr() + ':2006'
|
||||
enb_base_port = self.enb.zmq_base_bind_port()
|
||||
rf_dev_args = 'tx_port0=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 0) \
|
||||
+ ',tx_port1=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 1) \
|
||||
+ ',tx_port2=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 2) \
|
||||
+ ',tx_port3=tcp://' + self.addr() + ':' + str(self._zmq_base_bind_port + 3) \
|
||||
+ ',rx_port0=tcp://' + self.enb.addr() + ':' + str(enb_base_port + 0) \
|
||||
+ ',rx_port1=tcp://' + self.enb.addr() + ':' + str(enb_base_port + 1) \
|
||||
+ ',rx_port2=tcp://' + self.enb.addr() + ':' + str(enb_base_port + 2) \
|
||||
+ ',rx_port3=tcp://' + self.enb.addr() + ':' + str(enb_base_port + 3)
|
||||
|
||||
if self.num_carriers == 1:
|
||||
# Single carrier
|
||||
|
|
Loading…
Reference in New Issue