diff --git a/example/resources.conf b/example/resources.conf index 02608151..a09e80a5 100644 --- a/example/resources.conf +++ b/example/resources.conf @@ -17,8 +17,16 @@ bts: - label: Ettus B210 type: osmo-bts-trx ipa_unit_id: 6 - addr: 10.42.42.116 + addr: 10.42.42.50 band: GSM-1800 + launch_trx: true + +- label: sysmoCell 5000 + type: osmo-bts-trx + ipa_unit_id: 7 + addr: 10.42.42.51 + band: GSM-1800 + trx_remote_ip: 10.42.42.112 arfcn: - arfcn: 512 diff --git a/src/osmo_gsm_tester/bts_osmotrx.py b/src/osmo_gsm_tester/bts_osmotrx.py index 9795a58b..b5262a2b 100644 --- a/src/osmo_gsm_tester/bts_osmotrx.py +++ b/src/osmo_gsm_tester/bts_osmotrx.py @@ -41,8 +41,17 @@ class OsmoBtsTrx(log.Origin): self.env = {} def remote_addr(self): - # FIXME - return '127.0.0.1' + return self.conf.get('addr') + + def trx_remote_ip(self): + conf_ip = self.conf.get('trx_remote_ip', None) + if conf_ip is not None: + return conf_ip + # if 'trx_remote_ip' is not configured, use same IP as BTS + return self.remote_addr() + + def launch_trx_enabled(self): + return util.str2bool(self.conf.get('launch_trx')) def start(self): if self.bsc is None: @@ -53,10 +62,11 @@ class OsmoBtsTrx(log.Origin): self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name())) self.configure() - self.trx = OsmoTrx(self.suite_run) - self.trx.start() - self.log('Waiting for osmo-trx to start up...') - event_loop.wait(self, self.trx.trx_ready) + if self.launch_trx_enabled(): + self.trx = OsmoTrx(self.suite_run, self.trx_remote_ip(), self.remote_addr()) + self.trx.start() + self.log('Waiting for osmo-trx to start up...') + event_loop.wait(self, self.trx.trx_ready) self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst(OsmoBtsTrx.BIN_BTS_TRX))) lib = self.inst.child('lib') @@ -93,6 +103,8 @@ class OsmoBtsTrx(log.Origin): config.overlay(values, { 'osmo_bts_trx': { 'oml_remote_ip': self.bsc.addr(), + 'trx_local_ip': self.remote_addr(), + 'trx_remote_ip': self.trx_remote_ip(), 'pcu_socket_path': os.path.join(str(self.run_dir), 'pcu_bts') } }) @@ -124,17 +136,19 @@ class OsmoTrx(log.Origin): BIN_TRX = 'osmo-trx' - def __init__(self, suite_run): + def __init__(self, suite_run, listen_ip, bts_ip): super().__init__(log.C_RUN, OsmoTrx.BIN_TRX) self.suite_run = suite_run self.env = {} + self.listen_ip = listen_ip + self.bts_ip = bts_ip def start(self): self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name())) self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst(OsmoTrx.BIN_TRX))) lib = self.inst.child('lib') self.env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) } - self.proc_trx = self.launch_process(OsmoTrx.BIN_TRX, '-x') + self.proc_trx = self.launch_process(OsmoTrx.BIN_TRX, '-x', '-j', self.listen_ip, '-i', self.bts_ip) def launch_process(self, binary_name, *args): binary = os.path.abspath(self.inst.child('bin', binary_name)) diff --git a/src/osmo_gsm_tester/config.py b/src/osmo_gsm_tester/config.py index 20ae83e1..f6e81ac3 100644 --- a/src/osmo_gsm_tester/config.py +++ b/src/osmo_gsm_tester/config.py @@ -271,5 +271,4 @@ def overlay(dest, src): dest[i] = overlay(dest[i], src[i]) return dest return src - # vim: expandtab tabstop=4 shiftwidth=4 diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py index 8eec71e8..9470f487 100644 --- a/src/osmo_gsm_tester/resource.py +++ b/src/osmo_gsm_tester/resource.py @@ -54,6 +54,8 @@ RESOURCES_SCHEMA = { 'bts[].ipa_unit_id': schema.INT, 'bts[].addr': schema.IPV4, 'bts[].band': schema.BAND, + 'bts[].trx_remote_ip': schema.IPV4, + 'bts[].launch_trx': schema.BOOL_STR, 'bts[].trx_list[].hw_addr': schema.HWADDR, 'bts[].trx_list[].net_device': schema.STR, 'arfcn[].arfcn': schema.INT, diff --git a/src/osmo_gsm_tester/schema.py b/src/osmo_gsm_tester/schema.py index d652aa76..4c9b9cd6 100644 --- a/src/osmo_gsm_tester/schema.py +++ b/src/osmo_gsm_tester/schema.py @@ -20,7 +20,7 @@ import re from . import log -from .util import is_dict, is_list +from .util import is_dict, is_list, str2bool KEY_RE = re.compile('[a-zA-Z][a-zA-Z0-9_]*') IPV4_RE = re.compile('([0-9]{1,3}.){3}[0-9]{1,3}') @@ -63,21 +63,25 @@ def msisdn(val): INT = 'int' STR = 'str' +BOOL_STR = 'bool_str' BAND = 'band' IPV4 = 'ipv4' HWADDR = 'hwaddr' IMSI = 'imsi' KI = 'ki' MSISDN = 'msisdn' +TRX_REMOTE_IP = 'trx_remote_ip' SCHEMA_TYPES = { INT: int, STR: str, + BOOL_STR: str2bool, BAND: band, IPV4: ipv4, HWADDR: hwaddr, IMSI: imsi, KI: ki, MSISDN: msisdn, + TRX_REMOTE_IP: ipv4, } def validate(config, schema): diff --git a/src/osmo_gsm_tester/templates/osmo-bts-trx.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-bts-trx.cfg.tmpl index ddfd4835..950c03e5 100644 --- a/src/osmo_gsm_tester/templates/osmo-bts-trx.cfg.tmpl +++ b/src/osmo_gsm_tester/templates/osmo-bts-trx.cfg.tmpl @@ -17,6 +17,8 @@ phy 0 instance 0 osmotrx rx-gain 25 osmotrx tx-attenuation oml + osmotrx ip local ${osmo_bts_trx.trx_local_ip} + osmotrx ip remote ${osmo_bts_trx.trx_remote_ip} bts 0 band ${osmo_bts_trx.band} ipa unit-id ${osmo_bts_trx.ipa_unit_id} 0 diff --git a/src/osmo_gsm_tester/util.py b/src/osmo_gsm_tester/util.py index 602ae45d..af6a2f0d 100644 --- a/src/osmo_gsm_tester/util.py +++ b/src/osmo_gsm_tester/util.py @@ -305,4 +305,13 @@ def input_polling(prompt, poll_func): input_thread.join() return input_thread.result +def str2bool(val): + if val is None or not val: + return False + if val.upper() in ['FALSE', 'NO', 'OFF']: + return False + if val.upper() in ['TRUE','YES', 'ON']: + return True + raise ValueError('Invalid BOOL field: %r' % val) + # vim: expandtab tabstop=4 shiftwidth=4