Introduce OsmoMgw class (osmo-mgw)
Change-Id: I6081ceaddcde748ada8b124a29432d498a9cbdac
This commit is contained in:
parent
ef96749a2c
commit
e9d4af8903
|
@ -0,0 +1,87 @@
|
|||
# osmo_gsm_tester: specifics for running an osmo-mgw
|
||||
#
|
||||
# Copyright (C) 2017 by sysmocom - s.f.m.c. GmbH
|
||||
#
|
||||
# Author: Pau Espin Pedrol <pespin@sysmocom.de>
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
import os
|
||||
import pprint
|
||||
|
||||
from . import log, util, config, template, process, osmo_ctrl, pcap_recorder
|
||||
|
||||
class OsmoMgw(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-mgw_%s' % ip_address.get('addr'))
|
||||
self.suite_run = suite_run
|
||||
self.ip_address = ip_address
|
||||
|
||||
def start(self):
|
||||
self.log('Starting osmo-mgw')
|
||||
self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
|
||||
self.configure()
|
||||
inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-mgw')))
|
||||
binary = inst.child('bin', 'osmo-mgw')
|
||||
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)
|
||||
|
||||
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-mgw.cfg')
|
||||
self.dbg(config_file=self.config_file)
|
||||
|
||||
values = dict(mgw=config.get_defaults('mgw'))
|
||||
config.overlay(values, self.suite_run.config())
|
||||
config.overlay(values, dict(mgw=dict(ip_address=self.ip_address)))
|
||||
|
||||
self.dbg('MGW CONFIG:\n' + pprint.pformat(values))
|
||||
|
||||
with open(self.config_file, 'w') as f:
|
||||
r = template.render('osmo-mgw.cfg', values)
|
||||
self.dbg(r)
|
||||
f.write(r)
|
||||
|
||||
def addr(self):
|
||||
return self.ip_address.get('addr')
|
||||
|
||||
def conf_for_client(self):
|
||||
return dict(mgw=dict(ip_address=self.ip_address))
|
||||
|
||||
def running(self):
|
||||
return not self.process.terminated()
|
||||
|
||||
# vim: expandtab tabstop=4 shiftwidth=4
|
|
@ -0,0 +1,16 @@
|
|||
!
|
||||
! MGCP configuration example
|
||||
!
|
||||
line vty
|
||||
no login
|
||||
bind ${mgw.ip_address.addr}
|
||||
mgcp
|
||||
bind ip ${mgw.ip_address.addr}
|
||||
bind port 2427
|
||||
rtp net-range 4002 16000
|
||||
rtp force-ptime 20
|
||||
sdp audio payload number 98
|
||||
sdp audio payload name AMR/8000
|
||||
number endpoints 31
|
||||
rtcp-omit
|
||||
rtp-accept-all 1
|
Loading…
Reference in New Issue