mncc-python tool for talking to MNCC interface

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Harald Welte laforge at gnumonks.org
Tue Dec 1 23:48:02 UTC 2015


Hi all,

I've been working on a small python tool that can be used to attach to
the MNCC interface of OsmoNITB.  It implements the 04.08 CC state
machine with our MNCC primitives, including support for RTP bridge mode
of the voice streams.

The immediate first use case for this was to be able to automatically,
reproducibly and quickly generate MT calls to a set of known MSISDNs and
load all 14 TCH/H channels of a single-TRX BTS.  It will connect the MT
calls in pairs, so you end up with 7 MS-to-MS calls.  Other use cases
are expected to be added shortly.

The first working version of the tool is available from
	http://git.osmocom.org/mncc-python/
or
	git clone git://git.osmocom.org/mncc-python

The code is pretty hacky in some places.  That's partially due to the
fact that I'm much more familiar in the C, Perl and Erlang world than in
python.  Still I thought it's a good idea to do it in python to enable
more people to use/edit/contribute to it.

I'm happy for review / cleanup suggestion by people with more Python-foo
than I have.

Architecturally, I decided to do things a bit erlang-like, where we have
finite state machines in an actor models, and message passing between
the actors.  This is what happens with the GsmCallFsm()'s, which are
created by the GsmCallConnector() representing both legs of a call and
the MnccActor() that wraps the MNCC socket towards OsmoNITB.

The actual encoding/decodng of MNCC messages is auto-generated from the
mncc header file #defines, enums and c-structures by means of ctypes
code generation.

mncc_test.py currently drops you into a python shell where you can e.g.
start more / new calls by calling functions like
	connect_call("7839", "3802")
from that shell.  Exiting the shell by quit() or Ctrl+C will terminate
all call FSMs and terminate.

-- 
- Harald Welte <laforge at gnumonks.org>           http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
                                                  (ETSI EN 300 175-7 Ch. A6)



More information about the OpenBSC mailing list