<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/20662">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  pespin: Looks good to me, approved; Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">enb: add basic TDD config option<br><br>this patch adds the basic notion of FDD and TDD duplexing modes<br>to the eNB object. So far we've always assume FDD.<br><br>Since only Amarisoft eNB supports TDD, the required config<br>template changes, etc. are only applied there.<br><br>The patch also adds a scenario to enable the default TDD config.<br><br>Change-Id: I37216b5bfdf527d221913283b6c41d3c8fd6b500<br>---<br>M src/osmo_gsm_tester/obj/enb.py<br>M src/osmo_gsm_tester/obj/enb_amarisoft.py<br>M src/osmo_gsm_tester/templates/amarisoft_enb.cfg.tmpl<br>M sysmocom/defaults.conf<br>A sysmocom/scenarios/mod-enb-tdd.conf<br>5 files changed, 49 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/obj/enb.py b/src/osmo_gsm_tester/obj/enb.py</span><br><span>index f15bbe3..906164e 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>@@ -30,6 +30,9 @@</span><br><span>         'gtp_bind_addr': schema.IPV4,</span><br><span>         'id': schema.UINT,</span><br><span>         'num_prb': schema.UINT,</span><br><span style="color: hsl(120, 100%, 40%);">+        'duplex': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        'tdd_uldl_config': schema.UINT,</span><br><span style="color: hsl(120, 100%, 40%);">+        'tdd_special_subframe_pattern': schema.UINT,</span><br><span>         'transmission_mode': schema.LTE_TRANSMISSION_MODE,</span><br><span>         'tx_gain': schema.UINT,</span><br><span>         'rx_gain': schema.UINT,</span><br><span>@@ -83,6 +86,7 @@</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._duplex = None</span><br><span>         self._num_prb = 0</span><br><span>         self._num_cells = None</span><br><span>         self._epc = None</span><br><span>@@ -144,6 +148,8 @@</span><br><span>         config.overlay(values, dict(enb=self._conf))</span><br><span>         self._id = int(values['enb'].get('id', None))</span><br><span>         assert self._id is not None</span><br><span style="color: hsl(120, 100%, 40%);">+        self._duplex = values['enb'].get('duplex', None)</span><br><span style="color: hsl(120, 100%, 40%);">+        assert self._duplex</span><br><span>         self._num_prb = int(values['enb'].get('num_prb', None))</span><br><span>         assert self._num_prb</span><br><span>         self._txmode = int(values['enb'].get('transmission_mode', None))</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 9bed63e..ef28100 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>@@ -263,6 +263,12 @@</span><br><span>         return rfemu_obj</span><br><span> </span><br><span>     def ue_max_rate(self, downlink=True, num_carriers=1):</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 style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    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>         max_phy_rate_tm1_dl = { 6 : 3.2e6,</span><br><span>                                15 : 9.2e6,</span><br><span>@@ -299,4 +305,19 @@</span><br><span> </span><br><span>         return max_rate</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def ue_max_rate_tdd(self, downlink, num_carriers):</span><br><span style="color: hsl(120, 100%, 40%);">+        # Max rate calculation for TDD depends on the acutal TDD configuration</span><br><span style="color: hsl(120, 100%, 40%);">+        # See: https://www.sharetechnote.com/html/Handbook_LTE_ThroughputCalculationExample_TDD.html</span><br><span style="color: hsl(120, 100%, 40%);">+        # and https://i0.wp.com/www.techtrained.com/wp-content/uploads/2017/09/Blog_Post_1_TDD_Max_Throughput_Theoretical.jpg</span><br><span style="color: hsl(120, 100%, 40%);">+        max_phy_rate_tdd_uldl_config0_sp0 = { 6 : 1.5e6,</span><br><span style="color: hsl(120, 100%, 40%);">+                               15 : 3.7e6,</span><br><span style="color: hsl(120, 100%, 40%);">+                               25 : 6.1e6,</span><br><span style="color: hsl(120, 100%, 40%);">+                               50 : 12.2e6,</span><br><span style="color: hsl(120, 100%, 40%);">+                               75 : 18.4e6,</span><br><span style="color: hsl(120, 100%, 40%);">+                               100 : 54.5e6 }</span><br><span style="color: hsl(120, 100%, 40%);">+        if downlink:</span><br><span style="color: hsl(120, 100%, 40%);">+            max_rate = max_phy_rate_tdd_uldl_config0_sp0[self.num_prb()]</span><br><span style="color: hsl(120, 100%, 40%);">+        else:</span><br><span style="color: hsl(120, 100%, 40%);">+            return 1e6 # dummy value, we need to replace that later</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_enb.cfg.tmpl b/src/osmo_gsm_tester/templates/amarisoft_enb.cfg.tmpl</span><br><span>index c5b8a1e..a0f22ff 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>@@ -100,6 +100,11 @@</span><br><span>       "${'{0:03}'.format(int(enb.mcc))}${'{0:02}'.format(int(enb.mnc))}",</span><br><span>     ],</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+% if enb.get('duplex') == "tdd":</span><br><span style="color: hsl(120, 100%, 40%);">+    uldl_config: ${enb.tdd_uldl_config},</span><br><span style="color: hsl(120, 100%, 40%);">+    sp_config: ${enb.tdd_special_subframe_pattern},</span><br><span style="color: hsl(120, 100%, 40%);">+% endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> % if int(enb.get('transmission_mode')) == 1:</span><br><span>     n_antenna_dl: 1, /* number of DL antennas */</span><br><span>     n_antenna_ul: 1, /* number of UL antennas */</span><br><span>@@ -180,7 +185,10 @@</span><br><span>         /* TDD ack/nack feedback mode when a rel 10 UE is detected. It</span><br><span>            can be "bundling", "multiplexing", "cs" or "pucch3". By</span><br><span>            default is it the same as tdd_ack_nack_feedback_mode. */</span><br><span style="color: hsl(120, 100%, 40%);">+% if enb.get('duplex') == "tdd":</span><br><span style="color: hsl(120, 100%, 40%);">+        tdd_ack_nack_feedback_mode: "bundling",</span><br><span>         // tdd_ack_nack_feedback_mode_r10: "cs",</span><br><span style="color: hsl(120, 100%, 40%);">+% endif</span><br><span> </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>diff --git a/sysmocom/defaults.conf b/sysmocom/defaults.conf</span><br><span>index 419c3a4..8201d05 100644</span><br><span>--- a/sysmocom/defaults.conf</span><br><span>+++ b/sysmocom/defaults.conf</span><br><span>@@ -110,6 +110,7 @@</span><br><span>   id: 0x19B</span><br><span>   mcc: 901</span><br><span>   mnc: 70</span><br><span style="color: hsl(120, 100%, 40%);">+  duplex: fdd</span><br><span>   transmission_mode: 1</span><br><span>   num_cells: 1</span><br><span>   inactivity_timer: 20000</span><br><span>diff --git a/sysmocom/scenarios/mod-enb-tdd.conf b/sysmocom/scenarios/mod-enb-tdd.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..3f6355b</span><br><span>--- /dev/null</span><br><span>+++ b/sysmocom/scenarios/mod-enb-tdd.conf</span><br><span>@@ -0,0 +1,13 @@</span><br><span style="color: hsl(120, 100%, 40%);">+# TDD cell</span><br><span style="color: hsl(120, 100%, 40%);">+modifiers:</span><br><span style="color: hsl(120, 100%, 40%);">+  enb:</span><br><span style="color: hsl(120, 100%, 40%);">+  - duplex: tdd</span><br><span style="color: hsl(120, 100%, 40%);">+    tdd_uldl_config: 0</span><br><span style="color: hsl(120, 100%, 40%);">+    tdd_special_subframe_pattern: 4</span><br><span style="color: hsl(120, 100%, 40%);">+    cell_list:</span><br><span style="color: hsl(120, 100%, 40%);">+    - cell_id: 0x01</span><br><span style="color: hsl(120, 100%, 40%);">+      pci: 0x01</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_earfcn: 40620</span><br><span style="color: hsl(120, 100%, 40%);">+      rf_port: 0</span><br><span style="color: hsl(120, 100%, 40%);">+      scell_list: []</span><br><span style="color: hsl(120, 100%, 40%);">+      ncell_list: []</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/20662">change 20662</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/+/20662"/><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: I37216b5bfdf527d221913283b6c41d3c8fd6b500 </div>
<div style="display:none"> Gerrit-Change-Number: 20662 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: srs_andre <andre@softwareradiosystems.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>