<p>srs_andre has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/24126">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">amarisoft_enb: add NR support<br><br>this patch adds the ability to configure NR cells with<br>Amarisoft eNB. It adds the new DRB-NR template and updates<br>the normal enb.cfg template to allow using it as LTE only<br>or with NR cells (5G NSA).<br><br>Change-Id: Ia27bbc6db5920ce14bacabe8043601aa2adaa5fe<br>---<br>M doc/examples/4g_srsLTE/defaults.conf<br>M src/osmo_gsm_tester/obj/enb.py<br>M src/osmo_gsm_tester/obj/enb_amarisoft.py<br>A src/osmo_gsm_tester/templates/amarisoft_drb_nr.cfg.tmpl<br>M src/osmo_gsm_tester/templates/amarisoft_enb.cfg.tmpl<br>M src/osmo_gsm_tester/templates/amarisoft_rf_driver.cfg.tmpl<br>M sysmocom/defaults.conf<br>7 files changed, 933 insertions(+), 14 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/26/24126/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/examples/4g_srsLTE/defaults.conf b/doc/examples/4g_srsLTE/defaults.conf</span><br><span>index 4a3b4c4..1d1f286 100644</span><br><span>--- a/doc/examples/4g_srsLTE/defaults.conf</span><br><span>+++ b/doc/examples/4g_srsLTE/defaults.conf</span><br><span>@@ -12,6 +12,7 @@</span><br><span>   mnc: 70</span><br><span>   transmission_mode: 1</span><br><span>   num_cells: 1</span><br><span style="color: hsl(120, 100%, 40%);">+  num_nr_cells: 0</span><br><span>   enable_measurements: false</span><br><span>   a1_report_type: rsrp</span><br><span>   a1_report_value: -105</span><br><span>diff --git a/src/osmo_gsm_tester/obj/enb.py b/src/osmo_gsm_tester/obj/enb.py</span><br><span>index 252fa14..e976753 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/enb.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/enb.py</span><br><span>@@ -68,12 +68,18 @@</span><br><span>         'cell_list[].ncell_list[].pci': schema.UINT,</span><br><span>         'cell_list[].ncell_list[].dl_earfcn': schema.UINT,</span><br><span>         'cell_list[].scell_list[]': schema.UINT,</span><br><span style="color: hsl(120, 100%, 40%);">+        'cell_list[].nr_scell_list[]': schema.UINT,</span><br><span>         'cell_list[].dl_earfcn': schema.UINT,</span><br><span>         'cell_list[].root_seq_idx': schema.UINT,</span><br><span>         'cell_list[].tac': schema.UINT,</span><br><span>         'cell_list[].dl_rfemu.type': schema.STR,</span><br><span>         'cell_list[].dl_rfemu.addr': schema.IPV4,</span><br><span>         'cell_list[].dl_rfemu.ports[]': schema.UINT,</span><br><span style="color: hsl(120, 100%, 40%);">+        'num_nr_cells': schema.UINT,</span><br><span style="color: hsl(120, 100%, 40%);">+        'nr_cell_list[].rf_port': schema.UINT,</span><br><span style="color: hsl(120, 100%, 40%);">+        'nr_cell_list[].cell_id': schema.UINT,</span><br><span style="color: hsl(120, 100%, 40%);">+        'nr_cell_list[].band': schema.UINT,</span><br><span style="color: hsl(120, 100%, 40%);">+        'nr_cell_list[].dl_nr_arfcn': schema.UINT,</span><br><span>         }</span><br><span>     for key, val in run_node.RunNode.schema().items():</span><br><span>         resource_schema['run_node.%s' % key] = val</span><br><span>@@ -98,9 +104,11 @@</span><br><span>             self.set_name('%s_%s' % (name, self._run_node.run_addr()))</span><br><span>         self._txmode = 0</span><br><span>         self._id = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self._ran_config = "lte" # Used to determine whether we are in NSA</span><br><span>         self._duplex = None</span><br><span>         self._num_prb = 0</span><br><span>         self._num_cells = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self._num_nr_cells = None</span><br><span>         self._epc = None</span><br><span>         self.gen_conf = None</span><br><span>         self.gr_broker = GrBroker.ref()</span><br><span>@@ -126,10 +134,11 @@</span><br><span> </span><br><span>     def calc_required_zmq_ports(self, cfg_values):</span><br><span>         cell_list = cfg_values['enb']['cell_list']</span><br><span style="color: hsl(0, 100%, 40%);">-        return len(cell_list) * self.num_ports() # *2 if MIMO</span><br><span style="color: hsl(120, 100%, 40%);">+        nr_cell_list = cfg_values['enb']['nr_cell_list']</span><br><span style="color: hsl(120, 100%, 40%);">+        return len(cell_list) * self.num_ports() + len(nr_cell_list) # *2 if LTE MIMO</span><br><span> </span><br><span>     def calc_required_zmq_ports_joined_earfcn(self, cfg_values):</span><br><span style="color: hsl(0, 100%, 40%);">-        #gr_broker will join the earfcns, so we need to count uniqe earfcns:</span><br><span style="color: hsl(120, 100%, 40%);">+        #gr_broker will join the earfcns, so we need to count unique earfcns (only implemented for LTE):</span><br><span>         cell_list = cfg_values['enb']['cell_list']</span><br><span>         earfcn_li = []</span><br><span>         [earfcn_li.append(int(cell['dl_earfcn'])) for cell in cell_list if int(cell['dl_earfcn']) not in earfcn_li]</span><br><span>@@ -142,6 +151,10 @@</span><br><span>         for cell in cell_list:</span><br><span>             cell[port_name] = base_port + port_offset</span><br><span>             port_offset += self.num_ports()</span><br><span style="color: hsl(120, 100%, 40%);">+        nr_cell_list = cfg_values['enb']['nr_cell_list']</span><br><span style="color: hsl(120, 100%, 40%);">+        for nr_cell in nr_cell_list:</span><br><span style="color: hsl(120, 100%, 40%);">+            nr_cell[port_name] = base_port + port_offset</span><br><span style="color: hsl(120, 100%, 40%);">+            port_offset += 1</span><br><span>         # TODO: do we need to assign cell_list back?</span><br><span> </span><br><span>     def assign_enb_zmq_ports_joined_earfcn(self, cfg_values, port_name, base_port):</span><br><span>@@ -176,7 +189,9 @@</span><br><span>         config.overlay(values, dict(enb={ 'mme_addr': self._epc.addr() }))</span><br><span>         config.overlay(values, dict(enb={ 'gtp_bind_addr': self._gtp_bind_addr }))</span><br><span>         self._num_cells = int(values['enb'].get('num_cells', None))</span><br><span style="color: hsl(0, 100%, 40%);">-        assert self._num_cells</span><br><span style="color: hsl(120, 100%, 40%);">+        self._num_nr_cells = int(values['enb'].get('num_nr_cells', None))</span><br><span style="color: hsl(120, 100%, 40%);">+        assert self._num_cells is not None</span><br><span style="color: hsl(120, 100%, 40%);">+        assert self._num_nr_cells is not None</span><br><span> </span><br><span>         # adjust cell_list to num_cells length:</span><br><span>         len_cell_list = len(values['enb']['cell_list'])</span><br><span>@@ -231,6 +246,9 @@</span><br><span>     def num_cells(self):</span><br><span>         return self._num_cells</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def num_nr_cells(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self._num_nr_cells</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> ########################</span><br><span> # PUBLIC - INTERNAL API</span><br><span> ########################</span><br><span>@@ -280,6 +298,13 @@</span><br><span>                 rf_dev_args += ',rx_port%u=tcp://%s:%u' %(idx + 1, ul_rem_addr, cell['zmq_enb_peer_port'] + 1)</span><br><span>             idx += self.num_ports()</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        # Only single antenna supported for NR cells</span><br><span style="color: hsl(120, 100%, 40%);">+        nr_cell_list = cfg_values['enb']['nr_cell_list']</span><br><span style="color: hsl(120, 100%, 40%);">+        for nr_cell in nr_cell_list:</span><br><span style="color: hsl(120, 100%, 40%);">+            rf_dev_args += ',tx_port%u=tcp://%s:%u' % (idx, self.addr(), nr_cell['zmq_enb_bind_port'] + 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            rf_dev_args += ',rx_port%u=tcp://%s:%u' % (idx, ul_rem_addr, nr_cell['zmq_enb_peer_port'] + 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            idx += 1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         rf_dev_args += ',id=enb,base_srate=' + str(base_srate)</span><br><span>         return rf_dev_args</span><br><span> </span><br><span>@@ -300,6 +325,14 @@</span><br><span>             if self.num_ports() > 1:</span><br><span>                 rf_dev_args += ',rx_port%u=tcp://%s:%u' %(idx + 1, self.addr(), cell['zmq_ue_peer_port'] + 1)</span><br><span>             idx += self.num_ports()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        # NR cells again only with single antenna support</span><br><span style="color: hsl(120, 100%, 40%);">+        nr_cell_list = self.gen_conf['enb']['nr_cell_list']</span><br><span style="color: hsl(120, 100%, 40%);">+        for nr_cell in nr_cell_list:</span><br><span style="color: hsl(120, 100%, 40%);">+            rf_dev_args += ',tx_port%u=tcp://%s:%u' %(idx, ue.addr(), nr_cell['zmq_ue_bind_port'] + 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            rf_dev_args += ',rx_port%u=tcp://%s:%u' %(idx, self.addr(), nr_cell['zmq_ue_peer_port'] + 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            idx += 1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         # remove trailing comma:</span><br><span>         if rf_dev_args[0] == ',':</span><br><span>             return rf_dev_args[1:]</span><br><span>diff --git a/src/osmo_gsm_tester/obj/enb_amarisoft.py b/src/osmo_gsm_tester/obj/enb_amarisoft.py</span><br><span>index 405ed68..34ab5c1 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/enb_amarisoft.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/enb_amarisoft.py</span><br><span>@@ -22,6 +22,7 @@</span><br><span> </span><br><span> from ..core import log, util, config, template, process, remote</span><br><span> from ..core import schema</span><br><span style="color: hsl(120, 100%, 40%);">+from ..core.event_loop import MainLoop</span><br><span> from . import enb</span><br><span> from . import rfemu</span><br><span> </span><br><span>@@ -33,12 +34,16 @@</span><br><span> </span><br><span>     config_schema = {</span><br><span>         'log_options': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        'nr_bandwidth': schema.INT,</span><br><span>         }</span><br><span>     schema.register_config_schema('amarisoftenb', config_schema)</span><br><span> </span><br><span> def rf_type_valid(rf_type_str):</span><br><span>     return rf_type_str in ('uhd', 'zmq', 'sdr')</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+def ran_type_valid(ran_type_str):</span><br><span style="color: hsl(120, 100%, 40%);">+    return ran_type_str in ('lte', '5g_nsa')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> class AmarisoftENB(enb.eNodeB):</span><br><span> </span><br><span>     REMOTE_DIR = '/osmo-gsm-tester-amarisoftenb'</span><br><span>@@ -48,6 +53,7 @@</span><br><span>     CFGFILE_SIB23 = 'amarisoft_sib23.asn'</span><br><span>     CFGFILE_RF = 'amarisoft_rf_driver.cfg'</span><br><span>     CFGFILE_DRB = 'amarisoft_drb.cfg'</span><br><span style="color: hsl(120, 100%, 40%);">+    CFGFILE_DRB_NR = 'amarisoft_drb_nr.cfg'</span><br><span>     LOGFILE = 'lteenb.log'</span><br><span>     PHY_SIGNAL_FILE = 'lteenb.log.bin'</span><br><span> </span><br><span>@@ -63,6 +69,7 @@</span><br><span>         self.config_sib23_file = None</span><br><span>         self.config_rf_file = None</span><br><span>         self.config_drb_file = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.config_drb_nr_file = None</span><br><span>         self.log_file = None</span><br><span>         self.process = None</span><br><span>         self.rem_host = None</span><br><span>@@ -72,8 +79,11 @@</span><br><span>         self.remote_config_sib23_file = None</span><br><span>         self.remote_config_rf_file = None</span><br><span>         self.remote_config_drb_file = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.remote_config_drb_nr_file = None</span><br><span>         self.remote_log_file = None</span><br><span>         self.enable_measurements = False</span><br><span style="color: hsl(120, 100%, 40%);">+        self.nr_bandwidth = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.ran_type = None</span><br><span>         self.testenv = testenv</span><br><span>         if not rf_type_valid(conf.get('rf_dev_type', None)):</span><br><span>             raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))</span><br><span>@@ -131,8 +141,8 @@</span><br><span>         self.process.launch()</span><br><span> </span><br><span>     def stop(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        # Not implemented</span><br><span style="color: hsl(0, 100%, 40%);">-        pass</span><br><span style="color: hsl(120, 100%, 40%);">+        # Allow for some time to flush logs</span><br><span style="color: hsl(120, 100%, 40%);">+        MainLoop.sleep(5)</span><br><span> </span><br><span>     def gen_conf_file(self, path, filename, values):</span><br><span>         self.dbg('AmarisoftENB ' + filename + ':\n' + pprint.pformat(values))</span><br><span>@@ -151,6 +161,7 @@</span><br><span>         self.config_sib23_file = self.run_dir.child(AmarisoftENB.CFGFILE_SIB23)</span><br><span>         self.config_rf_file = self.run_dir.child(AmarisoftENB.CFGFILE_RF)</span><br><span>         self.config_drb_file = self.run_dir.child(AmarisoftENB.CFGFILE_DRB)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.config_drb_nr_file = self.run_dir.child(AmarisoftENB.CFGFILE_DRB_NR)</span><br><span>         self.log_file = self.run_dir.child(AmarisoftENB.LOGFILE)</span><br><span>         self.phy_signal_file = self.run_dir.child(AmarisoftENB.PHY_SIGNAL_FILE)</span><br><span> </span><br><span>@@ -165,6 +176,7 @@</span><br><span>             self.remote_config_sib23_file = remote_run_dir.child(AmarisoftENB.CFGFILE_SIB23)</span><br><span>             self.remote_config_rf_file = remote_run_dir.child(AmarisoftENB.CFGFILE_RF)</span><br><span>             self.remote_config_drb_file = remote_run_dir.child(AmarisoftENB.CFGFILE_DRB)</span><br><span style="color: hsl(120, 100%, 40%);">+            self.remote_config_drb_nr_file = remote_run_dir.child(AmarisoftENB.CFGFILE_DRB_NR)</span><br><span>             self.remote_log_file = remote_run_dir.child(AmarisoftENB.LOGFILE)</span><br><span>             self.remote_phy_signal_file = remote_run_dir.child(AmarisoftENB.PHY_SIGNAL_FILE)</span><br><span> </span><br><span>@@ -176,6 +188,17 @@</span><br><span> </span><br><span>         config.overlay(values, dict(enb={'enable_dl_awgn': util.str2bool(values['enb'].get('enable_dl_awgn', 'false'))}))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        self.nr_bandwidth = int(values['enb'].get('nr_bandwidth', 10))</span><br><span style="color: hsl(120, 100%, 40%);">+        config.overlay(values, dict(enb={'nr_bandwidth': self.nr_bandwidth}))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (self._num_cells > 0):</span><br><span style="color: hsl(120, 100%, 40%);">+            if (self._num_nr_cells <= 0):</span><br><span style="color: hsl(120, 100%, 40%);">+                self.ran_type = "lte"</span><br><span style="color: hsl(120, 100%, 40%);">+            else:</span><br><span style="color: hsl(120, 100%, 40%);">+                self.ran_type = "nsa"</span><br><span style="color: hsl(120, 100%, 40%);">+        else:</span><br><span style="color: hsl(120, 100%, 40%);">+            raise log.Error('5G SA not supported yet')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         # Remove EEA0 from cipher list, if specified, as it's always assumed as default</span><br><span>         cipher_list = values['enb'].get('cipher_list', None)</span><br><span>         if "eea0" in cipher_list: cipher_list.remove("eea0")</span><br><span>@@ -237,6 +260,7 @@</span><br><span>         self.gen_conf_file(self.config_sib23_file, AmarisoftENB.CFGFILE_SIB23, values)</span><br><span>         self.gen_conf_file(self.config_rf_file, AmarisoftENB.CFGFILE_RF, values)</span><br><span>         self.gen_conf_file(self.config_drb_file, AmarisoftENB.CFGFILE_DRB, values)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.gen_conf_file(self.config_drb_nr_file, AmarisoftENB.CFGFILE_DRB_NR, values)</span><br><span> </span><br><span>         if not self._run_node.is_local():</span><br><span>             self.rem_host.recreate_remote_dir(self.remote_inst)</span><br><span>@@ -247,6 +271,7 @@</span><br><span>             self.rem_host.scp('scp-cfg-sib23-to-remote', self.config_sib23_file, self.remote_config_sib23_file)</span><br><span>             self.rem_host.scp('scp-cfg-rr-to-remote', self.config_rf_file, self.remote_config_rf_file)</span><br><span>             self.rem_host.scp('scp-cfg-drb-to-remote', self.config_drb_file, self.remote_config_drb_file)</span><br><span style="color: hsl(120, 100%, 40%);">+            self.rem_host.scp('scp-cfg-drb-nr-to-remote', self.config_drb_nr_file, self.remote_config_drb_nr_file)</span><br><span> </span><br><span>     def ue_add(self, ue):</span><br><span>         if self.ue is not None:</span><br><span>@@ -279,11 +304,17 @@</span><br><span>         rfemu_obj = rfemu.get_instance_by_type(rfemu_cfg['type'], rfemu_cfg)</span><br><span>         return rfemu_obj</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def get_nr_bandwidth(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.nr_bandwidth</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def ue_max_rate(self, downlink=True, num_carriers=1):</span><br><span style="color: hsl(0, 100%, 40%);">-        if self._duplex == 'fdd':</span><br><span style="color: hsl(0, 100%, 40%);">-            return self.ue_max_rate_fdd(downlink, num_carriers)</span><br><span style="color: hsl(120, 100%, 40%);">+        if self.ran_type == 'lte':</span><br><span style="color: hsl(120, 100%, 40%);">+            if self._duplex == 'fdd':</span><br><span style="color: hsl(120, 100%, 40%);">+                return self.ue_max_rate_fdd(downlink, num_carriers)</span><br><span style="color: hsl(120, 100%, 40%);">+            else:</span><br><span style="color: hsl(120, 100%, 40%);">+                return self.ue_max_rate_tdd(downlink, num_carriers)</span><br><span>         else:</span><br><span style="color: hsl(0, 100%, 40%);">-            return self.ue_max_rate_tdd(downlink, num_carriers)</span><br><span style="color: hsl(120, 100%, 40%);">+            return self.ue_max_rate_nsa_tdd(downlink)</span><br><span> </span><br><span>     def ue_max_rate_fdd(self, downlink, num_carriers):</span><br><span>         # The max rate for a single UE per PRB configuration in TM1 with MCS 28 QAM64</span><br><span>@@ -323,7 +354,7 @@</span><br><span>         return max_rate</span><br><span> </span><br><span>     def ue_max_rate_tdd(self, downlink, num_carriers):</span><br><span style="color: hsl(0, 100%, 40%);">-        # Max rate calculation for TDD depends on the acutal TDD configuration</span><br><span style="color: hsl(120, 100%, 40%);">+        # Max rate calculation for TDD depends on the actual TDD configuration</span><br><span>         # See: https://www.sharetechnote.com/html/Handbook_LTE_ThroughputCalculationExample_TDD.html</span><br><span>         # and https://i0.wp.com/www.techtrained.com/wp-content/uploads/2017/09/Blog_Post_1_TDD_Max_Throughput_Theoretical.jpg</span><br><span>         max_phy_rate_tdd_uldl_config0_sp0 = { 6 : 1.5e6,</span><br><span>@@ -333,8 +364,21 @@</span><br><span>                                75 : 18.4e6,</span><br><span>                                100 : 54.5e6 }</span><br><span>         if downlink:</span><br><span style="color: hsl(0, 100%, 40%);">-            max_rate = max_phy_rate_tdd_uldl_config0_sp0[self.num_prb()]</span><br><span style="color: hsl(120, 100%, 40%);">+            return max_phy_rate_tdd_uldl_config0_sp0[self.num_prb()]</span><br><span>         else:</span><br><span>             return 1e6 # dummy value, we need to replace that later</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def ue_max_rate_nsa_tdd(self, downlink):</span><br><span style="color: hsl(120, 100%, 40%);">+        # Max rate calculation based on https://5g-tools.com/5g-nr-throughput-calculator/</span><br><span style="color: hsl(120, 100%, 40%);">+        # Only FR1 15kHz SCS, QAM64, 6 DL slots, 3 UL slots</span><br><span style="color: hsl(120, 100%, 40%);">+        max_phy_rate_nsa_dl_fr1_15khz = { 10: 18.4e6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          20: 38.0e6 }</span><br><span style="color: hsl(120, 100%, 40%);">+        max_phy_rate_nsa_ul_fr1_15khz = { 10: 10.7e6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          20: 23.0e6 }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if downlink:</span><br><span style="color: hsl(120, 100%, 40%);">+            return max_phy_rate_nsa_dl_fr1_15khz[self.get_nr_bandwidth()]</span><br><span style="color: hsl(120, 100%, 40%);">+        else:</span><br><span style="color: hsl(120, 100%, 40%);">+            return max_phy_rate_nsa_ul_fr1_15khz[self.get_nr_bandwidth()]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # vim: expandtab tabstop=4 shiftwidth=4</span><br><span>diff --git a/src/osmo_gsm_tester/templates/amarisoft_drb_nr.cfg.tmpl b/src/osmo_gsm_tester/templates/amarisoft_drb_nr.cfg.tmpl</span><br><span>new file mode 100644</span><br><span>index 0000000..82f3b8c</span><br><span>--- /dev/null</span><br><span>+++ b/src/osmo_gsm_tester/templates/amarisoft_drb_nr.cfg.tmpl</span><br><span>@@ -0,0 +1,423 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* DRB configuration for each QCI value.</span><br><span style="color: hsl(120, 100%, 40%);">+   QCI characteristics in TS 23.203 table 6.1.7 */</span><br><span style="color: hsl(120, 100%, 40%);">+[</span><br><span style="color: hsl(120, 100%, 40%);">+  /**************************************** GBR */</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 1, /* UM - real time (RTP for VOIP) */</span><br><span style="color: hsl(120, 100%, 40%);">+    use_for_en_dc: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 100, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      t_Reordering: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      /* ROHC header compression */</span><br><span style="color: hsl(120, 100%, 40%);">+      /*</span><br><span style="color: hsl(120, 100%, 40%);">+      headerCompression: {</span><br><span style="color: hsl(120, 100%, 40%);">+        maxCID: 15,</span><br><span style="color: hsl(120, 100%, 40%);">+        profile0x0001: true, // RTP profile</span><br><span style="color: hsl(120, 100%, 40%);">+        profile0x0002: true, // UDP profile</span><br><span style="color: hsl(120, 100%, 40%);">+        profile0x0004: false, // IP profile</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      */</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 6,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 6,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 50,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 7,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 0, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 2, /* UM - real time (video) */</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 150, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      t_Reordering: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 50,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 8,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 0, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 3, /* UM - real time (gaming) */</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 100, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      t_Reordering: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 50,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 7,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 0, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 2,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 4, /* AM - Non-Conversational Video (Buffered Streaming) */</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 0, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: true,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_PollRetransmit: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        pollPDU: 64,</span><br><span style="color: hsl(120, 100%, 40%);">+        pollByte: 125, /* in kBytes, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+        maxRetxThreshold: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        t_StatusProhibit: 10, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 9,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 8, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 65, /* UM - real time (MC-PTT voice) */</span><br><span style="color: hsl(120, 100%, 40%);">+    use_for_en_dc: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 100, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      t_Reordering: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      /* ROHC header compression */</span><br><span style="color: hsl(120, 100%, 40%);">+      /*</span><br><span style="color: hsl(120, 100%, 40%);">+      headerCompression: {</span><br><span style="color: hsl(120, 100%, 40%);">+        maxCID: 15,</span><br><span style="color: hsl(120, 100%, 40%);">+        profile0x0001: true, // RTP profile</span><br><span style="color: hsl(120, 100%, 40%);">+        profile0x0002: true, // UDP profile</span><br><span style="color: hsl(120, 100%, 40%);">+        profile0x0004: false, // IP profile</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      */</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 6,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 6,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 50,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 5,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 0, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 66, /* UM - real time (non MC-PTT voice) */</span><br><span style="color: hsl(120, 100%, 40%);">+    use_for_en_dc: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 150, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      t_Reordering: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 50,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 7,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 0, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 67, /* UM - Mission Critical Video user plane */</span><br><span style="color: hsl(120, 100%, 40%);">+    use_for_en_dc: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 100, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      t_Reordering: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 50,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 6,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 0, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 5,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  /**************************************** non GBR */</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 5, /* AM - high priority (SIP) */</span><br><span style="color: hsl(120, 100%, 40%);">+    use_for_en_dc: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 0, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: true,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_PollRetransmit: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        pollPDU: 64,</span><br><span style="color: hsl(120, 100%, 40%);">+        pollByte: 125, /* in kBytes, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+        maxRetxThreshold: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        t_StatusProhibit: 10, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 6,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 8, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 6, /* AM - Video (buffered streaming) */</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 0, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: true,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_PollRetransmit: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        pollPDU: 64,</span><br><span style="color: hsl(120, 100%, 40%);">+        pollByte: 125, /* in kBytes, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+        maxRetxThreshold: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        t_StatusProhibit: 10, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 10,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 8, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 5,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 7, /* UM - voice, video (live streaming), interactive gaming */</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 100, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      t_Reordering: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_um: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 50,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 11,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 0, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 6,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 8, /* AM - best effort (Internet traffic) */</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 0, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: true,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_PollRetransmit: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        pollPDU: 64,</span><br><span style="color: hsl(120, 100%, 40%);">+        pollByte: 125, /* in kBytes, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+        maxRetxThreshold: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        t_StatusProhibit: 10, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 8, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 7,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 9, /* AM - best effort (Internet traffic) */</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 0, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: true,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_PollRetransmit: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        pollPDU: 64,</span><br><span style="color: hsl(120, 100%, 40%);">+        pollByte: 125, /* in kBytes, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+        maxRetxThreshold: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        t_StatusProhibit: 10, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 13,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 8, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 7,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 69, /* AM - high priority (MC-PTT signalling) */</span><br><span style="color: hsl(120, 100%, 40%);">+    use_for_en_dc: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 0, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: true,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_PollRetransmit: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        pollPDU: 64,</span><br><span style="color: hsl(120, 100%, 40%);">+        pollByte: 125, /* in kBytes, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+        maxRetxThreshold: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        t_StatusProhibit: 10, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 8, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    qci: 70, /* AM - MC data */</span><br><span style="color: hsl(120, 100%, 40%);">+    use_for_en_dc: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcp_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      discardTimer: 0, /* in ms, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeUL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      pdcp_SN_SizeDL: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+      statusReportRequired: true,</span><br><span style="color: hsl(120, 100%, 40%);">+      outOfOrderDelivery: false,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    rlc_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_PollRetransmit: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        pollPDU: 64,</span><br><span style="color: hsl(120, 100%, 40%);">+        pollByte: 125, /* in kBytes, 0 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+        maxRetxThreshold: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_am: {</span><br><span style="color: hsl(120, 100%, 40%);">+        sn_FieldLength: 18,</span><br><span style="color: hsl(120, 100%, 40%);">+        t_Reassembly: 80, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+        t_StatusProhibit: 10, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    logical_channel_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      priority: 11,</span><br><span style="color: hsl(120, 100%, 40%);">+      prioritisedBitRate: 8, /* in kb/s, -1 means infinity */</span><br><span style="color: hsl(120, 100%, 40%);">+      bucketSizeDuration: 100, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      logicalChannelGroup: 5,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+]</span><br><span>diff --git a/src/osmo_gsm_tester/templates/amarisoft_enb.cfg.tmpl b/src/osmo_gsm_tester/templates/amarisoft_enb.cfg.tmpl</span><br><span>index 2c6fcc0..241eed2 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/amarisoft_enb.cfg.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/amarisoft_enb.cfg.tmpl</span><br><span>@@ -1,6 +1,5 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/* lteenb configuration file version 2018-10-18</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (C) 2015-2018 Amarisoft</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/* OGT templated version of the lteenb configuration file for 4G and 5G NSA */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> {</span><br><span> </span><br><span> %if enb.license_server_addr != '0.0.0.0':</span><br><span>@@ -64,10 +63,15 @@</span><br><span>   /* high 20 bits of SIB1.cellIdentifier */</span><br><span>   enb_id: ${enb.id},</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+% if int(enb.num_nr_cells) > 0:</span><br><span style="color: hsl(120, 100%, 40%);">+  nr_support: true,</span><br><span style="color: hsl(120, 100%, 40%);">+% endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /* list of cells */</span><br><span>   cell_list: [</span><br><span> </span><br><span> %for cell in enb.cell_list:</span><br><span style="color: hsl(120, 100%, 40%);">+%if loop.index == 0:</span><br><span>   {</span><br><span>     dl_earfcn: ${cell.dl_earfcn},</span><br><span>     rf_port: ${cell.rf_port},</span><br><span>@@ -87,10 +91,32 @@</span><br><span>       { cell_id: ${scell_id}, cross_carrier_scheduling: false, scheduling_cell_id: ${cell.cell_id}, ul_allowed: true},</span><br><span> %endfor</span><br><span>     ],</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    nr_scell_list: [</span><br><span style="color: hsl(120, 100%, 40%);">+%for nr_scell_id in cell.nr_scell_list:</span><br><span style="color: hsl(120, 100%, 40%);">+      { cell_id: ${nr_scell_id} },</span><br><span style="color: hsl(120, 100%, 40%);">+%endfor</span><br><span style="color: hsl(120, 100%, 40%);">+    ],</span><br><span>   },</span><br><span style="color: hsl(120, 100%, 40%);">+%endif</span><br><span> %endfor</span><br><span>   ], /* cell_list */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  nr_cell_list: [</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+%for nr_cell in enb.nr_cell_list:</span><br><span style="color: hsl(120, 100%, 40%);">+  %if loop.index == 0:</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+      rf_port: ${nr_cell.rf_port},</span><br><span style="color: hsl(120, 100%, 40%);">+      cell_id: ${nr_cell.cell_id},</span><br><span style="color: hsl(120, 100%, 40%);">+      band: ${nr_cell.band},</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_nr_arfcn: ${nr_cell.dl_nr_arfcn},</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+  %endif</span><br><span style="color: hsl(120, 100%, 40%);">+%endfor</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  ], /* nr_cell_list */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /* default cell parameters */</span><br><span>   cell_default: {</span><br><span>     /* Broadcasted PLMN identities */</span><br><span>@@ -143,6 +169,9 @@</span><br><span>        computed from the reported CQI */</span><br><span>     /* pdsch_mcs: 12, */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    prach_config_index: 4, /* subframe 4 every 10 ms */</span><br><span style="color: hsl(120, 100%, 40%);">+    prach_freq_offset: 0, /* -1 means automatic */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     /* PUSCH dedicated config (currently same for all UEs) */</span><br><span>     pusch_dedicated: {</span><br><span>       beta_offset_ack_index: 9,</span><br><span>@@ -154,7 +183,11 @@</span><br><span>     pusch_msg3_mcs: 0,</span><br><span> </span><br><span>     /* this CQI value is assumed when none is received from the UE */</span><br><span style="color: hsl(120, 100%, 40%);">+% if enb.num_prb == 6:</span><br><span>     initial_cqi: 5,</span><br><span style="color: hsl(120, 100%, 40%);">+% else:</span><br><span style="color: hsl(120, 100%, 40%);">+    initial_cqi: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+% endif</span><br><span> </span><br><span>     /* if defined, force the PUSCH MCS for all UEs. Otherwise it is</span><br><span>        computed from the last received SRS/PUSCH. */</span><br><span>@@ -162,6 +195,9 @@</span><br><span> </span><br><span>     transmission_mode: ${enb.transmission_mode},</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    dl_256qam: true,</span><br><span style="color: hsl(120, 100%, 40%);">+    ul_64qam: true,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     /* Scheduling request period (ms). Must be >= 40 for HD-FDD */</span><br><span>     sr_period: 20,</span><br><span> </span><br><span>@@ -188,6 +224,9 @@</span><br><span>         // tdd_ack_nack_feedback_mode_r10: "cs",</span><br><span> % endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        n1_pucch_sr_count: 11, /* increase if more UEs are needed */</span><br><span style="color: hsl(120, 100%, 40%);">+        cqi_pucch_n_rb: 1, /* increase if more UEs are needed */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         /* number of PUCCH 1b CS resources. It determines</span><br><span>            the maximum number of UEs that can be scheduled in one TTI</span><br><span>            using carrier aggregation with PUCCH 1b CS ack/nack feedback. */</span><br><span>@@ -266,6 +305,12 @@</span><br><span>         a3_offset: ${enb.a3_report_value},</span><br><span>         a3_hysteresis: ${enb.a3_hysteresis},</span><br><span>         a3_time_to_trigger: ${enb.a3_time_to_trigger},</span><br><span style="color: hsl(120, 100%, 40%);">+        // NR events hard-coded</span><br><span style="color: hsl(120, 100%, 40%);">+        nr_b1_report_type: "rsrp",</span><br><span style="color: hsl(120, 100%, 40%);">+        nr_b1_rsrp: -100,</span><br><span style="color: hsl(120, 100%, 40%);">+        nr_b1_hysteresis: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+        nr_b1_time_to_trigger: 100,</span><br><span style="color: hsl(120, 100%, 40%);">+        nr_rsrp_filter_coeff: 3</span><br><span>     },</span><br><span> </span><br><span>     /* measurement gap configuration */</span><br><span>@@ -276,4 +321,355 @@</span><br><span>     ho_from_meas: true,</span><br><span> % endif</span><br><span>   },</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   nr_cell_default: {</span><br><span style="color: hsl(120, 100%, 40%);">+    subcarrier_spacing: 15, /* kHz */</span><br><span style="color: hsl(120, 100%, 40%);">+    ssb_subcarrier_spacing: 30,</span><br><span style="color: hsl(120, 100%, 40%);">+    bandwidth: ${enb.nr_bandwidth}, /* MHz */</span><br><span style="color: hsl(120, 100%, 40%);">+    n_antenna_dl: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+    n_antenna_ul: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* force the timing TA offset (optional) */</span><br><span style="color: hsl(120, 100%, 40%);">+    n_timing_advance_offset: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    tdd_ul_dl_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      pattern1: {</span><br><span style="color: hsl(120, 100%, 40%);">+        period: 10,</span><br><span style="color: hsl(120, 100%, 40%);">+        dl_slots: 6,</span><br><span style="color: hsl(120, 100%, 40%);">+        dl_symbols: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+        ul_slots: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+        ul_symbols: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    ssb_pos_bitmap: "10000000",</span><br><span style="color: hsl(120, 100%, 40%);">+    ssb_period: 20, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+    n_id_cell: 500,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    root_sequence_index: 1, /* PRACH root sequence index */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Scheduling request period (slots). */</span><br><span style="color: hsl(120, 100%, 40%);">+    sr_period: 40,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    dmrs_type_a_pos: 2,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* to limit the number of HARQ feedback in UL, use pdsch_harq_ack_max;</span><br><span style="color: hsl(120, 100%, 40%);">+       allows to workaround issues with SM-G977N for example */</span><br><span style="color: hsl(120, 100%, 40%);">+    //pdsch_harq_ack_max: 2,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    prach: {</span><br><span style="color: hsl(120, 100%, 40%);">+      prach_config_index: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      msg1_subcarrier_spacing: 15, /* kHz */</span><br><span style="color: hsl(120, 100%, 40%);">+      msg1_fdm: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+% if int(enb.nr_bandwidth) == 10:</span><br><span style="color: hsl(120, 100%, 40%);">+      msg1_frequency_start: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+% else:</span><br><span style="color: hsl(120, 100%, 40%);">+      msg1_frequency_start: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+% endif</span><br><span style="color: hsl(120, 100%, 40%);">+      zero_correlation_zone_config: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      preamble_received_target_power: -110, /* in dBm */</span><br><span style="color: hsl(120, 100%, 40%);">+      preamble_trans_max: 7,</span><br><span style="color: hsl(120, 100%, 40%);">+      power_ramping_step: 4, /* in dB */</span><br><span style="color: hsl(120, 100%, 40%);">+      ra_response_window: 10, /* in slots */</span><br><span style="color: hsl(120, 100%, 40%);">+      restricted_set_config: "unrestricted_set",</span><br><span style="color: hsl(120, 100%, 40%);">+      ra_contention_resolution_timer: 64, /* in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+      ssb_per_prach_occasion: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      cb_preambles_per_ssb: 8,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    pdcch: {</span><br><span style="color: hsl(120, 100%, 40%);">+      common_coreset: {</span><br><span style="color: hsl(120, 100%, 40%);">+        rb_start: -1, /* -1 to have the maximum bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+        l_crb: -1, /* -1 means all the bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+        duration: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+        precoder_granularity: "sameAsREG_bundle",</span><br><span style="color: hsl(120, 100%, 40%);">+        //dmrs_scid: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      dedicated_coreset: {</span><br><span style="color: hsl(120, 100%, 40%);">+        rb_start: -1, /* -1 to have the maximum bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+        l_crb: -1, /* -1 means all the bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+        duration: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+        precoder_granularity: "sameAsREG_bundle",</span><br><span style="color: hsl(120, 100%, 40%);">+        //dmrs_scid: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      css: {</span><br><span style="color: hsl(120, 100%, 40%);">+        n_candidates: [ 1, 1, 1, 0, 0 ],</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      rar_al_index: 2,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      uss: {</span><br><span style="color: hsl(120, 100%, 40%);">+        n_candidates: [ 0, 2, 1, 0, 0 ],</span><br><span style="color: hsl(120, 100%, 40%);">+        dci_0_1_and_1_1: false,</span><br><span style="color: hsl(120, 100%, 40%);">+        force_dci_0_0: true, // Forces DCI format 0_0 for Uplink</span><br><span style="color: hsl(120, 100%, 40%);">+        force_dci_1_0: true, // Forces DCI format 1_0 for Downlink</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+      al_index: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    pdsch: {</span><br><span style="color: hsl(120, 100%, 40%);">+      mapping_type: "typeA",</span><br><span style="color: hsl(120, 100%, 40%);">+      start_symb: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      n_symb: 13,</span><br><span style="color: hsl(120, 100%, 40%);">+      dmrs_add_pos: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      dmrs_type: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      dmrs_max_len: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      k0: 0, /* delay in slots from DCI to PDSCH */</span><br><span style="color: hsl(120, 100%, 40%);">+      /* delay in slots from PDSCH to PUCCH/PUSCH ACK/NACK */</span><br><span style="color: hsl(120, 100%, 40%);">+      k1: [ 8, 7, 6, 6, 5, 4],</span><br><span style="color: hsl(120, 100%, 40%);">+      mcs_table: "qam64",</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      rar_mcs: 2,</span><br><span style="color: hsl(120, 100%, 40%);">+      /* If defined, force the PDSCH MCS for all UEs. Otherwise it is computed</span><br><span style="color: hsl(120, 100%, 40%);">+       * based on DL channel quality estimation */</span><br><span style="color: hsl(120, 100%, 40%);">+      /* mcs: 24, */</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    csi_rs: {</span><br><span style="color: hsl(120, 100%, 40%);">+      nzp_csi_rs_resource: [</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rs_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          n_ports: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          frequency_domain_allocation: "row2",</span><br><span style="color: hsl(120, 100%, 40%);">+          bitmap: "100000000000",</span><br><span style="color: hsl(120, 100%, 40%);">+          cdm_type: "no_cdm",</span><br><span style="color: hsl(120, 100%, 40%);">+          density: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          first_symb: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+          rb_start: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset_ss: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          scrambling_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          period: 80,</span><br><span style="color: hsl(120, 100%, 40%);">+          offset: 1, /* != 0 to avoid collision with SSB */</span><br><span style="color: hsl(120, 100%, 40%);">+          qcl_info_periodic_csi_rs: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+#define USE_TRS        </span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef USE_TRS</span><br><span style="color: hsl(120, 100%, 40%);">+        /* TRS : period of 40 ms, slots 1 & 2, symbols 4 and 8 */</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rs_id: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          n_ports: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          frequency_domain_allocation: "row1",</span><br><span style="color: hsl(120, 100%, 40%);">+          bitmap: "0001",</span><br><span style="color: hsl(120, 100%, 40%);">+          cdm_type: "no_cdm",</span><br><span style="color: hsl(120, 100%, 40%);">+          density: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+          first_symb: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+          rb_start: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset_ss: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          scrambling_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          period: 40,</span><br><span style="color: hsl(120, 100%, 40%);">+          offset: 11,</span><br><span style="color: hsl(120, 100%, 40%);">+          qcl_info_periodic_csi_rs: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rs_id: 2,</span><br><span style="color: hsl(120, 100%, 40%);">+          n_ports: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          frequency_domain_allocation: "row1",</span><br><span style="color: hsl(120, 100%, 40%);">+          bitmap: "0001",</span><br><span style="color: hsl(120, 100%, 40%);">+          cdm_type: "no_cdm",</span><br><span style="color: hsl(120, 100%, 40%);">+          density: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+          first_symb: 8,</span><br><span style="color: hsl(120, 100%, 40%);">+          rb_start: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset_ss: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          scrambling_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          period: 40,</span><br><span style="color: hsl(120, 100%, 40%);">+          offset: 11,</span><br><span style="color: hsl(120, 100%, 40%);">+          qcl_info_periodic_csi_rs: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rs_id: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+          n_ports: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          frequency_domain_allocation: "row1",</span><br><span style="color: hsl(120, 100%, 40%);">+          bitmap: "0001",</span><br><span style="color: hsl(120, 100%, 40%);">+          cdm_type: "no_cdm",</span><br><span style="color: hsl(120, 100%, 40%);">+          density: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+          first_symb: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+          rb_start: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset_ss: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          scrambling_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          period: 40,</span><br><span style="color: hsl(120, 100%, 40%);">+          offset: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+          qcl_info_periodic_csi_rs: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rs_id: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+          n_ports: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          frequency_domain_allocation: "row1",</span><br><span style="color: hsl(120, 100%, 40%);">+          bitmap: "0001",</span><br><span style="color: hsl(120, 100%, 40%);">+          cdm_type: "no_cdm",</span><br><span style="color: hsl(120, 100%, 40%);">+          density: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+          first_symb: 8,</span><br><span style="color: hsl(120, 100%, 40%);">+          rb_start: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          power_control_offset_ss: 0, /* dB */</span><br><span style="color: hsl(120, 100%, 40%);">+          scrambling_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          period: 40,</span><br><span style="color: hsl(120, 100%, 40%);">+          offset: 12,</span><br><span style="color: hsl(120, 100%, 40%);">+          qcl_info_periodic_csi_rs: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+      ],</span><br><span style="color: hsl(120, 100%, 40%);">+      nzp_csi_rs_resource_set: [</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rs_set_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          nzp_csi_rs_resources: [ 0 ],</span><br><span style="color: hsl(120, 100%, 40%);">+          repetition: false,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef USE_TRS</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rs_set_id: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          nzp_csi_rs_resources: [ 1, 2, 3, 4 ],</span><br><span style="color: hsl(120, 100%, 40%);">+          repetition: false,</span><br><span style="color: hsl(120, 100%, 40%);">+          trs_info: true,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+      ],</span><br><span style="color: hsl(120, 100%, 40%);">+      </span><br><span style="color: hsl(120, 100%, 40%);">+     csi_im_resource: [</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_im_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          pattern: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          subcarrier_location: 8,</span><br><span style="color: hsl(120, 100%, 40%);">+          symbol_location: 8,</span><br><span style="color: hsl(120, 100%, 40%);">+          rb_start: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+          period: 80,</span><br><span style="color: hsl(120, 100%, 40%);">+          offset: 1, /* != 0 to avoid collision with SSB */</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+      ],</span><br><span style="color: hsl(120, 100%, 40%);">+      csi_im_resource_set: [</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_im_set_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_im_resources: [ 0 ],</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+      ],</span><br><span style="color: hsl(120, 100%, 40%);">+      /* ZP CSI-RS to set the CSI-IM REs to zero */</span><br><span style="color: hsl(120, 100%, 40%);">+      zp_csi_rs_resource: [</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rs_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          frequency_domain_allocation: "row4",</span><br><span style="color: hsl(120, 100%, 40%);">+          bitmap: "100",</span><br><span style="color: hsl(120, 100%, 40%);">+          n_ports: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+          cdm_type: "fd_cdm2",</span><br><span style="color: hsl(120, 100%, 40%);">+          first_symb: 8,</span><br><span style="color: hsl(120, 100%, 40%);">+          density: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          rb_start: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */</span><br><span style="color: hsl(120, 100%, 40%);">+          period: 80,</span><br><span style="color: hsl(120, 100%, 40%);">+          offset: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+      ],</span><br><span style="color: hsl(120, 100%, 40%);">+      p_zp_csi_rs_resource_set: [</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          zp_csi_rs_resources: [ 0 ],</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+      ],</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      csi_resource_config: [</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rsc_config_id: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          nzp_csi_rs_resource_set_list: [ 0 ],</span><br><span style="color: hsl(120, 100%, 40%);">+          resource_type: "periodic",</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rsc_config_id: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_im_resource_set_list: [ 0 ],</span><br><span style="color: hsl(120, 100%, 40%);">+          resource_type: "periodic",</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef USE_TRS</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_rsc_config_id: 2,</span><br><span style="color: hsl(120, 100%, 40%);">+          nzp_csi_rs_resource_set_list: [ 1 ],</span><br><span style="color: hsl(120, 100%, 40%);">+          resource_type: "periodic",</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+      ],</span><br><span style="color: hsl(120, 100%, 40%);">+      csi_report_config: [</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+          resources_for_channel_measurement: 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          csi_im_resources_for_interference: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          report_config_type: "periodic",</span><br><span style="color: hsl(120, 100%, 40%);">+          period: 80,</span><br><span style="color: hsl(120, 100%, 40%);">+          report_quantity: "CRI_RI_PMI_CQI",</span><br><span style="color: hsl(120, 100%, 40%);">+          cqi_table: 2,</span><br><span style="color: hsl(120, 100%, 40%);">+          subband_size: "value1",</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+      ],</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    </span><br><span style="color: hsl(120, 100%, 40%);">+    pucch: {</span><br><span style="color: hsl(120, 100%, 40%);">+      pucch_group_hopping: "neither",</span><br><span style="color: hsl(120, 100%, 40%);">+      hopping_id: -1, /* -1 = n_cell_id */</span><br><span style="color: hsl(120, 100%, 40%);">+      p0_nominal: -90,</span><br><span style="color: hsl(120, 100%, 40%);">+        pucch1: {</span><br><span style="color: hsl(120, 100%, 40%);">+          n_cs: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+          n_occ: 3,</span><br><span style="color: hsl(120, 100%, 40%);">+          freq_hopping: false,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+        pucch2: {</span><br><span style="color: hsl(120, 100%, 40%);">+          n_symb: 2,</span><br><span style="color: hsl(120, 100%, 40%);">+          n_prb: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          freq_hopping: false,</span><br><span style="color: hsl(120, 100%, 40%);">+          simultaneous_harq_ack_csi: false, </span><br><span style="color: hsl(120, 100%, 40%);">+          max_code_rate: 0.25,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    pusch: {</span><br><span style="color: hsl(120, 100%, 40%);">+      mapping_type: "typeA",</span><br><span style="color: hsl(120, 100%, 40%);">+      n_symb: 14,</span><br><span style="color: hsl(120, 100%, 40%);">+      dmrs_add_pos: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      dmrs_type: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      dmrs_max_len: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      tf_precoding: false,</span><br><span style="color: hsl(120, 100%, 40%);">+      mcs_table: "qam64", /* without transform precoding */</span><br><span style="color: hsl(120, 100%, 40%);">+      mcs_table_tp: "qam64", /* with transform precoding */</span><br><span style="color: hsl(120, 100%, 40%);">+      ldpc_max_its: 5,</span><br><span style="color: hsl(120, 100%, 40%);">+      k2: 4, /* delay in slots from DCI to PUSCH */</span><br><span style="color: hsl(120, 100%, 40%);">+      p0_nominal_with_grant: -90,</span><br><span style="color: hsl(120, 100%, 40%);">+      msg3_k2: 5,</span><br><span style="color: hsl(120, 100%, 40%);">+      msg3_mcs: 4,</span><br><span style="color: hsl(120, 100%, 40%);">+      msg3_delta_power: 0, /* in dB */</span><br><span style="color: hsl(120, 100%, 40%);">+      beta_offset_ack_index: 9,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* hardcoded scheduling parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+      n_dmrs_cdm_groups: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      n_layer: 1,</span><br><span style="color: hsl(120, 100%, 40%);">+      /* if defined, force the PUSCH MCS for all UEs. Otherwise it is</span><br><span style="color: hsl(120, 100%, 40%);">+       computed from the last received PUSCH. */</span><br><span style="color: hsl(120, 100%, 40%);">+      //mcs: 16,</span><br><span style="color: hsl(120, 100%, 40%);">+      //max_mcs: 16,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* MAC configuration */</span><br><span style="color: hsl(120, 100%, 40%);">+    mac_config: {</span><br><span style="color: hsl(120, 100%, 40%);">+      msg3_max_harq_tx: 5,</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */</span><br><span style="color: hsl(120, 100%, 40%);">+      ul_max_consecutive_retx: 30, /* disconnect UE if reached */</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_max_consecutive_retx: 30, /* disconnect UE if reached */</span><br><span style="color: hsl(120, 100%, 40%);">+      periodic_bsr_timer: 20,</span><br><span style="color: hsl(120, 100%, 40%);">+      retx_bsr_timer: 320,</span><br><span style="color: hsl(120, 100%, 40%);">+      periodic_phr_timer: 500,</span><br><span style="color: hsl(120, 100%, 40%);">+      prohibit_phr_timer: 200,</span><br><span style="color: hsl(120, 100%, 40%);">+      phr_tx_power_factor_change: "dB3",</span><br><span style="color: hsl(120, 100%, 40%);">+      sr_prohibit_timer: 0, /* in ms, 0 to disable the timer */</span><br><span style="color: hsl(120, 100%, 40%);">+      sr_trans_max: 64,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    cipher_algo_pref: [${', '.join(list(dict.fromkeys(enb.cipher_list))).split("eea")[1] if len(list(dict.fromkeys(enb.cipher_list))) > 0 else ''}],</span><br><span style="color: hsl(120, 100%, 40%);">+    integ_algo_pref: [${', '.join(list(dict.fromkeys(enb.integrity_list))).split("eia")[1]}],</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    inactivity_timer: ${enb.inactivity_timer},</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    drb_config: "amarisoft_drb_nr.cfg",</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>\ No newline at end of file</span><br><span>diff --git a/src/osmo_gsm_tester/templates/amarisoft_rf_driver.cfg.tmpl b/src/osmo_gsm_tester/templates/amarisoft_rf_driver.cfg.tmpl</span><br><span>index 36d34ad..f2942d7 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/amarisoft_rf_driver.cfg.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/amarisoft_rf_driver.cfg.tmpl</span><br><span>@@ -15,6 +15,26 @@</span><br><span> tx_gain: ${trx.tx_gain}, /* TX gain (in dB) B2x0: 0 to 89.8 dB */</span><br><span> rx_gain: ${trx.rx_gain}, /* RX gain (in dB) B2x0: 0 to 73 dB */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+rf_ports: [</span><br><span style="color: hsl(120, 100%, 40%);">+  % if trx.rf_dev_type == 'sdr':</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+        sample_rate: 23.04,</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+        sample_rate: 61.44,</span><br><span style="color: hsl(120, 100%, 40%);">+        dl_freq: 3502.8, // Moves NR DL LO frequency -5.76 MHz</span><br><span style="color: hsl(120, 100%, 40%);">+        ul_freq: 3502.8, // Moves NR UL LO frequency -5.76 MHz</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+  % else:</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+      sample_rate: ${enb.sample_rate},</span><br><span style="color: hsl(120, 100%, 40%);">+    },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+      sample_rate: ${enb.sample_rate},</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+  % endif</span><br><span style="color: hsl(120, 100%, 40%);">+],</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> // only the B210 requires a sample offset</span><br><span> % if "b200" in trx.rf_dev_args:</span><br><span> tx_time_offset: -150,</span><br><span>diff --git a/sysmocom/defaults.conf b/sysmocom/defaults.conf</span><br><span>index 8740d62..f85ebd5 100644</span><br><span>--- a/sysmocom/defaults.conf</span><br><span>+++ b/sysmocom/defaults.conf</span><br><span>@@ -114,6 +114,7 @@</span><br><span>   duplex: fdd</span><br><span>   transmission_mode: 1</span><br><span>   num_cells: 1</span><br><span style="color: hsl(120, 100%, 40%);">+  num_nr_cells: 0</span><br><span>   inactivity_timer: 20000</span><br><span>   enable_measurements: false</span><br><span>   enable_dl_awgn: false</span><br><span>@@ -147,6 +148,7 @@</span><br><span>      root_seq_idx: 205</span><br><span>      scell_list: []</span><br><span>      ncell_list: []</span><br><span style="color: hsl(120, 100%, 40%);">+  nr_cell_list: []</span><br><span>   cipher_list:</span><br><span>    - eea0</span><br><span>    - eea2</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/24126">change 24126</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/24126"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia27bbc6db5920ce14bacabe8043601aa2adaa5fe </div>
<div style="display:none"> Gerrit-Change-Number: 24126 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: srs_andre <andre@softwareradiosystems.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>