Change in osmo-gsm-tester[master]: enb/ue: Assign zmq binding ports dynamically at runtime

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

pespin gerrit-no-reply at lists.osmocom.org
Fri Oct 9 15:49:01 UTC 2020


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-gsm-tester/+/20520 )


Change subject: enb/ue: Assign zmq binding ports dynamically at runtime
......................................................................

enb/ue: Assign zmq binding ports dynamically at runtime

ports are assigned increasingly in blocks in the range 2000-2200.

Change-Id: If2abddeb2ad6819de4f3ce64daaf00d2f527f9d2
---
M src/osmo_gsm_tester/core/resource.py
M src/osmo_gsm_tester/obj/enb.py
M src/osmo_gsm_tester/obj/ms_amarisoft.py
M src/osmo_gsm_tester/obj/ms_srs.py
4 files changed, 51 insertions(+), 20 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/20/20520/1

diff --git a/src/osmo_gsm_tester/core/resource.py b/src/osmo_gsm_tester/core/resource.py
index 62bba07..61a73aa 100644
--- a/src/osmo_gsm_tester/core/resource.py
+++ b/src/osmo_gsm_tester/core/resource.py
@@ -184,6 +184,15 @@
         # 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
 
diff --git a/src/osmo_gsm_tester/obj/enb.py b/src/osmo_gsm_tester/obj/enb.py
index 6384f15..ab50de8 100644
--- a/src/osmo_gsm_tester/obj/enb.py
+++ b/src/osmo_gsm_tester/obj/enb.py
@@ -84,6 +84,7 @@
         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'))
@@ -148,6 +149,9 @@
     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:
@@ -165,16 +169,19 @@
 
     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)
 
diff --git a/src/osmo_gsm_tester/obj/ms_amarisoft.py b/src/osmo_gsm_tester/obj/ms_amarisoft.py
index 7af6283..f151850 100644
--- a/src/osmo_gsm_tester/obj/ms_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/ms_amarisoft.py
@@ -101,6 +101,9 @@
         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 @@
     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 @@
         # 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),
diff --git a/src/osmo_gsm_tester/obj/ms_srs.py b/src/osmo_gsm_tester/obj/ms_srs.py
index 1c0f728..41df429 100644
--- a/src/osmo_gsm_tester/obj/ms_srs.py
+++ b/src/osmo_gsm_tester/obj/ms_srs.py
@@ -99,6 +99,10 @@
         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:
@@ -150,6 +154,9 @@
     def netns(self):
         return "srsue1"
 
+    def zmq_base_bind_port(self):
+        return self._zmq_base_bind_port
+
     def sleep_after_stop(self):
         # Only sleep once
         if self.stop_sleep_time > 0:
@@ -270,14 +277,15 @@
         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

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-gsm-tester/+/20520
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-gsm-tester
Gerrit-Branch: master
Gerrit-Change-Id: If2abddeb2ad6819de4f3ce64daaf00d2f527f9d2
Gerrit-Change-Number: 20520
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201009/1a92e453/attachment.htm>


More information about the gerrit-log mailing list