amarisoft_enb: Support zmq rf_driver

Change-Id: I958834d99584e33f632b839a0bd0acccc2379049
diff --git a/src/osmo_gsm_tester/amarisoft_enb.py b/src/osmo_gsm_tester/amarisoft_enb.py
index 2ef713f..e4f3d64 100644
--- a/src/osmo_gsm_tester/amarisoft_enb.py
+++ b/src/osmo_gsm_tester/amarisoft_enb.py
@@ -24,7 +24,7 @@
 from . import enb
 
 def rf_type_valid(rf_type_str):
-    return rf_type_str in ('uhd')
+    return rf_type_str in ('uhd', 'zmq')
 
 #reference: srsLTE.git srslte_symbol_sz()
 def num_prb2symbol_sz(num_prb):
@@ -167,6 +167,38 @@
         self._num_cells = int(values['enb'].get('num_cells', None))
         assert self._num_cells
 
+        # 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.num_prb())
+            rf_dev_args = 'fail_on_disconnect=true' \
+                        + ',tx_port0=tcp://' + self.addr() + ':2000' \
+                        + ',tx_port1=tcp://' + self.addr() + ':2002' \
+                        + ',rx_port0=tcp://' + self.ue.addr() + ':2001' \
+                        + ',rx_port1=tcp://' + self.ue.addr() + ':2003' \
+                        + ',tx_freq=2630e6,rx_freq=2510e6,tx_freq2=2650e6,rx_freq2=2530e6' \
+                        + ',id=enb,base_srate=' + str(base_srate)
+            config.overlay(values, dict(enb=dict(sample_rate = base_srate / (1000*1000),
+                                                 rf_dev_args=rf_dev_args)))
+
+        # Set UHD frame size as a function of the cell bandwidth on B2XX
+        if self._conf.get('rf_dev_type') == 'UHD' and values['enb'].get('rf_dev_args', None) is not None:
+            if 'b200' in values['enb'].get('rf_dev_args'):
+                rf_dev_args = values['enb'].get('rf_dev_args', '')
+                rf_dev_args += ',' if rf_dev_args != '' and not rf_dev_args.endswith(',') else ''
+
+                if self._num_prb < 25:
+                    rf_dev_args += 'send_frame_size=512,recv_frame_size=512'
+                elif self._num_prb == 25:
+                    rf_dev_args += 'send_frame_size=1024,recv_frame_size=1024'
+                elif self._num_prb > 25:
+                    rf_dev_args += 'num_recv_frames=64,num_send_frames=64'
+
+                if self._num_prb > 50:
+                    # Reduce over the wire format to sc12
+                    rf_dev_args += ',otw_format=sc12'
+
+                config.overlay(values, dict(enb=dict(rf_dev_args=rf_dev_args)))
+
         logfile = self.log_file if self.setup_runs_locally() else self.remote_log_file
         config.overlay(values, dict(enb=dict(log_filename=logfile)))