<p>srs_andre has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/24041">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">enb_srs: add support for eNB traces<br><br>this patch adds support for srsENB event tracing. it provides<br>a cfg scenario to enable it.<br><br>Change-Id: Icb2342acac5db87a0889cbf1b6c7bb1ad26c16fa<br>---<br>M src/osmo_gsm_tester/obj/enb_srs.py<br>M src/osmo_gsm_tester/templates/srsenb.conf.tmpl<br>M sysmocom/defaults.conf<br>A sysmocom/scenarios/cfg-enb-tracing.conf<br>4 files changed, 59 insertions(+), 3 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/41/24041/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py</span><br><span>index 83df5ed..05488af 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/enb_srs.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/enb_srs.py</span><br><span>@@ -31,6 +31,7 @@</span><br><span> def on_register_schemas():</span><br><span>     config_schema = {</span><br><span>         'enable_pcap': schema.BOOL_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        'enable_tracing': schema.BOOL_STR,</span><br><span>         'enable_ul_qam64': schema.BOOL_STR,</span><br><span>         'log_all_level': schema.STR,</span><br><span>         }</span><br><span>@@ -49,6 +50,8 @@</span><br><span>     CFGFILE_DRB = 'srsenb_drb.conf'</span><br><span>     LOGFILE = 'srsenb.log'</span><br><span>     PCAPFILE = 'srsenb.pcap'</span><br><span style="color: hsl(120, 100%, 40%);">+    TRACINGFILE = 'srsenb_tracing.log'</span><br><span style="color: hsl(120, 100%, 40%);">+    METRICSFILE = 'srsenb_metrics.csv'</span><br><span> </span><br><span>     def __init__(self, testenv, conf):</span><br><span>         super().__init__(testenv, conf, srsENB.BINFILE)</span><br><span>@@ -60,6 +63,7 @@</span><br><span>         self.config_sib_file = None</span><br><span>         self.config_rr_file = None</span><br><span>         self.config_drb_file = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.tracing_file = None</span><br><span>         self.log_file = None</span><br><span>         self.pcap_file = None</span><br><span>         self.process = None</span><br><span>@@ -71,9 +75,13 @@</span><br><span>         self.remote_config_drb_file = None</span><br><span>         self.remote_log_file = None</span><br><span>         self.remote_pcap_file = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.remote_tracing_file = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.remote_metrics_file = None</span><br><span>         self.enable_pcap = False</span><br><span>         self.enable_ul_qam64 = False</span><br><span style="color: hsl(120, 100%, 40%);">+        self.enable_tracing = False</span><br><span>         self.metrics_file = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.have_metrics_file = False</span><br><span>         self.stop_sleep_time = 6 # We require at most 5s to stop</span><br><span>         self.testenv = testenv</span><br><span>         self._additional_args = []</span><br><span>@@ -90,6 +98,9 @@</span><br><span>         self.sleep_after_stop()</span><br><span> </span><br><span>         # copy back files (may not exist, for instance if there was an early error of process):</span><br><span style="color: hsl(120, 100%, 40%);">+        self.scp_back_metrics(raiseException=False)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        # copy back files (may not exist, for instance if there was an early error of process):</span><br><span>         try:</span><br><span>             self.rem_host.scpfrom('scp-back-log', self.remote_log_file, self.log_file)</span><br><span>         except Exception as e:</span><br><span>@@ -99,12 +110,40 @@</span><br><span>                 self.rem_host.scpfrom('scp-back-pcap', self.remote_pcap_file, self.pcap_file)</span><br><span>             except Exception as e:</span><br><span>                 self.log(repr(e))</span><br><span style="color: hsl(120, 100%, 40%);">+        if self.enable_tracing:</span><br><span style="color: hsl(120, 100%, 40%);">+            try:</span><br><span style="color: hsl(120, 100%, 40%);">+                self.rem_host.scpfrom('scp-back-tracing', self.remote_tracing_file, self.tracing_file)</span><br><span style="color: hsl(120, 100%, 40%);">+            except Exception as e:</span><br><span style="color: hsl(120, 100%, 40%);">+                self.log(repr(e))</span><br><span> </span><br><span>         # Collect KPIs for each TC</span><br><span>         self.testenv.test().set_kpis(self.get_kpi_tree())</span><br><span>         # Clean up for parent class:</span><br><span>         super().cleanup()</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def scp_back_metrics(self, raiseException=True):</span><br><span style="color: hsl(120, 100%, 40%);">+        ''' Copy back metrics only if they have not been copied back yet '''</span><br><span style="color: hsl(120, 100%, 40%);">+        if not self.have_metrics_file:</span><br><span style="color: hsl(120, 100%, 40%);">+            # file is not properly flushed until the process has stopped.</span><br><span style="color: hsl(120, 100%, 40%);">+            if self.running():</span><br><span style="color: hsl(120, 100%, 40%);">+                self.stop()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            # only SCP back if not running locally</span><br><span style="color: hsl(120, 100%, 40%);">+            if not self._run_node.is_local():</span><br><span style="color: hsl(120, 100%, 40%);">+                try:</span><br><span style="color: hsl(120, 100%, 40%);">+                    self.rem_host.scpfrom('scp-back-metrics', self.remote_metrics_file, self.metrics_file)</span><br><span style="color: hsl(120, 100%, 40%);">+                except Exception as e:</span><br><span style="color: hsl(120, 100%, 40%);">+                    if raiseException:</span><br><span style="color: hsl(120, 100%, 40%);">+                        self.err('Failed copying back metrics file from remote host')</span><br><span style="color: hsl(120, 100%, 40%);">+                        raise e</span><br><span style="color: hsl(120, 100%, 40%);">+                    else:</span><br><span style="color: hsl(120, 100%, 40%);">+                        # only log error</span><br><span style="color: hsl(120, 100%, 40%);">+                        self.log(repr(e))</span><br><span style="color: hsl(120, 100%, 40%);">+            # make sure to only call it once</span><br><span style="color: hsl(120, 100%, 40%);">+            self.have_metrics_file = True</span><br><span style="color: hsl(120, 100%, 40%);">+        else:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.dbg('Metrics have already been copied back')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def start(self, epc):</span><br><span>         self.log('Starting srsENB')</span><br><span>         self._epc = epc</span><br><span>@@ -165,6 +204,8 @@</span><br><span>         self.config_drb_file = self.run_dir.child(srsENB.CFGFILE_DRB)</span><br><span>         self.log_file = self.run_dir.child(srsENB.LOGFILE)</span><br><span>         self.pcap_file = self.run_dir.child(srsENB.PCAPFILE)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.metrics_file = self.run_dir.child(srsENB.METRICSFILE)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.tracing_file = self.run_dir.child(srsENB.TRACINGFILE)</span><br><span> </span><br><span>         if not self._run_node.is_local():</span><br><span>             self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())</span><br><span>@@ -178,15 +219,21 @@</span><br><span>             self.remote_config_drb_file = self.remote_run_dir.child(srsENB.CFGFILE_DRB)</span><br><span>             self.remote_log_file = self.remote_run_dir.child(srsENB.LOGFILE)</span><br><span>             self.remote_pcap_file = self.remote_run_dir.child(srsENB.PCAPFILE)</span><br><span style="color: hsl(120, 100%, 40%);">+            self.remote_metrics_file = self.remote_run_dir.child(srsENB.METRICSFILE)</span><br><span style="color: hsl(120, 100%, 40%);">+            self.remote_tracing_file = self.remote_run_dir.child(srsENB.TRACINGFILE)</span><br><span> </span><br><span>         values = super().configure(['srsenb'])</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        metricsfile = self.metrics_file if self._run_node.is_local() else self.remote_metrics_file</span><br><span style="color: hsl(120, 100%, 40%);">+        tracingfile = self.tracing_file if self._run_node.is_local() else self.remote_tracing_file</span><br><span>         sibfile = self.config_sib_file if self._run_node.is_local() else self.remote_config_sib_file</span><br><span>         rrfile = self.config_rr_file if self._run_node.is_local() else self.remote_config_rr_file</span><br><span>         drbfile = self.config_drb_file if self._run_node.is_local() else self.remote_config_drb_file</span><br><span>         logfile = self.log_file if self._run_node.is_local() else self.remote_log_file</span><br><span>         pcapfile = self.pcap_file if self._run_node.is_local() else self.remote_pcap_file</span><br><span style="color: hsl(0, 100%, 40%);">-        config.overlay(values, dict(enb=dict(sib_filename=sibfile,</span><br><span style="color: hsl(120, 100%, 40%);">+        config.overlay(values, dict(enb=dict(metrics_filename=metricsfile,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             tracing_filename=tracingfile,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             sib_filename=sibfile,</span><br><span>                                              rr_filename=rrfile,</span><br><span>                                              drb_filename=drbfile,</span><br><span>                                              log_filename=logfile,</span><br><span>@@ -197,6 +244,9 @@</span><br><span>         self.enable_pcap = util.str2bool(values['enb'].get('enable_pcap', 'false'))</span><br><span>         config.overlay(values, dict(enb={'enable_pcap': self.enable_pcap}))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        self.enable_tracing = util.str2bool(values['enb'].get('enable_tracing', 'false'))</span><br><span style="color: hsl(120, 100%, 40%);">+        config.overlay(values, dict(enb={'enable_tracing': self.enable_tracing}))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         self.enable_ul_qam64 = util.str2bool(values['enb'].get('enable_ul_qam64', 'false'))</span><br><span>         config.overlay(values, dict(enb={'enable_ul_qam64': self.enable_ul_qam64}))</span><br><span> </span><br><span>diff --git a/src/osmo_gsm_tester/templates/srsenb.conf.tmpl b/src/osmo_gsm_tester/templates/srsenb.conf.tmpl</span><br><span>index 794edea..4ae176e 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/srsenb.conf.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/srsenb.conf.tmpl</span><br><span>@@ -278,8 +278,10 @@</span><br><span> #pusch_8bit_decoder   = false</span><br><span> #nof_phy_threads = 3</span><br><span> #metrics_period_secs  = 1</span><br><span style="color: hsl(0, 100%, 40%);">-#metrics_csv_enable   = false</span><br><span style="color: hsl(0, 100%, 40%);">-#metrics_csv_filename = /tmp/enb_metrics.csv</span><br><span style="color: hsl(120, 100%, 40%);">+metrics_csv_enable  = true</span><br><span style="color: hsl(120, 100%, 40%);">+metrics_csv_filename = ${enb.metrics_filename}</span><br><span style="color: hsl(120, 100%, 40%);">+tracing_enable       = ${enb.enable_tracing}</span><br><span style="color: hsl(120, 100%, 40%);">+tracing_filename     = ${enb.tracing_filename}</span><br><span> #pregenerate_signals  = false</span><br><span> #tx_amplitude         = 0.6</span><br><span> #link_failure_nof_err = 50</span><br><span>diff --git a/sysmocom/defaults.conf b/sysmocom/defaults.conf</span><br><span>index eeb2b83..39b81a8 100644</span><br><span>--- a/sysmocom/defaults.conf</span><br><span>+++ b/sysmocom/defaults.conf</span><br><span>@@ -158,6 +158,7 @@</span><br><span> srsenb:</span><br><span>   num_prb: 100</span><br><span>   enable_pcap: false</span><br><span style="color: hsl(120, 100%, 40%);">+  enable_tracing: false</span><br><span>   tx_gain: 80</span><br><span>   rx_gain: 40</span><br><span>   log_all_level: warning</span><br><span>diff --git a/sysmocom/scenarios/cfg-enb-tracing.conf b/sysmocom/scenarios/cfg-enb-tracing.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..d8b373b</span><br><span>--- /dev/null</span><br><span>+++ b/sysmocom/scenarios/cfg-enb-tracing.conf</span><br><span>@@ -0,0 +1,3 @@</span><br><span style="color: hsl(120, 100%, 40%);">+config:</span><br><span style="color: hsl(120, 100%, 40%);">+  enb:</span><br><span style="color: hsl(120, 100%, 40%);">+    enable_tracing: true</span><br><span>\ No newline at end of file</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/24041">change 24041</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/+/24041"/><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: Icb2342acac5db87a0889cbf1b6c7bb1ad26c16fa </div>
<div style="display:none"> Gerrit-Change-Number: 24041 </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>