aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlaiaL <alejandro.leal@softwareradiosystems.com>2021-03-16 14:53:45 +0100
committerAndre Puschmann <andre@softwareradiosystems.com>2021-05-03 13:43:44 +0200
commita17140fee4966a6234eb656cc95fd66445d4ce24 (patch)
tree1ecb1061ddd8579c84ae5af55effb0433e2a667f
parentc7737e63886e8a3d0e79b6f1d760b46e903ac2b7 (diff)
enb_srs: add support for eNB traces
this patch adds support for srsENB event tracing. it provides a cfg scenario to enable it. Change-Id: Icb2342acac5db87a0889cbf1b6c7bb1ad26c16fa
-rw-r--r--src/osmo_gsm_tester/obj/enb_srs.py52
-rw-r--r--src/osmo_gsm_tester/templates/srsenb.conf.tmpl6
-rw-r--r--sysmocom/defaults.conf1
-rw-r--r--sysmocom/scenarios/cfg-enb-tracing.conf3
4 files changed, 59 insertions, 3 deletions
diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py
index 83df5ed..05488af 100644
--- a/src/osmo_gsm_tester/obj/enb_srs.py
+++ b/src/osmo_gsm_tester/obj/enb_srs.py
@@ -31,6 +31,7 @@ from ..core import schema
def on_register_schemas():
config_schema = {
'enable_pcap': schema.BOOL_STR,
+ 'enable_tracing': schema.BOOL_STR,
'enable_ul_qam64': schema.BOOL_STR,
'log_all_level': schema.STR,
}
@@ -49,6 +50,8 @@ class srsENB(enb.eNodeB, srslte_common):
CFGFILE_DRB = 'srsenb_drb.conf'
LOGFILE = 'srsenb.log'
PCAPFILE = 'srsenb.pcap'
+ TRACINGFILE = 'srsenb_tracing.log'
+ METRICSFILE = 'srsenb_metrics.csv'
def __init__(self, testenv, conf):
super().__init__(testenv, conf, srsENB.BINFILE)
@@ -60,6 +63,7 @@ class srsENB(enb.eNodeB, srslte_common):
self.config_sib_file = None
self.config_rr_file = None
self.config_drb_file = None
+ self.tracing_file = None
self.log_file = None
self.pcap_file = None
self.process = None
@@ -71,9 +75,13 @@ class srsENB(enb.eNodeB, srslte_common):
self.remote_config_drb_file = None
self.remote_log_file = None
self.remote_pcap_file = None
+ self.remote_tracing_file = None
+ self.remote_metrics_file = None
self.enable_pcap = False
self.enable_ul_qam64 = False
+ self.enable_tracing = False
self.metrics_file = None
+ self.have_metrics_file = False
self.stop_sleep_time = 6 # We require at most 5s to stop
self.testenv = testenv
self._additional_args = []
@@ -90,6 +98,9 @@ class srsENB(enb.eNodeB, srslte_common):
self.sleep_after_stop()
# copy back files (may not exist, for instance if there was an early error of process):
+ self.scp_back_metrics(raiseException=False)
+
+ # copy back files (may not exist, for instance if there was an early error of process):
try:
self.rem_host.scpfrom('scp-back-log', self.remote_log_file, self.log_file)
except Exception as e:
@@ -99,12 +110,40 @@ class srsENB(enb.eNodeB, srslte_common):
self.rem_host.scpfrom('scp-back-pcap', self.remote_pcap_file, self.pcap_file)
except Exception as e:
self.log(repr(e))
+ if self.enable_tracing:
+ try:
+ self.rem_host.scpfrom('scp-back-tracing', self.remote_tracing_file, self.tracing_file)
+ except Exception as e:
+ self.log(repr(e))
# Collect KPIs for each TC
self.testenv.test().set_kpis(self.get_kpi_tree())
# Clean up for parent class:
super().cleanup()
+ def scp_back_metrics(self, raiseException=True):
+ ''' Copy back metrics only if they have not been copied back yet '''
+ if not self.have_metrics_file:
+ # file is not properly flushed until the process has stopped.
+ if self.running():
+ self.stop()
+
+ # only SCP back if not running locally
+ if not self._run_node.is_local():
+ try:
+ self.rem_host.scpfrom('scp-back-metrics', self.remote_metrics_file, self.metrics_file)
+ except Exception as e:
+ if raiseException:
+ self.err('Failed copying back metrics file from remote host')
+ raise e
+ else:
+ # only log error
+ self.log(repr(e))
+ # make sure to only call it once
+ self.have_metrics_file = True
+ else:
+ self.dbg('Metrics have already been copied back')
+
def start(self, epc):
self.log('Starting srsENB')
self._epc = epc
@@ -165,6 +204,8 @@ class srsENB(enb.eNodeB, srslte_common):
self.config_drb_file = self.run_dir.child(srsENB.CFGFILE_DRB)
self.log_file = self.run_dir.child(srsENB.LOGFILE)
self.pcap_file = self.run_dir.child(srsENB.PCAPFILE)
+ self.metrics_file = self.run_dir.child(srsENB.METRICSFILE)
+ self.tracing_file = self.run_dir.child(srsENB.TRACINGFILE)
if not self._run_node.is_local():
self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())
@@ -178,15 +219,21 @@ class srsENB(enb.eNodeB, srslte_common):
self.remote_config_drb_file = self.remote_run_dir.child(srsENB.CFGFILE_DRB)
self.remote_log_file = self.remote_run_dir.child(srsENB.LOGFILE)
self.remote_pcap_file = self.remote_run_dir.child(srsENB.PCAPFILE)
+ self.remote_metrics_file = self.remote_run_dir.child(srsENB.METRICSFILE)
+ self.remote_tracing_file = self.remote_run_dir.child(srsENB.TRACINGFILE)
values = super().configure(['srsenb'])
+ metricsfile = self.metrics_file if self._run_node.is_local() else self.remote_metrics_file
+ tracingfile = self.tracing_file if self._run_node.is_local() else self.remote_tracing_file
sibfile = self.config_sib_file if self._run_node.is_local() else self.remote_config_sib_file
rrfile = self.config_rr_file if self._run_node.is_local() else self.remote_config_rr_file
drbfile = self.config_drb_file if self._run_node.is_local() else self.remote_config_drb_file
logfile = self.log_file if self._run_node.is_local() else self.remote_log_file
pcapfile = self.pcap_file if self._run_node.is_local() else self.remote_pcap_file
- config.overlay(values, dict(enb=dict(sib_filename=sibfile,
+ config.overlay(values, dict(enb=dict(metrics_filename=metricsfile,
+ tracing_filename=tracingfile,
+ sib_filename=sibfile,
rr_filename=rrfile,
drb_filename=drbfile,
log_filename=logfile,
@@ -197,6 +244,9 @@ class srsENB(enb.eNodeB, srslte_common):
self.enable_pcap = util.str2bool(values['enb'].get('enable_pcap', 'false'))
config.overlay(values, dict(enb={'enable_pcap': self.enable_pcap}))
+ self.enable_tracing = util.str2bool(values['enb'].get('enable_tracing', 'false'))
+ config.overlay(values, dict(enb={'enable_tracing': self.enable_tracing}))
+
self.enable_ul_qam64 = util.str2bool(values['enb'].get('enable_ul_qam64', 'false'))
config.overlay(values, dict(enb={'enable_ul_qam64': self.enable_ul_qam64}))
diff --git a/src/osmo_gsm_tester/templates/srsenb.conf.tmpl b/src/osmo_gsm_tester/templates/srsenb.conf.tmpl
index 794edea..4ae176e 100644
--- a/src/osmo_gsm_tester/templates/srsenb.conf.tmpl
+++ b/src/osmo_gsm_tester/templates/srsenb.conf.tmpl
@@ -278,8 +278,10 @@ nof_prach_threads = 0
#pusch_8bit_decoder = false
#nof_phy_threads = 3
#metrics_period_secs = 1
-#metrics_csv_enable = false
-#metrics_csv_filename = /tmp/enb_metrics.csv
+metrics_csv_enable = true
+metrics_csv_filename = ${enb.metrics_filename}
+tracing_enable = ${enb.enable_tracing}
+tracing_filename = ${enb.tracing_filename}
#pregenerate_signals = false
#tx_amplitude = 0.6
#link_failure_nof_err = 50
diff --git a/sysmocom/defaults.conf b/sysmocom/defaults.conf
index eeb2b83..39b81a8 100644
--- a/sysmocom/defaults.conf
+++ b/sysmocom/defaults.conf
@@ -158,6 +158,7 @@ enb:
srsenb:
num_prb: 100
enable_pcap: false
+ enable_tracing: false
tx_gain: 80
rx_gain: 40
log_all_level: warning
diff --git a/sysmocom/scenarios/cfg-enb-tracing.conf b/sysmocom/scenarios/cfg-enb-tracing.conf
new file mode 100644
index 0000000..d8b373b
--- /dev/null
+++ b/sysmocom/scenarios/cfg-enb-tracing.conf
@@ -0,0 +1,3 @@
+config:
+ enb:
+ enable_tracing: true \ No newline at end of file