OsmoPcuSysmo: Integrate with Sysmobts and OsmoSgsn
Change-Id: I01485c5d74e5fe62d0ffea9eb1fad29041426eef
diff --git a/src/osmo_gsm_tester/bts_sysmo.py b/src/osmo_gsm_tester/bts_sysmo.py
index 1a7b139..812a247 100644
--- a/src/osmo_gsm_tester/bts_sysmo.py
+++ b/src/osmo_gsm_tester/bts_sysmo.py
@@ -19,11 +19,12 @@
import os
import pprint
-from . import log, config, util, template, process
+from . import log, config, util, template, process, pcu_sysmo
class SysmoBts(log.Origin):
suite_run = None
bsc = None
+ sgsn = None
run_dir = None
inst = None
remote_inst = None
@@ -32,8 +33,9 @@
lac = None
cellid = None
proc_bts = None
+ _pcu = None
- REMOTE_DIR = '/osmo-gsm-tester'
+ REMOTE_DIR = '/osmo-gsm-tester-bts'
BTS_SYSMO_BIN = 'osmo-bts-sysmo'
BTS_SYSMO_CFG = 'osmo-bts-sysmo.cfg'
@@ -77,15 +79,22 @@
remote_lib = self.remote_inst.child('lib')
remote_binary = self.remote_inst.child('bin', 'osmo-bts-sysmo')
- self.proc_bts = self.launch_remote('osmo-bts-sysmo',
- ('LD_LIBRARY_PATH=%s' % remote_lib,
- remote_binary, '-c', remote_config_file, '-r', '1',
- '-i', self.bsc.addr()),
- remote_cwd=remote_run_dir)
+
+ args = ('LD_LIBRARY_PATH=%s' % remote_lib,
+ remote_binary, '-c', remote_config_file, '-r', '1',
+ '-i', self.bsc.addr())
+
+ if self._direct_pcu_enabled():
+ args += ('-M',)
+
+ self.proc_bts = self.launch_remote('osmo-bts-sysmo', args, remote_cwd=remote_run_dir)
def cleanup(self):
pass
+ def _direct_pcu_enabled(self):
+ return util.str2bool(self.conf.get('direct_pcu'))
+
def pcu_socket_path(self):
return os.path.join(SysmoBts.REMOTE_DIR, 'pcu_bts')
@@ -117,9 +126,17 @@
log.ctx(proc)
raise log.Error('Exited in error')
+ def pcu(self):
+ if self._pcu is None:
+ self._pcu = pcu_sysmo.OsmoPcuSysmo(self.suite_run, self, self.conf)
+ return self._pcu
+
def remote_addr(self):
return self.conf.get('addr')
+ def pcu_socket_path(self):
+ return os.path.join(SysmoBts.REMOTE_DIR, 'pcu_bts')
+
def configure(self):
if self.bsc is None:
raise RuntimeError('BTS needs to be added to a BSC or NITB before it can be configured')
@@ -152,6 +169,10 @@
if self.cellid is not None:
config.overlay(values, { 'cell_identity': self.cellid })
config.overlay(values, self.conf)
+
+ sgsn_conf = {} if self.sgsn is None else self.sgsn.conf_for_client()
+ config.overlay(values, sgsn_conf)
+
self.dbg(conf=values)
return values
@@ -163,6 +184,9 @@
def set_bsc(self, bsc):
self.bsc = bsc
+ def set_sgsn(self, sgsn):
+ self.sgsn = sgsn
+
def set_lac(self, lac):
self.lac = lac
diff --git a/src/osmo_gsm_tester/osmo_sgsn.py b/src/osmo_gsm_tester/osmo_sgsn.py
index 7a9c5ff..8659186 100644
--- a/src/osmo_gsm_tester/osmo_sgsn.py
+++ b/src/osmo_gsm_tester/osmo_sgsn.py
@@ -91,4 +91,7 @@
def running(self):
return not self.process.terminated()
+ def bts_add(self, bts):
+ bts.set_sgsn(self)
+
# vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py
index 8412d6a..604a9e9 100644
--- a/src/osmo_gsm_tester/resource.py
+++ b/src/osmo_gsm_tester/resource.py
@@ -55,6 +55,7 @@
'bts[].band': schema.BAND,
'bts[].trx_remote_ip': schema.IPV4,
'bts[].launch_trx': schema.BOOL_STR,
+ 'bts[].direct_pcu': schema.BOOL_STR,
'bts[].ciphers[]': schema.CIPHER,
'bts[].trx_list[].hw_addr': schema.HWADDR,
'bts[].trx_list[].net_device': schema.STR,
diff --git a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
index 18b3761..2466f9f 100644
--- a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
+++ b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl
@@ -59,7 +59,38 @@
rach max transmission 7
ip.access unit_id ${bts.ipa_unit_id} 0
oml ip.access stream_id ${bts.stream_id} line 0
+% if bts.get('sgsn', False):
+ gprs mode gprs
+ gprs routing area 0
+ gprs network-control-order nc1
+ gprs cell bvci 1800
+ gprs cell timer blocking-timer 3
+ gprs cell timer blocking-retries 3
+ gprs cell timer unblocking-retries 3
+ gprs cell timer reset-timer 3
+ gprs cell timer reset-retries 3
+ gprs cell timer suspend-timer 10
+ gprs cell timer suspend-retries 3
+ gprs cell timer resume-timer 10
+ gprs cell timer resume-retries 3
+ gprs cell timer capability-update-timer 10
+ gprs cell timer capability-update-retries 3
+ gprs nsei 1800
+ gprs ns timer tns-block 3
+ gprs ns timer tns-block-retries 3
+ gprs ns timer tns-reset 3
+ gprs ns timer tns-reset-retries 3
+ gprs ns timer tns-test 30
+ gprs ns timer tns-alive 3
+ gprs ns timer tns-alive-retries 10
+ gprs nsvc 0 nsvci 1800
+ gprs nsvc 0 local udp port 23020
+ gprs nsvc 0 remote udp port 23000
+ gprs nsvc 0 remote ip ${bts.sgsn.ip_address.addr}
+ no force-combined-si
+% else:
gprs mode none
+% endif
% for trx in bts.trx_list:
trx ${loop.index}
rf_locked 0
diff --git a/src/osmo_gsm_tester/templates/osmo-nitb.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-nitb.cfg.tmpl
index 803a375..211b4cc 100644
--- a/src/osmo_gsm_tester/templates/osmo-nitb.cfg.tmpl
+++ b/src/osmo_gsm_tester/templates/osmo-nitb.cfg.tmpl
@@ -49,7 +49,38 @@
rach max transmission 7
ip.access unit_id ${bts.ipa_unit_id} 0
oml ip.access stream_id ${bts.stream_id} line 0
+% if bts.get('sgsn', False):
+ gprs mode gprs
+ gprs routing area 0
+ gprs network-control-order nc1
+ gprs cell bvci 1800
+ gprs cell timer blocking-timer 3
+ gprs cell timer blocking-retries 3
+ gprs cell timer unblocking-retries 3
+ gprs cell timer reset-timer 3
+ gprs cell timer reset-retries 3
+ gprs cell timer suspend-timer 10
+ gprs cell timer suspend-retries 3
+ gprs cell timer resume-timer 10
+ gprs cell timer resume-retries 3
+ gprs cell timer capability-update-timer 10
+ gprs cell timer capability-update-retries 3
+ gprs nsei 1800
+ gprs ns timer tns-block 3
+ gprs ns timer tns-block-retries 3
+ gprs ns timer tns-reset 3
+ gprs ns timer tns-reset-retries 3
+ gprs ns timer tns-test 30
+ gprs ns timer tns-alive 3
+ gprs ns timer tns-alive-retries 10
+ gprs nsvc 0 nsvci 1800
+ gprs nsvc 0 local udp port 23020
+ gprs nsvc 0 remote udp port 23000
+ gprs nsvc 0 remote ip ${bts.sgsn.ip_address.addr}
+ no force-combined-si
+% else:
gprs mode none
+% endif
% for trx in bts.trx_list:
trx ${loop.index}
rf_locked 0