enb: Reuse run_node to hold run info

Change-Id: If396940f154813d42ff3d3364c44b8979179127f
This commit is contained in:
Pau Espin 2020-05-26 12:32:19 +02:00 committed by pespin
parent e921995ce7
commit 1abff4e260
6 changed files with 58 additions and 50 deletions

View File

@ -11,15 +11,21 @@ enb:
- label: srsENB-zmq
type: srsenb
rf_dev_type: zmq
remote_user: jenkins
addr: 172.18.50.101
run_node:
run_type: ssh
run_addr: 172.18.50.101
ssh_user: jenkins
ssh_addr: 172.18.50.101
- label: srsENB-B200
type: srsenb
rf_dev_type: uhd
rf_dev_args: 'type=b200,serial=317B9FE'
remote_user: jenkins
addr: 172.18.50.102
run_node:
run_type: ssh
run_addr: 172.18.50.102
ssh_user: jenkins
ssh_addr: 172.18.50.102
modem:
- label: srsUE-zmq

View File

@ -20,13 +20,12 @@
from abc import ABCMeta, abstractmethod
from ..core import log, config
from ..core import schema
from . import run_node
def on_register_schemas():
resource_schema = {
'label': schema.STR,
'type': schema.STR,
'remote_user': schema.STR,
'addr': schema.IPV4,
'gtp_bind_addr': schema.IPV4,
'id': schema.UINT,
'num_prb': schema.UINT,
@ -60,6 +59,8 @@ def on_register_schemas():
'cell_list[].dl_rfemu.addr': schema.IPV4,
'cell_list[].dl_rfemu.ports[]': schema.UINT,
}
for key, val in run_node.RunNode.schema().items():
resource_schema['run_node.%s' % key] = val
schema.register_resource_schema('enb', resource_schema)
class eNodeB(log.Origin, metaclass=ABCMeta):
@ -70,13 +71,11 @@ class eNodeB(log.Origin, metaclass=ABCMeta):
def __init__(self, testenv, conf, name):
super().__init__(log.C_RUN, '%s' % name)
self._conf = conf
self._addr = conf.get('addr', None)
if self._addr is None:
raise log.Error('addr not set')
self._run_node = run_node.RunNode.from_conf(conf.get('run_node', {}))
self._gtp_bind_addr = conf.get('gtp_bind_addr', None)
if self._gtp_bind_addr is None:
self._gtp_bind_addr = self._addr
self.set_name('%s_%s' % (name, self._addr))
self._gtp_bind_addr = self._run_node.run_addr()
self.set_name('%s_%s' % (name, self._run_node.run_addr()))
self._txmode = 0
self._id = None
self._num_prb = 0
@ -99,6 +98,7 @@ class eNodeB(log.Origin, metaclass=ABCMeta):
assert self._txmode
config.overlay(values, dict(enb={ 'num_ports': self.num_ports() }))
assert self._epc is not None
config.overlay(values, dict(enb={ 'addr': self.addr() }))
config.overlay(values, dict(enb={ 'mme_addr': self._epc.addr() }))
config.overlay(values, dict(enb={ 'gtp_bind_addr': self._gtp_bind_addr }))
self._num_cells = int(values['enb'].get('num_cells', None))
@ -235,7 +235,7 @@ class eNodeB(log.Origin, metaclass=ABCMeta):
pass
def addr(self):
return self._addr
return self._run_node.run_addr()
def ue_max_rate(self, downlink=True):
# The max rate for a single UE per PRB configuration in TM1 with MCS 28 QAM64

View File

@ -69,7 +69,6 @@ class AmarisoftENB(enb.eNodeB):
self.remote_log_file = None
self.enable_measurements = False
self.testenv = testenv
self.remote_user = conf.get('remote_user', None)
if not rf_type_valid(conf.get('rf_dev_type', None)):
raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
@ -83,7 +82,7 @@ class AmarisoftENB(enb.eNodeB):
def cleanup(self):
if self.process is None:
return
if self.setup_runs_locally():
if self._run_node.is_local():
return
# copy back files (may not exist, for instance if there was an early error of process):
try:
@ -91,10 +90,6 @@ class AmarisoftENB(enb.eNodeB):
except Exception as e:
self.log(repr(e))
def setup_runs_locally(self):
return self.remote_user is None
def start(self, epc):
self.log('Starting AmarisoftENB')
self._epc = epc
@ -107,7 +102,7 @@ class AmarisoftENB(enb.eNodeB):
self.process.stdin_write('t\n')
def _start(self):
if self.setup_runs_locally():
if self._run_node.is_local():
env = { 'LD_LIBRARY_PATH': util.prepend_library_path(self.inst) }
binary = self.inst.child('.', AmarisoftENB.BINFILE)
self.dbg(run_dir=self.run_dir, binary=binary, env=env)
@ -141,8 +136,8 @@ class AmarisoftENB(enb.eNodeB):
self.config_drb_file = self.run_dir.child(AmarisoftENB.CFGFILE_DRB)
self.log_file = self.run_dir.child(AmarisoftENB.LOGFILE)
if not self.setup_runs_locally():
self.rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self._addr)
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())
remote_prefix_dir = util.Dir(AmarisoftENB.REMOTE_DIR)
self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))
remote_run_dir = util.Dir(remote_prefix_dir.child(AmarisoftENB.BINFILE))
@ -186,7 +181,7 @@ class AmarisoftENB(enb.eNodeB):
config.overlay(values, dict(enb=dict(rf_dev_args=rf_dev_args)))
logfile = self.log_file if self.setup_runs_locally() else self.remote_log_file
logfile = self.log_file if self._run_node.is_local() else self.remote_log_file
config.overlay(values, dict(enb=dict(log_filename=logfile)))
# rf driver is shared between amarisoft enb and ue, so it has a
@ -205,7 +200,7 @@ class AmarisoftENB(enb.eNodeB):
self.gen_conf_file(self.config_rf_file, AmarisoftENB.CFGFILE_RF, values)
self.gen_conf_file(self.config_drb_file, AmarisoftENB.CFGFILE_DRB, values)
if not self.setup_runs_locally():
if not self._run_node.is_local():
self.rem_host.recreate_remote_dir(self.remote_inst)
self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)
self.rem_host.recreate_remote_dir(remote_run_dir)

View File

@ -68,7 +68,6 @@ class srsENB(enb.eNodeB):
self.remote_pcap_file = None
self.enable_pcap = False
self.testenv = testenv
self.remote_user = conf.get('remote_user', None)
self._additional_args = []
if not rf_type_valid(conf.get('rf_dev_type', None)):
raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
@ -76,7 +75,7 @@ class srsENB(enb.eNodeB):
def cleanup(self):
if self.process is None:
return
if self.setup_runs_locally():
if self._run_node.is_local():
return
# copy back files (may not exist, for instance if there was an early error of process):
try:
@ -89,18 +88,15 @@ class srsENB(enb.eNodeB):
except Exception as e:
self.log(repr(e))
def setup_runs_locally(self):
return self.remote_user is None
def start(self, epc):
self.log('Starting srsENB')
self._epc = epc
self.run_dir = util.Dir(self.testenv.test().get_run_dir().new_dir(self.name()))
self.configure()
if self.remote_user:
self.start_remotely()
else:
if self._run_node.is_local():
self.start_locally()
else:
self.start_remotely()
# send t+Enter to enable console trace
self.dbg('Enabling console trace')
@ -149,8 +145,8 @@ class srsENB(enb.eNodeB):
self.log_file = self.run_dir.child(srsENB.LOGFILE)
self.pcap_file = self.run_dir.child(srsENB.PCAPFILE)
if not self.setup_runs_locally():
self.rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self._addr)
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())
remote_prefix_dir = util.Dir(srsENB.REMOTE_DIR)
self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))
self.remote_run_dir = util.Dir(remote_prefix_dir.child(srsENB.BINFILE))
@ -164,11 +160,11 @@ class srsENB(enb.eNodeB):
values = super().configure(['srsenb'])
sibfile = self.config_sib_file if self.setup_runs_locally() else self.remote_config_sib_file
rrfile = self.config_rr_file if self.setup_runs_locally() else self.remote_config_rr_file
drbfile = self.config_drb_file if self.setup_runs_locally() else self.remote_config_drb_file
logfile = self.log_file if self.setup_runs_locally() else self.remote_log_file
pcapfile = self.pcap_file if self.setup_runs_locally() else self.remote_pcap_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,
rr_filename=rrfile,
drb_filename=drbfile,
@ -209,7 +205,7 @@ class srsENB(enb.eNodeB):
self.gen_conf_file(self.config_rr_file, srsENB.CFGFILE_RR, values)
self.gen_conf_file(self.config_drb_file, srsENB.CFGFILE_DRB, values)
if not self.setup_runs_locally():
if not self._run_node.is_local():
self.rem_host.recreate_remote_dir(self.remote_inst)
self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)
self.rem_host.recreate_remote_dir(self.remote_run_dir)

View File

@ -21,13 +21,7 @@ from ..core import log
from ..core import schema
def on_register_schemas():
resource_schema = {
'run_type': schema.STR,
'run_addr': schema.IPV4,
'ssh_user': schema.STR,
'ssh_addr': schema.IPV4,
'run_label': schema.STR,
}
resource_schema = RunNode.schema()
schema.register_resource_schema('run_node', resource_schema)
@ -63,6 +57,17 @@ class RunNode(log.Origin):
conf.get('ssh_user', None), conf.get('ssh_addr', None),
conf.get('run_label', None))
@classmethod
def schema(cls):
resource_schema = {
'run_type': schema.STR,
'run_addr': schema.IPV4,
'ssh_user': schema.STR,
'ssh_addr': schema.IPV4,
'run_label': schema.STR,
}
return resource_schema
def is_local(self):
return self._type == RunNode.T_LOCAL

View File

@ -159,15 +159,21 @@ enb:
type: srsenb
rf_dev_type: zmq
rf_dev_args: auto
remote_user: jenkins
addr: 10.42.42.117
run_node:
run_type: ssh
run_addr: 10.42.42.117
ssh_user: jenkins
ssh_addr: 10.42.42.117
- label: srsENB-B200
type: srsenb
rf_dev_type: uhd
rf_dev_args: "type=b200,serial=306BD11"
remote_user: jenkins
addr: 10.42.42.117
run_node:
run_type: ssh
run_addr: 10.42.42.117
ssh_user: jenkins
ssh_addr: 10.42.42.117
arfcn:
- arfcn: 512