From 38b051c6da9879ad3f6ef25cccf174fe14112f37 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 13 Jun 2017 16:26:06 +0200 Subject: aoip: add osmo-stp, now required for aoip runs Change-Id: I35d4cb0d173eec240bccc1f3a5965a774b7b3506 --- src/osmo_gsm_tester/osmo_stp.py | 89 +++++++++++++++++++++++++ src/osmo_gsm_tester/suite.py | 7 +- src/osmo_gsm_tester/templates/osmo-stp.cfg.tmpl | 16 +++++ suites/aoip_debug/interactive.py | 2 + suites/aoip_debug/suite.conf | 2 +- suites/aoip_sms/mo_mt_sms.py | 2 + suites/aoip_sms/suite.conf | 2 +- 7 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 src/osmo_gsm_tester/osmo_stp.py create mode 100644 src/osmo_gsm_tester/templates/osmo-stp.cfg.tmpl diff --git a/src/osmo_gsm_tester/osmo_stp.py b/src/osmo_gsm_tester/osmo_stp.py new file mode 100644 index 0000000..f1ad6fc --- /dev/null +++ b/src/osmo_gsm_tester/osmo_stp.py @@ -0,0 +1,89 @@ +# osmo_gsm_tester: specifics for running an osmo-stp +# +# Copyright (C) 2017 by sysmocom - s.f.m.c. GmbH +# +# Author: Neels Hofmeyr +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import pprint + +from . import log, util, config, template, process, pcap_recorder + +class OsmoStp(log.Origin): + suite_run = None + ip_address = None + run_dir = None + config_file = None + process = None + + def __init__(self, suite_run, ip_address): + super().__init__(log.C_RUN, 'osmo-stp_%s' % ip_address.get('addr')) + self.suite_run = suite_run + self.ip_address = ip_address + + def start(self): + self.log('Starting osmo-stp') + self.run_dir = util.Dir(self.suite_run.trial.get_run_dir().new_dir(self.name())) + self.configure() + + # NOTE: libosmo-sccp provides osmo-stp and is built as a dependency of + # OsmoMSC. + inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-msc'))) + + binary = inst.child('bin', 'osmo-stp') + if not os.path.isfile(binary): + raise RuntimeError('Binary missing: %r' % binary) + lib = inst.child('lib') + if not os.path.isdir(lib): + raise RuntimeError('No lib/ in %r' % inst) + + # TODO: osmo-stp is not yet configurable to a specific IP address + #iface = util.ip_to_iface(self.addr()) + #pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), iface, + # 'host %s and port not 22' % self.addr()) + + env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) } + + self.dbg(run_dir=self.run_dir, binary=binary, env=env) + self.process = process.Process(self.name(), self.run_dir, + (binary, '-c', + os.path.abspath(self.config_file)), + env=env) + self.suite_run.remember_to_stop(self.process) + self.process.launch() + + def configure(self): + self.config_file = self.run_dir.new_file('osmo-stp.cfg') + self.dbg(config_file=self.config_file) + + values = dict(stp=config.get_defaults('stp')) + config.overlay(values, self.suite_run.config()) + config.overlay(values, dict(stp=dict(ip_address=self.ip_address))) + + self.dbg('STP CONFIG:\n' + pprint.pformat(values)) + + with open(self.config_file, 'w') as f: + r = template.render('osmo-stp.cfg', values) + self.dbg(r) + f.write(r) + + def addr(self): + return self.ip_address.get('addr') + + def running(self): + return not self.process.terminated() + +# vim: expandtab tabstop=4 shiftwidth=4 diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py index eeaf7df..be799d3 100644 --- a/src/osmo_gsm_tester/suite.py +++ b/src/osmo_gsm_tester/suite.py @@ -25,7 +25,7 @@ import traceback import pprint from . import config, log, template, util, resource, schema, ofono_client, event_loop from . import osmo_nitb -from . import osmo_hlr, osmo_mgcpgw, osmo_msc, osmo_bsc +from . import osmo_hlr, osmo_mgcpgw, osmo_msc, osmo_bsc, osmo_stp from . import test class Timeout(Exception): @@ -322,6 +322,11 @@ class SuiteRun(log.Origin): ip_address = self.ip_address() return osmo_bsc.OsmoBsc(self, msc, ip_address) + def stp(self, ip_address=None): + if ip_address is None: + ip_address = self.ip_address() + return osmo_stp.OsmoStp(self, ip_address) + def bts(self, specifics=None): return bts_obj(self, self.reserved_resources.get(resource.R_BTS, specifics=specifics)) diff --git a/src/osmo_gsm_tester/templates/osmo-stp.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-stp.cfg.tmpl new file mode 100644 index 0000000..eb6ac1d --- /dev/null +++ b/src/osmo_gsm_tester/templates/osmo-stp.cfg.tmpl @@ -0,0 +1,16 @@ +! Configuration rendered by osmo-gsm-tester +log stderr + logging filter all 1 + logging color 1 + logging print category 1 + logging print extended-timestamp 1 + logging level all debug +line vty + no login + bind ${stp.ip_address.addr} +!ctrl +! bind ${stp.ip_address.addr} +cs7 instance 0 + xua rkm routing-key-allocation dynamic-permitted + listen m3ua 2905 + accept-asp-connections dynamic-permitted diff --git a/suites/aoip_debug/interactive.py b/suites/aoip_debug/interactive.py index cfedd3a..d596b68 100755 --- a/suites/aoip_debug/interactive.py +++ b/suites/aoip_debug/interactive.py @@ -5,9 +5,11 @@ bts = suite.bts() mgcpgw = suite.mgcpgw(bts_ip=bts.remote_addr()) msc = suite.msc(hlr, mgcpgw) bsc = suite.bsc(msc) +stp = suite.stp() modems = suite.modems(int(prompt('How many modems?'))) hlr.start() +stp.start() msc.start() mgcpgw.start() diff --git a/suites/aoip_debug/suite.conf b/suites/aoip_debug/suite.conf index 48c76b6..bb343a5 100644 --- a/suites/aoip_debug/suite.conf +++ b/suites/aoip_debug/suite.conf @@ -1,6 +1,6 @@ resources: ip_address: - - times: 4 + - times: 5 bts: - times: 1 modem: diff --git a/suites/aoip_sms/mo_mt_sms.py b/suites/aoip_sms/mo_mt_sms.py index 8eba842..217d807 100755 --- a/suites/aoip_sms/mo_mt_sms.py +++ b/suites/aoip_sms/mo_mt_sms.py @@ -6,10 +6,12 @@ bts = suite.bts() mgcpgw = suite.mgcpgw(bts_ip=bts.remote_addr()) msc = suite.msc(hlr, mgcpgw) bsc = suite.bsc(msc) +stp = suite.stp() ms_mo = suite.modem() ms_mt = suite.modem() hlr.start() +stp.start() msc.start() mgcpgw.start() diff --git a/suites/aoip_sms/suite.conf b/suites/aoip_sms/suite.conf index c6cbd88..216d3ea 100644 --- a/suites/aoip_sms/suite.conf +++ b/suites/aoip_sms/suite.conf @@ -1,6 +1,6 @@ resources: ip_address: - - times: 4 + - times: 5 # msc, bsc, hlr, stp, mgw bts: - times: 1 modem: -- cgit v1.2.3