<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LaForge's home page (Posts about openbsc)</title><link>https://laforge.gnumonks.org/</link><description></description><atom:link href="https://laforge.gnumonks.org/blog/tags/openbsc.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Thu, 24 Oct 2024 20:08:49 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Osmocom jenkins test suite execution</title><link>https://laforge.gnumonks.org/blog/20170820-osmocom-testsuites/</link><dc:creator>Harald Welte</dc:creator><description>&lt;section id="automatic-testing-in-osmocom"&gt;
&lt;h2&gt;Automatic Testing in Osmocom&lt;/h2&gt;
&lt;p&gt;So far, in many Osmocom projects we have unit tests next to the code.
Those unit tests are executing test on a per-C-function basis, and
typically use the respective function directly from a small test
program, executed at &lt;code class="docutils literal"&gt;make check&lt;/code&gt; time.  The actual main program (like
OsmoBSC or OsmoBTS) is not executed at that time.&lt;/p&gt;
&lt;p&gt;We also have VTY testing, which specifically tests that the VTY
has proper documentation for all nodes of all commands.&lt;/p&gt;
&lt;p&gt;Then there's a big gap, and we have osmo-gsm-tester for testing a full
cellular network end-to-end.  It includes physical GSM modesm, coaxial
distribution network, attenuators, splitter/combiners, real BTS hardware
and logic to run the full network, from OsmoBTS to the core - both for
OsmoNITB and OsmoMSC+OsmoHLR based networks.&lt;/p&gt;
&lt;p&gt;However, I think a lot of testing falls somewhere in between, where you
want to run the program-under-test (e.g. OsmoBSC), but you don't want to
run the MS, BTS and MSC that normally surroudns it.  You want to test it
by emulating the BTS on the Abis sid and the MSC on the A side, and just
test Abis and A interface transactions.&lt;/p&gt;
&lt;p&gt;For this kind of testing, I have recently started to investigate
available options and tools.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="osmostp-m3ua-sua"&gt;
&lt;h2&gt;OsmoSTP (M3UA/SUA)&lt;/h2&gt;
&lt;p&gt;Several months ago, during the development of OsmoSTP, I disovered that
the &lt;a class="reference external" href="https://www.fh-muenster.de/fb2/labore_forschung/nw/index.php"&gt;Network Programming Lab of Münster University of Applied Sciences&lt;/a&gt; led by
Michael Tuexen had released implementations of the ETSI test suite for the M3UA
and SUA members of the SIGTRAN protocol family.&lt;/p&gt;
&lt;p&gt;The somewhat difficult part is that they are implemented in scheme,
using the guile interpreter/compiler, as well as a C-language based
execution wrapper, which then is again called by another guile wrapper
script.&lt;/p&gt;
&lt;p&gt;I've &lt;a class="reference external" href="http://git.osmocom.org/nplab/m3ua-testtool/tree/runtest-junitxml.py"&gt;reimplemented the test executor in python and added JUnitXML output
to it&lt;/a&gt;.
This means it can feed the test results directly into Jenkins.&lt;/p&gt;
&lt;p&gt;I've also cleaned up the Dockerfiles and related image generation for
the &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;osmo-stp-master&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;m3ua-test&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;sua-test&lt;/span&gt;&lt;/code&gt; images, as well
as some scripts to actually execute them on one of the Builders.  You
can find related Dockerfiles as well as associtaed Makfiles in
&lt;a class="reference external" href="http://git.osmocom.org/docker-playground"&gt;http://git.osmocom.org/docker-playground&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The end result after integration with Osmocom jenkins can be seen in the
following examples on jenkins.osmocom.org
&lt;a class="reference external" href="https://jenkins.osmocom.org/jenkins/view/TTCN3/job/nplab-m3ua-test/5/testReport/(root)/m3ua-test/"&gt;for M3UA&lt;/a&gt;
and &lt;a class="reference external" href="https://jenkins.osmocom.org/jenkins/view/TTCN3/job/nplab-sua-test/1/testReport/(root)/sua-test/"&gt;for SUA&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Triggering the builds is currently periodic once per night, but we could
of course also trigger them automatically at some later point.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="openggsn-gtp"&gt;
&lt;h2&gt;OpenGGSN (GTP)&lt;/h2&gt;
&lt;p&gt;For OpenGGSN, during the development of IPv6 PDP context support, I
wrote some test infrastructure and test cases in TTCN-3.  Those test
cases can be found at &lt;a class="reference external" href="http://git.osmocom.org/osmo-ttcn3-hacks/tree/ggsn_tests"&gt;http://git.osmocom.org/osmo-ttcn3-hacks/tree/ggsn_tests&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I've also packaged the GGSN and the test cases each into separate Docker
containers called &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;osmo-ggsn-latest&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;ggsn-test&lt;/span&gt;&lt;/code&gt;. Related
Dockerfiles and Makefiles can again be found in
&lt;a class="reference external" href="http://git.osmocom.org/docker-playground"&gt;http://git.osmocom.org/docker-playground&lt;/a&gt; - together with a Eclipse
TITAN Docker base image using Debian Stretch called &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;debian-stretch-titan&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Using those TTCN-3 test cases with the TITAN JUnitXML logger plugin we
can again integrate the results directly into Jenkins, whose results you
can see at &lt;a class="reference external" href="https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-ggsn-test/14/testReport/(root)/GGSN_Tests/"&gt;https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-ggsn-test/14/testReport/(root)/GGSN_Tests/&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;section id="further-work"&gt;
&lt;h2&gt;Further Work&lt;/h2&gt;
&lt;p&gt;I've built some infrastructure for Gb (NS/BSSGP), VirtualUm and other
testing, but yet have to build Docker images and related jenkins
integration for it.  Stay tuned about that.  Also, &lt;em&gt;lots&lt;/em&gt; more actual
tests cases are required.  I'm very much looking forward to any
contributions.&lt;/p&gt;
&lt;/section&gt;</description><category>gsm</category><category>openbsc</category><guid>https://laforge.gnumonks.org/blog/20170820-osmocom-testsuites/</guid><pubDate>Sat, 19 Aug 2017 16:00:00 GMT</pubDate></item><item><title>IPv6 User Plane support in Osmocom</title><link>https://laforge.gnumonks.org/blog/20170809-osmocom-ipv6/</link><dc:creator>Harald Welte</dc:creator><description>&lt;section id="preface"&gt;
&lt;h2&gt;Preface&lt;/h2&gt;
&lt;p&gt;Cellular systems ever since GPRS are using a tunnel based architecture to provide IP
connectivity to cellular terminals such as phones, modems, M2M/IoT devices and the
like.  The MS/UE establishes a PDP context between itself and the GGSN on the other
end of the cellular network. The GGSN then is the first IP-level router, and the
entire cellular network is abstracted away from the User-IP point of view.&lt;/p&gt;
&lt;p&gt;This architecture didn't change with EGPRS, and not with UMTS, HSxPA and even
survived conceptually in LTE/4G.&lt;/p&gt;
&lt;p&gt;While the concept of a PDP context / tunnel exists to de-couple the
transport layer from the structure and type of data inside the tunneled
data, the primary user plane so far has been IPv4.&lt;/p&gt;
&lt;p&gt;In Osmocom, we made sure that there are no impairments / assumptions
about the contents of the tunnel, so OsmoPCU and OsmoSGSN do not care at
all what bits and bytes are transmitted in the tunnel.&lt;/p&gt;
&lt;p&gt;The only Osmocom component dealing with the type of tunnel and its
payload structure is &lt;a class="reference external" href="https://osmocom.org/projects/openggsn/wiki/OpenGGSN"&gt;OpenGGSN&lt;/a&gt;.
The GGSN must allocate the address/prefix assigned to each individual
MS/UE, perform routing between the external IP network and the cellular
network and hence is at the heart of this.  Sadly, OpenGGSN was an
abandoned project for many years until Osmocom adopted it, and it only
implemented IPv4.&lt;/p&gt;
&lt;p&gt;This is actually a big surprise to me.  Many of the users of the Osmocom
stack are from the IT security area. They use the Osmocom stack to
test mobile phones for vulnerabilities, analyze mobile malware and the
like.  As any penetration tester should be interested in analyzing all
of the attack surface exposed by a given device-under-test, I would have
assumed that testing just on IPv4 would be insufficient and over the
past 9 years, somebody should have come around and implemented the
missing bits for IPv6 so they can test on IPv6, too.&lt;/p&gt;
&lt;p&gt;In reality, it seems nobody appears to have shared line of thinking and
invested a bit of time in growing the tools used.  Or if they did, they
didn't share the related code.&lt;/p&gt;
&lt;p&gt;In June 2017, Gerrie Roos submitted &lt;a class="reference external" href="https://gerrit.osmocom.org/#/c/2870/"&gt;a patch for OpenGGSN IPv6 support&lt;/a&gt; that raised hopes about soon
being able to close that gap.  However, at closer sight it turns out
that the code was written against a more than 7 years old version of
OpenGGSN, and it seems to primarily focus on IPv6 on the outer
(transport) layer, rather than on the inner (user) layer.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="openggsn-ipv6-pdp-context-support"&gt;
&lt;h2&gt;OpenGGSN IPv6 PDP Context Support&lt;/h2&gt;
&lt;p&gt;So in July 2017, I started to work on IPv6 PDP support in OpenGGSN.&lt;/p&gt;
&lt;p&gt;Initially I thought &lt;em&gt;How hard can it be?&lt;/em&gt;  It's not like IPv6 is new to
me (I joined 6bone under 3ffe prefixes back in the 1990ies and worked on
IPv6 support in &lt;a class="reference external" href="http:/netfilter.org/"&gt;ip6tables&lt;/a&gt; ages ago.  And aside
from allocating/matching longer addresses, what kind of complexity does
one expect?&lt;/p&gt;
&lt;p&gt;After my initial attempt of implementation, partially mislead by the
patch that was contributed against that 2010-or-older version of
OpenGGSN, I'm surprised how wrong I was.&lt;/p&gt;
&lt;p&gt;In IPv4 PDP contexts, the process of establishing a PDP context is
simple:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Request establishment of a PDP context, set the type to IETF IPv4&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Receive an allocated IPv4 &lt;em&gt;End User Address&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optionally use IPCP (part of PPP) to reques and receive DNS Server
IP addresses&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I implemented the identical approach for IPv6.  Maintain a pool of
IPv6 addresses, allocate one, and use IPCP for DNS.  And nothing worked.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;IPv6 PDP contexts assign a /64 prefix, not a single address or a
smaller prefix&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;em&gt;End User Address&lt;/em&gt; that's part of the Signalling plane of Layer 3
Session Management and GTP is not the actual address, but just serves
to generate the interface identifier portion of a link-local IPv6
address&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IPv6 stateless autoconfiguration is used with this link-local IPv6
address inside the User Plane, after the control plane signaling to
establish the PDP context has completed.  This means the GGSN needs to
parse ICMPv6 router solicitations and generate ICMPV6 router
advertisements.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To make things worse, the stateless autoconfiguration is modified in
some subtle ways to make it different from the normal SLAAC used on
Ethernet and other media:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;the timers / lifetimes are different&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;only one prefix is permitted&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;only a prefix length of 64 is permitted&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A few days later I implemented all of that, but it still didn't work.
The problem was with DNS server adresses.  In IPv4, the 3GPP protocols
simply tunnel IPCP frames for this.  This makes a lot of sense, as IPCP
is designed for point-to-point interfaces, and this is exactly what a
PDP context is.&lt;/p&gt;
&lt;p&gt;In IPv6, the corresponding IP6CP protocol does not have the capability
to provision DNS server addresses to a PPP client. WTF?   The IETF
seriously requires implementations to do DHCPv6 over PPP, &lt;em&gt;after&lt;/em&gt;
establishing a point-to-point connection, only to get DNS server
information?!?   Some people &lt;a class="reference external" href="https://tools.ietf.org/html/draft-hu-pppext-ipv6cp-requirements-01"&gt;suggested an IETF draft to change this&lt;/a&gt;
butthe draft has expired in 2011 and we're still stuck.&lt;/p&gt;
&lt;p&gt;While 3GPP permits the use of DHCPv6 in some scenarios, support in
phones/modems for it is not mandatory.  Rather, the 3GPP has come up
with  their own mechanism on how to communicate DNS server IPv6
addresses during PDP context activation: The use of &lt;em&gt;containers&lt;/em&gt; as part
of the &lt;em&gt;PCO&lt;/em&gt; Information Element used in L3-SM and GTP (see &lt;a class="reference external" href="http://www.etsi.org/deliver/etsi_ts/124000_124099/124008/14.04.00_60/ts_124008v140400p.pdf"&gt;Section
10.5.6.3 of 3GPP TS 24.008&lt;/a&gt;.   They by the
way also specified the same mechanism for IPv4, so there's now two
competing methods on how to provision IPv4 DNS server information: IPCP
and the new method.&lt;/p&gt;
&lt;p&gt;In any case, after some more hacking, OpenGGSN can now also provide
DNS server information to the MS/UE. And once that was implemented,
I had actual live uesr IPv6 data over a full Osmocom cellular stack!&lt;/p&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;We now have working IPv6 User IP in OpenGGSN. Together with the rest
of the Osmocom stack you can operate a private GPRS, EGPRS, UMTS or
HSPA network that provide end-to-end transparent, routed IPv6
connectivity to mobile devices.&lt;/p&gt;
&lt;p&gt;All in all, it took much longer than nneeded, and the following
questions remain in my mind:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;why did the IETF not specify IP6CP capabilities to configure DNS
servers?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;why the complex two-stage address configuration with PDP EUA
allocation for the link-local address first and then stateless
autoconfiguration?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;why don't we simply allocate the entire prefix via the &lt;em&gt;End User
Address&lt;/em&gt; information element on the signaling plane?  For sure next
to the 16byte address we could have put one byte for prefix-length?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;why do I see duplication detection flavour &lt;em&gt;neighbour solicitations&lt;/em&gt;
from Qualcomm based phones on what is a point-to-point link with
exactly two devices: The UE and the GGSN?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;why do I see link-layer source address options inside the ICMPv6
neighbor and router solicitation from mobile phones, when that option
is specifically not to be used on point-to-point links?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;why is the smallest prefix that can be allocated a /64? That's such a
waste for a point-to-point link with a single device on the other end,
and in times of billions of connected IoT devices it will just
encourage the use of non-public IPv6 space (i.e. SNAT/MASQUERADING)
while wasting large parts of the address space&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of those choices would have made sense if one would have made it
&lt;em&gt;fully&lt;/em&gt;  compatible with normal IPv6 like e.g. on Ethernet.  But
implementing ICMPv6 router and neighbor solicitation without getting
any benefit such as ability to have multiple prefixes, prefixes of
different lengths, I just don't understand why anyone ever thought
You can find the code at &lt;a class="reference external" href="http://git.osmocom.org/openggsn/log/?h=laforge/ipv6"&gt;http://git.osmocom.org/openggsn/log/?h=laforge/ipv6&lt;/a&gt;
and the related ticket at &lt;a class="reference external" href="https://osmocom.org/issues/2418"&gt;https://osmocom.org/issues/2418&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;</description><category>gsm</category><category>openbsc</category><guid>https://laforge.gnumonks.org/blog/20170809-osmocom-ipv6/</guid><pubDate>Tue, 08 Aug 2017 16:00:00 GMT</pubDate></item><item><title>Virtual Um interface between OsmoBTS and OsmocomBB</title><link>https://laforge.gnumonks.org/blog/20170719-osmocom_virtum/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;During the last couple of days, I've been working on completing, cleaning up and merging a &lt;em&gt;Virtual Um interface&lt;/em&gt;
(i.e. virtual radio layer) between &lt;a class="reference external" href="https://osmocom.org/projects/osmobts/wiki"&gt;OsmoBTS&lt;/a&gt; and &lt;a class="reference external" href="https://osmocom.org/projects/baseband"&gt;OsmocomBB&lt;/a&gt;. After I started with the implementation and left it in an early
stage in January 2016, Sebastian Stumpf has been completing it around early 2017, with now some subsequent
fixes and improvements by me.  The combined result allows us to run a complete GSM network with 1-N BTSs and
1-M MSs without any actual radio hardware, which is of course excellent for all kinds of testing scenarios.&lt;/p&gt;
&lt;p&gt;The Virtual Um layer is based on sending L2 frames (blocks) encapsulated via GSMTAP UDP multicast packets.
There are two separate multicast groups, one for uplink and one for downlink.  The multicast nature simulates
the shared medium and enables any simulated phone to receive the signal from multiple BTSs via the downlink
multicast group.&lt;/p&gt;
&lt;img alt="/images/osmocom-virtum.png" src="https://laforge.gnumonks.org/images/osmocom-virtum.png"&gt;
&lt;p&gt;In &lt;em&gt;OsmoBTS&lt;/em&gt;, this is implemented via the new &lt;cite&gt;osmo-bts-virtual&lt;/cite&gt; BTS model.&lt;/p&gt;
&lt;p&gt;In &lt;em&gt;OsmocomBB&lt;/em&gt;, this is realized by adding &lt;cite&gt;virtphy&lt;/cite&gt; virtual L1, which speaks the same
&lt;a class="reference external" href="https://osmocom.org/projects/baseband/wiki/L1A_L23_Interface"&gt;L1CTL&lt;/a&gt; protocol that is used between the
&lt;em&gt;real&lt;/em&gt; OsmcoomBB Layer1 and the Layer2/3 programs such as &lt;a class="reference external" href="https://osmocom.org/projects/baseband/wiki/Mobile"&gt;mobile&lt;/a&gt; and the like.&lt;/p&gt;
&lt;p&gt;Now many people would argue that GSM without the radio and actual handsets is no fun.  I tend to agree, as I'm
a hardware person at heart and I am not a big fan of simulation.&lt;/p&gt;
&lt;p&gt;Nevertheless, this forms the basis of all kinds of possibilities for automatized (regression) testing in a way
and for layers/interfaces that osmo-gsm-tester cannot cover as it uses a black-box proprietary mobile phone
(modem).  It is also pretty useful if you're traveling a lot and don't want to carry around a BTS and phones
all the time, or get some development done in airplanes or other places where operating a radio transmitter is
not really a (viable) option.&lt;/p&gt;
&lt;p&gt;If you're curious and want to give it a shot, I've put together some setup instructions at the
&lt;a class="reference external" href="http://osmocom.org/projects/cellular-infrastructure/wiki/Virtual_Um"&gt;Virtual Um&lt;/a&gt; page of the Osmocom Wiki.&lt;/p&gt;</description><category>gsm</category><category>openbsc</category><guid>https://laforge.gnumonks.org/blog/20170719-osmocom_virtum/</guid><pubDate>Tue, 18 Jul 2017 16:00:00 GMT</pubDate></item><item><title>How the Osmocom GSM stack is funded</title><link>https://laforge.gnumonks.org/blog/20170616-osmocom_funding/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;As the topic has been raised &lt;a class="reference external" href="https://twitter.com/KirilsSolovjovs/status/875440678217457664"&gt;on twitter&lt;/a&gt;, I
thought I might share a bit of insight into the funding of the &lt;a class="reference external" href="http://osmocom.org/projects/cellular-infrastructure"&gt;Osmocom
Cellular Infrastructure Projects&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Keep in mind: Osmocom is a much larger umbrella project, and beyond
the Networks-side cellular stack is home many different community-based
projects around open source mobile communications.  All of those have
started more or less as &lt;em&gt;just for fun&lt;/em&gt; projects, &lt;em&gt;nothing serious&lt;/em&gt;,
&lt;em&gt;just a hobby&lt;/em&gt; &lt;a class="brackets" href="https://laforge.gnumonks.org/blog/20170616-osmocom_funding/#footnote-1" id="footnote-reference-1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The projects implementing the network-side protocol stacks and network
elements of GSM/GPRS/EGPRS/UMTS cellular networks are somewhat the
exception to that, as they have evolved to some extent professionalized.
We call those projects collectively the &lt;em&gt;Cellular Infrastructure&lt;/em&gt;
projects inside Osmocom.  This post is about that part of Osmocom only&lt;/p&gt;
&lt;section id="history"&gt;
&lt;h2&gt;History&lt;/h2&gt;
&lt;p&gt;From late 2008 through 2009, People like Holger and I were working on
bs11-abis and later OpenBSC only in our spare time.  The name Osmocom
didn't even exist back then. There was a strong technical community with
contributions from Sylvain Munaut, Andreas Eversberg, Daniel Willmann,
Jan Luebbe and a few others.  None of this would have been possible if
it wasn't for all the help we got from Dieter Spaar with the BS-11 &lt;a class="brackets" href="https://laforge.gnumonks.org/blog/20170616-osmocom_funding/#footnote-2" id="footnote-reference-2" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;.
We all had our dayjob in other places, and OpenBSC work was really
&lt;em&gt;just&lt;/em&gt; a hobby.  People were working on it, because it was &lt;em&gt;where no
FOSS hacker has gone before&lt;/em&gt;. It was cool. It was a big and pleasant
challenge to enter the closed telecom space as pure autodidacts.&lt;/p&gt;
&lt;p&gt;Holger and I were doing freelance contract development work on Open
Source projects for many years before.  I was mostly doing Linux related
contracting, while Holger has been active in all kinds of areas
throughout the FOSS software stack.&lt;/p&gt;
&lt;p&gt;In 2010, Holger and I saw some first interest by companies into OpenBSC,
including &lt;em&gt;Netzing AG&lt;/em&gt; and &lt;em&gt;On-Waves ehf&lt;/em&gt;.  So we were able to spend at
least some of our paid time on OpenBSC/Osmocom related contract work,
and were thus able to do less other work.  We also continued to spend
tons of spare time in bringing Osmocom forward.  Also, the amount of
contract work we did was only a fraction of the many more hours of spare
time.&lt;/p&gt;
&lt;p&gt;In 2011, Holger and I decided to start the company &lt;a class="reference external" href="https://laforge.gnumonks.org/blog/20170616-osmocom_funding/ahref=%22https:/sysmocom.de/%22"&gt;sysmocom&lt;/a&gt; in order to generate more funding for the
Osmocom GSM projects by means of financing software development by
product sales.  So rather than doing freelance work for companies who
bought their BTS hardware from other places (and spent huge amounts of
cash on that), we decided that we wanted to be a &lt;em&gt;full solution&lt;/em&gt;
supplier, who can offer a complete product based on all hardware and
software required to run small GSM networks.&lt;/p&gt;
&lt;p&gt;The only problem is: We still needed an actual BTS for that.  Through
some reverse engineering of existing products we figured out who one of
the ODM suppliers for the hardware + PHY layer was, and decided to
develop the &lt;a class="reference external" href="http://osmocom.org/projects/osmobts"&gt;OsmoBTS&lt;/a&gt; software to
do so.  We inherited some of the early code from work done by Andreas
Eversberg on the &lt;cite&gt;jolly/bts&lt;/cite&gt; branch of OsmocomBB (thanks), but much was
missing at the time.&lt;/p&gt;
&lt;p&gt;What follows was Holger and me working several years for free &lt;a class="brackets" href="https://laforge.gnumonks.org/blog/20170616-osmocom_funding/#footnote-3" id="footnote-reference-3" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;3&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;, without
any salary, in order to complete the OsmoBTS software, build an embedded
Linux distribution around it based on OE/poky, write documentation, etc.
and complete the first sysmocom product: The
&lt;a class="reference external" href="https://www.sysmocom.de/products/sysmobts/index.html"&gt;sysmoBTS 1002&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We did that not because we want to get rich, or because we want to run a
business.  We did it simply because we saw an opportunity to generate
funding for the Osmocom projects and make them more sustainable and
successful.  And because we believe there is a big, gaping, huge vacuum
in terms of absence of FOSS in the cellular telecom sphere.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="funding-by-means-of-sysmocom-product-sales"&gt;
&lt;h2&gt;Funding by means of sysmocom product sales&lt;/h2&gt;
&lt;p&gt;Once we started to sell the sysmoBTS products, we were able to fund
Osmocom related development from the profits made on hardware /
full-system product sales.  Every single unit sold made a big
contribution towards funding both the maintenance as well as the ongoing
development on new features.&lt;/p&gt;
&lt;p&gt;This source of funding continues to be an important factor today.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="funding-by-means-of-r-d-contracts"&gt;
&lt;h2&gt;Funding by means of R&amp;amp;D contracts&lt;/h2&gt;
&lt;p&gt;The probably best and most welcome method of funding Osmocom related
work is by means of R&amp;amp;D projects in which a customer funds our work to
extend the Osmocom GSM stack in one particular area where he has a
particular need that the existing code cannot fulfill yet.&lt;/p&gt;
&lt;p&gt;This kind of project is the ideal match, as it shows where the true
strength of FOSS is:  Each of those customers did not have to fund the
development of a GSM stack from scratch.  Rather, they only had to fund
those bits that were missing for their particular application.&lt;/p&gt;
&lt;p&gt;Our reference for this is and has been On-Waves, who have been funding
development of their required features (and bug fixing etc.) since 2010.&lt;/p&gt;
&lt;p&gt;We've of course had many other projects from a variety of customers over
over the years.  Last, but not least, we had a customer who willingly
co-funded (together with funds from NLnet foundation and lots of unpaid
effort by sysmocom) the 3G/3.5G support in the Osmocom stack.&lt;/p&gt;
&lt;p&gt;The problem here is:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;we have not been able to secure anywhere nearly as many of those R&amp;amp;D
projects within the cellular industry, despite believing we have a
very good foundation upon which we can built.  I've been writing many
exciting technical project proposals&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;you almost exclusively get funding only for new features.  But it's
very hard to get funding for the core maintenance work.  The
bug-fixing, code review, code refactoring, testing, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So as a result, the profit margin you have on selling R&amp;amp;D projects is
basically used to (do a bad job of) fund those bits and pieces that
nobody wants to pay for.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="funding-by-means-of-customer-support"&gt;
&lt;h2&gt;Funding by means of customer support&lt;/h2&gt;
&lt;p&gt;There is a way to generate funding for development by providing support
services.  We've had some success with this, but primarily alongside the
actual hardware/system sales - not so much in terms of pure
software-only support.&lt;/p&gt;
&lt;p&gt;Also, providing support services from a R&amp;amp;D company means:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;either you distract your developers by handling support inquiries.
This means they will have less time to work on actual code, and likely
get side tracked by too many issues that make it hard to focus&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;or you have to hire separate support staff.  This of course means that
the size of the support business has to be sufficiently large to not
only cover the cots of hiring + training support staff, but also still
generate funding for the actual software R&amp;amp;D.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We've tried shortly with the second option, but fallen back to the first
for now.  There's simply not sufficient user/admin type support business
to rectify dedicated staff for that.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="funding-by-means-of-cross-subsizing-from-other-business-areas"&gt;
&lt;h2&gt;Funding by means of cross-subsizing from other business areas&lt;/h2&gt;
&lt;p&gt;sysmocom also started to do some non-Osmocom projects in order to
generate revenue that we can feed again into Osmocom projects.  I'm not
at liberty to discuss them in detail, but basically we've been doing
pretty much anything from&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;custom embedded Linux board designs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;M2M devices with GSM modems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;consulting gigs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;public tendered research projects&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Profits from all those areas went again into Osmocom development.&lt;/p&gt;
&lt;p&gt;Last, but not least, we also operate the sysmocom &lt;a class="reference external" href="https://shop.sysmocom.de/"&gt;webshop&lt;/a&gt;.  The profit we make on those products
also is again immediately re-invested into Osmocom development.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="funding-by-grants"&gt;
&lt;h2&gt;Funding by grants&lt;/h2&gt;
&lt;p&gt;We've had some success in securing funding from &lt;a class="reference external" href="https://nlnet.nl/"&gt;NLnet Foundation&lt;/a&gt; for specific features.  While this is useful, the
size of their projects grants of up to EUR 30k is not a good fit for the
scale of the tasks we have at hand inside Osmocom.  You may think that's
a considerable amount of money?  Well, that translates to 2-3 man-months
of work at a bare cost-covering rate.  At a team size of 6 developers,
you would theoretically have churned through  that in two weeks.  Also,
their focus is (understandably) on Internet and IT security, and not so
much cellular communications.&lt;/p&gt;
&lt;p&gt;There are of course other options for grants, such as government
research grants and the like.  However, they require long-term planning,
they require you to &lt;em&gt;match&lt;/em&gt; (i.e. pay yourself) a significant portion,
and basically mandate that you hire one extra person for doing all the
required paperwork and reporting.  So all in all, not a particularly
attractive option for a very small company consisting of die hard engineers.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="funding-by-more-bts-ports"&gt;
&lt;h2&gt;Funding by more BTS ports&lt;/h2&gt;
&lt;p&gt;At sysmocom, we've been doing some ports of the OsmoBTS + OsmoPCU
software to other hardware, and supporting those other BTS vendors with
porting, R&amp;amp;D and support services.&lt;/p&gt;
&lt;p&gt;If sysmocom was a classic BTS vendor, we would not help our
"competition".  However, we are not.  sysmocom exists to help Osmocom,
and we strongly believe in open systems and architectures, without a
single point of failure, a single supplier for any component or any type
of vendor lock-in.&lt;/p&gt;
&lt;p&gt;So we happily help third parties to get Osmocom running on their
hardware, either with a proprietary PHY or with OsmoTRX.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;However, we expect that those BTS vendors also understand their
responsibility to share the development and maintenance effort of the
stack.&lt;/strong&gt;  Preferably by dedicating some of their own staff to work in
the Osmocom community.  Alternatively, sysmocom can perform that work as
paid service.  But that's a double-edged sword:  We don't want to be a
single point of failure.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="osmocom-funding-outside-of-sysmocom"&gt;
&lt;h2&gt;Osmocom funding outside of sysmocom&lt;/h2&gt;
&lt;p&gt;Osmocom is of course more than sysmocom.  Even for the cellular
infrastructure projects inside Osmocom is true: They are true,
community-based, open, collaborative development projects.  Anyone can
contribute.&lt;/p&gt;
&lt;p&gt;Over the years, there have been code contributions by e.g.
Fairwaves.  They, too, build GSM base station hardware and use that as a
means to not only recover the R&amp;amp;D on the hardware, but also to
contribute to Osmocom.  At some point a few years ago, there was a lot
of work from them in the area of OsmoTRX, OsmoBTS and OsmoPCU.
Unfortunately, in more recent years, they have not been able to keep up
the level of contributions.&lt;/p&gt;
&lt;p&gt;There are other companies engaged in activities with and around Osmcoom.
There's &lt;a class="reference external" href="https://www.rhizomatica.org/"&gt;Rhizomatica&lt;/a&gt;, an NGO helping
indigenous communities to run their own cellular networks.  They have
been funding some of our efforts, but being an NGO helping rural regions
in developing countries, they of course also don't have the deep
pockets.  Ideally, we'd want to be the ones contributing to them, not
the other way around.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="state-of-funding"&gt;
&lt;h2&gt;State of funding&lt;/h2&gt;
&lt;p&gt;We're making some progress in securing funding from players we cannot
name &lt;a class="brackets" href="https://laforge.gnumonks.org/blog/20170616-osmocom_funding/#footnote-4" id="footnote-reference-4" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;4&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; during recent years.  We're also making occasional progress in
convincing BTS suppliers to chip in their share.  Unfortunately there
are more who don't live up to their responsibility than those who do.
I might start calling them out by name one day.  The wider community and
the public actually deserves to know who plays by FOSS rules and who
doesn't.  That's not shaming, it's just stating bare facts.&lt;/p&gt;
&lt;p&gt;Which brings us to:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;sysmocom is in an office that's actually too small for the team,
equipment and stock. But we certainly cannot afford more space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;we cannot pay our employees what they could earn working at similar
positions in other companies. So working at sysmocom requires
dedication to the cause :)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Holger and I have invested way more time than we have ever paid us,
even more so considering the opportunity cost of what we would have
earned if we'd continued our freelance Open Source hacker path&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;we're [just barely] managing to pay for 6 developers dedicated to
Osmocom development on our payroll based on the various funding
sources indicated above&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nevertheless, I doubt that any such a small team has ever implemented an
end-to-end GSM/GPRS/EGPRS network from RAN to Core at
comparative feature set.  My deepest respects to everyone involved. The
big task now is to make it sustainable.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="summary"&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;So as you can see, there's quite a bit of funding around.  However, it
always falls short of what's needed to implement all parts properly, and
even not quite sufficient to keep maintaining the status quo in a proper
and tested way.  That can often be frustrating (mostly to us but
sometimes also to users who run into regressions and oter bugs).
There's so much more potential.  So many things we wanted to add or
clean up for a long time, but too little people interested in joining
in, helping out - financially or by writing code.&lt;/p&gt;
&lt;p&gt;On thing that is often a challenge when dealing with &lt;em&gt;traditional&lt;/em&gt;
customers: We are not developing a product and then selling a ready-made
product.  In fact, in FOSS this would be more or less suicidal:  We'd
have to invest man-years upfront, but then once it is finished, everyone
can use it without having to partake in that investment.&lt;/p&gt;
&lt;p&gt;So instead, the FOSS model &lt;em&gt;requires&lt;/em&gt; the customers/users to chip in
early during the R&amp;amp;D phase, in order to then subsequently harvest the
fruits of that.&lt;/p&gt;
&lt;p&gt;I think the lack of a FOSS mindset across the cellular / telecom
industry is the biggest constraining factor here.  I've seen that some
20-15 years ago in the Linux world.  Trust me, it takes a lot of
dedication to the cause to endure this lack of comprehension so many
years later.&lt;/p&gt;
&lt;aside class="footnote-list brackets"&gt;
&lt;aside class="footnote brackets" id="footnote-1" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;&lt;a role="doc-backlink" href="https://laforge.gnumonks.org/blog/20170616-osmocom_funding/#footnote-reference-1"&gt;1&lt;/a&gt;&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;just like &lt;a class="reference external" href="https://groups.google.com/forum/#!topic/comp.os.minix/dlNtH7RRrGA%5B1-25%5D"&gt;Linux has started out&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;aside class="footnote brackets" id="footnote-2" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;&lt;a role="doc-backlink" href="https://laforge.gnumonks.org/blog/20170616-osmocom_funding/#footnote-reference-2"&gt;2&lt;/a&gt;&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;while you will not find a lot of commits from Dieter in the code, he has been playing a key role in doing a lot of prototyping, reverse engineering and debugging!&lt;/p&gt;
&lt;/aside&gt;
&lt;aside class="footnote brackets" id="footnote-3" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;&lt;a role="doc-backlink" href="https://laforge.gnumonks.org/blog/20170616-osmocom_funding/#footnote-reference-3"&gt;3&lt;/a&gt;&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;sysmocom is 100% privately held by Holger and me, we intentionally have no external investors and are proud to never had to take a bank loan. So all we could invest was our own money and, most of all, time.&lt;/p&gt;
&lt;/aside&gt;
&lt;aside class="footnote brackets" id="footnote-4" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;&lt;a role="doc-backlink" href="https://laforge.gnumonks.org/blog/20170616-osmocom_funding/#footnote-reference-4"&gt;4&lt;/a&gt;&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;contrary to the FOSS world, a lot of aspects are confidential in business, and we're not at liberty to disclose the identities of all our customers&lt;/p&gt;
&lt;/aside&gt;
&lt;/aside&gt;
&lt;/section&gt;</description><category>gsm</category><category>openbsc</category><category>sysmocom</category><guid>https://laforge.gnumonks.org/blog/20170616-osmocom_funding/</guid><pubDate>Thu, 15 Jun 2017 16:00:00 GMT</pubDate></item><item><title>Playing back GSM RTP streams, RTP-HR bugs</title><link>https://laforge.gnumonks.org/blog/20170529-gapk-and-hr-bug/</link><dc:creator>Harald Welte</dc:creator><description>&lt;section id="chapter-0-problem-statement"&gt;
&lt;h2&gt;Chapter 0: Problem Statement&lt;/h2&gt;
&lt;p&gt;In an all-IP GSM network, where we use Abis, A and other interfaces
within the cellular network over IP transport, the audio of voice calls
is transported inside RTP frames.  The codec payload in those RTP frames
is the actual codec frame of the respective cellular voice codec.  In
GSM, there are four relevant codecs: FR, HR, EFR and AMR.&lt;/p&gt;
&lt;p&gt;Every so often during the (meanwhile many years of ) development of
Osmocom cellular infrastructure software it would have been useful to be
able to quickly play back the audio for analysis of given issues.&lt;/p&gt;
&lt;p&gt;However, until now we didn't have that capability.  The reason is
relatively simple: In Osmocom, we genally don't do transcoding but
simply pass the voice codec frames from left to right.  They're only
transcoded inside the phones or inside some external media gateway (in
case of larger networks).&lt;/p&gt;
&lt;/section&gt;
&lt;section id="chapter-1-gsm-audio-pocket-knife"&gt;
&lt;h2&gt;Chapter 1: GSM Audio Pocket Knife&lt;/h2&gt;
&lt;p&gt;Back in 2010, when we were very actively working on OsmocomBB, the
telephone-side GSM protocol stack implementation, Sylvain Munaut wrote
the &lt;a class="reference external" href="https://osmocom.org/projects/gapk/wiki/Gapk"&gt;GSM Audio Pocket Knife (gapk)&lt;/a&gt; in order to be able to
convert between different formats (representations) of codec frames.  In
cellular communcations, everyoe is coming up with their own
representation for the codec frames:  The way they look on E1 as a TRAU
frame is completely different from how RTP payload looks like, or what
the TI Calypso DSP uses internally, or what a GSM Tester like the Racal
61x3 uses.  The differences are mostly about data types used,
bit-endinanness as well as padding and headers.  And of course those
different formats exist for each of the four codecs :/&lt;/p&gt;
&lt;p&gt;In 2013 &lt;a class="reference external" href="http://git.osmocom.org/gapk/commit/?id=ce94d971e1223626c96ad32373ea4ff034233b50"&gt;I first added simplistic RTP support for FR-GSM to gapk&lt;/a&gt;,
which was sufficient for my debugging needs back then.  Still, you had
to save the decoded PCM output to a file and play that back, or use a
pipe into aplay.&lt;/p&gt;
&lt;p&gt;Last week, I picked up this subject again and added a long series of
patches to gapk:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;support for variable-length codec frames (required for AMR support)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;support for AMR codec encode/decode using libopencore-amrnb&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;support of all known RTP payload formats for all four codecs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;support for direct live playback to a sound card via ALSA&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of the above can now be combined to make GAPK bind to a specified
UDP port and play back the RTP codec frames that anyone sends to that
port using a command like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ gapk -I 0.0.0.0/30000 -f rtp-amr -A default -g rawpcm-s16le&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I've also merged a chance to OsmoBSC/OsmoNITB which allows the
administrator to re-direct the voice of any active voice channel towards
a user-specified IP address and port.  Using that you can simply
disconnect the voice stream from its normal destination and play
back the audio via your sound card.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="chapter-2-bugs-in-osmobts-gsm-hr"&gt;
&lt;h2&gt;Chapter 2: Bugs in OsmoBTS GSM-HR&lt;/h2&gt;
&lt;p&gt;While going through the exercise of implementing the above extension to
gapk, I had lots of trouble to get it to work for GSM-HR.&lt;/p&gt;
&lt;p&gt;After some more digging, it seems there are two conflicting
specification on how to format the RTP payload for half-rate GSM:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://www.etsi.org/deliver/etsi_ts/101300_101399/101318/01.01.01_60/ts_101318v010101p.pdf"&gt;ETSI TS 101 318&lt;/a&gt; from 1998&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://tools.ietf.org/html/rfc5993"&gt;IETF RFC 5993&lt;/a&gt; from 2010&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In Osmocom, we claim to implement RFC5993, but it turned out that (at
least) &lt;cite&gt;osmo-bts-sysmo&lt;/cite&gt; (for sysmoBTS) was actually implementing the
ETSI format instead.&lt;/p&gt;
&lt;p&gt;And even worse, &lt;cite&gt;osmo-bts-sysmo&lt;/cite&gt; gets event the ETSI format wrong.  Each
of the codec parameters (which are unaligned bit-fields) are in the
wrong bit-endianness :(&lt;/p&gt;
&lt;p&gt;Both the above were coincidentially also discovered by Sylvain Munaut
during operating of the 32C3 GSM network in December 2015 and resulted
the two following "work around" patches:
* &lt;a class="reference external" href="http://git.osmocom.org/openbsc/commit/?h=sylvain/32c3_codec&amp;amp;id=f198259f57f868bc85726cbac3df47b143b0300f"&gt;HACK for HR&lt;/a&gt;
* &lt;a class="reference external" href="http://git.osmocom.org/openbsc/commit/?h=sylvain/32c3_codec&amp;amp;id=5b4a16bbe93a7b1ace65cc23d6cce56ecf4f1275"&gt;HACK: Fix the bit order in HR frames&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Those merely worked around those issues in the rtp_proxy of OsmoNITB,
rather than addressing the real issue.  That's ok, they were "quick"
hacks to get something working at all during a four-day conference.  I'm
now working on "real" fixes in &lt;cite&gt;osmo-bts-sysmo&lt;/cite&gt;.  The devil is of course
in the details, when people upgrade one BTS but not the other and want
to inter-operate, ...&lt;/p&gt;
&lt;p&gt;It yet remains to be investigated how &lt;cite&gt;osmo-bts-trx&lt;/cite&gt; and other osmo-bts
ports behave in this regard.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="chapter-3-conclusions"&gt;
&lt;h2&gt;Chapter 3: Conclusions&lt;/h2&gt;
&lt;p&gt;Most definitely it is once again a very clear sign that more testing is
required.  It's tricky to see even wih &lt;cite&gt;osmo-gsm-tester&lt;/cite&gt;, as GSM-HR
works between two phones or even two instances of &lt;cite&gt;osmo-bts-sysmo&lt;/cite&gt;, as
both sides of the implementation have the same (wrong) understanding of
the spec.&lt;/p&gt;
&lt;p&gt;Given that we can only catch this kind of bug together with the hardware
(the DSP runs the PHY code), pure unit tests wouldn't catch it.  And the
end-to-end test is also not very well suited to it.  It seems to call
for something in betewen.  Something like an A-bis interface level test.&lt;/p&gt;
&lt;p&gt;We need more (automatic) testing.  I cannot say that often enough.  The
big challenge is how to convince contributors and customers that they
should invest their time and money there, rather than
yet-another (not automatically tested) feature?&lt;/p&gt;
&lt;/section&gt;</description><category>gsm</category><category>openbsc</category><guid>https://laforge.gnumonks.org/blog/20170529-gapk-and-hr-bug/</guid><pubDate>Sun, 28 May 2017 16:00:00 GMT</pubDate></item><item><title>OsmoCon 2017 Updates: Travel Grants and Schedule</title><link>https://laforge.gnumonks.org/blog/20170327-osmocon2017_schedule_grants_socialevent/</link><dc:creator>Harald Welte</dc:creator><description>&lt;img alt="/images/osmocon.png" src="https://laforge.gnumonks.org/images/osmocon.png"&gt;
&lt;p&gt;April 21st is approaching fast, so here some updates. I'm particularly
happy that we now have travel grants available.  So if the travel
expenses were preventing you from attending so far: This excuse is no
longer valid!&lt;/p&gt;
&lt;p&gt;Get your ticket now, before it is too late.  There's a limited number of
seats available.&lt;/p&gt;
&lt;section id="osmocon-2017-schedule"&gt;
&lt;h2&gt;OsmoCon 2017 Schedule&lt;/h2&gt;
&lt;p&gt;The &lt;a class="reference external" href="http://osmocom.org/projects/osmo-dev-con/wiki/OsmoCon2017_Programme"&gt;list of talks&lt;/a&gt;
for &lt;a class="reference external" href="http://osmocom.org/projects/osmo-dev-con/wiki/OsmoCon2017"&gt;OsmoCon 2017&lt;/a&gt; has been
available for quite some weeks, but today we finally published the first
actual &lt;a class="reference external" href="http://osmocom.org/projects/osmo-dev-con/wiki/OsmoCon2017#Schedule"&gt;schedule&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As you can see, the day is fully packed with talks about Osmocom
cellular infrastructure projects.  We had to cut some talk slots short
(30min instead of 45min), but I'm confident that it is good to cover a
wider range of topics, while at the same time avoiding fragmenting the
audience with multiple tracks.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="osmocon-2017-travel-grants"&gt;
&lt;h2&gt;OsmoCon 2017 Travel Grants&lt;/h2&gt;
&lt;p&gt;We are happy to announce that we have received donations to permit for
providing travel grants!&lt;/p&gt;
&lt;p&gt;This means that any attendee who is otherwise not able to cover their
travel to OsmoCon 2017 (e.g. because their interest in Osmocom is not
related to their work, or because their employer doesn't pay the travel
expenses) can now apply for such a travel grant.&lt;/p&gt;
&lt;p&gt;For more details see &lt;a class="reference external" href="http://osmocom.org/projects/osmo-dev-con/wiki/OsmoCon2017_TravelGrants"&gt;OsmoCon 2017 Travel Grants&lt;/a&gt;
and/or contact &lt;a class="reference external" href="mailto:osmocon2017@sysmocom.de"&gt;osmocon2017@sysmocom.de&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="osmocon-2017-social-event"&gt;
&lt;h2&gt;OsmoCon 2017 Social Event&lt;/h2&gt;
&lt;p&gt;Tech Talks are nice and fine, but what many people enjoy even more at
conferences is the informal networking combined with good food.  For
this, we have the social event at night, which is open to all attendees.&lt;/p&gt;
&lt;p&gt;See more details about it at &lt;a class="reference external" href="http://osmocom.org/projects/osmo-dev-con/wiki/OsmoCon2017_SocialEvent"&gt;OsmoCon 2017 Social Event&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;</description><category>gsm</category><category>openbsc</category><category>osmocom</category><guid>https://laforge.gnumonks.org/blog/20170327-osmocon2017_schedule_grants_socialevent/</guid><pubDate>Sun, 26 Mar 2017 16:00:00 GMT</pubDate></item><item><title>Osmocom Conference 2017 on April 21st</title><link>https://laforge.gnumonks.org/blog/20170201-osmocon2017/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;I'm very happy that in 2017, &lt;a class="reference external" href="https://osmocom.org/projects/osmo-dev-con/wiki/OsmoCon2017"&gt;we will have the first ever technical
conference on the Osmocom cellular infrastructure projects&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For many years, we have had a small, invitation only event by Osmocom
developers for Osmocom developers called OsmoDevCon.  This was fine for
the early years of Osmocom, but during the last few years it became
apparent that we also need a public event for our many users.  Those
range from commercial cellular operators to community based efforts like
&lt;a class="reference external" href="http://rhizomatica.org/"&gt;Rhizomatica&lt;/a&gt;, and of course include the many
research/lab type users with whom we started.&lt;/p&gt;
&lt;p&gt;So now we'll have the public OsmoCon on April 21st, back-to-back with
the invitation-only OsmoDevcon from April 22nd through 23rd.&lt;/p&gt;
&lt;p&gt;I'm hoping we can bring together a representative sample of our user
base at OsmoCon 2017 in April.  Looking forward to meet you all.  I hope
you're also curious to hear more from other users, and of course the
development team.&lt;/p&gt;
&lt;dl class="simple"&gt;
&lt;dt&gt;Regards,&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;Harald&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;</description><category>gsm</category><category>openbsc</category><category>osmocom</category><guid>https://laforge.gnumonks.org/blog/20170201-osmocon2017/</guid><pubDate>Tue, 31 Jan 2017 16:00:00 GMT</pubDate></item><item><title>Developers wanted for Osmocom GSM related work</title><link>https://laforge.gnumonks.org/blog/20160502-osmocom-sysmocom-jobs/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;Right now I'm feeling sad.  I really shouldn't, but I still do.&lt;/p&gt;
&lt;p&gt;Many years ago I started OpenBSC and Osmocom in order to bring Free
Software into an area where it barely existed before: Cellular
Infrastructure.  For the first few years, it was "just for fun", without
any professional users.  A FOSS project by enthusiasts.  Then we got
some commercial / professional users, and with them funding, paying for
e.g. Holger and my freelance work.  Still, implementing all protocol
stacks, interfaces and functional elements of GSM and GPRS from the
radio network to the core network is something that large corporations
typically spend hundreds of man-years on.  So funding for Osmocom GSM
implementations was always short, and we always tried to make the best
out of it.&lt;/p&gt;
&lt;p&gt;After Holger and I started sysmocom in 2011, we had a chance to use
funds from BTS sales to hire more developers, and we were growing our
team of developers.  We finally could pay some developers other than
ourselves from working on Free Software cellular network infrastructure.&lt;/p&gt;
&lt;p&gt;In 2014 and 2015, sysmocom got side-tracked with some projects where
Osmocom and the cellular network was only one small part of a much
larger scope.  In Q4/2015 and in 2016, we are back on track with
focussing 100% at Osmocom projects, which you can probably see by a lot
more associated commits to the respective project repositories.&lt;/p&gt;
&lt;p&gt;By now, we are in the lucky situation that the work we've done in the
Osmocom project on providing Free Software implementations of cellular
technologies like GSM, GPRS, EDGE and now also UMTS is receiving a lot
of attention.  This attention translates into companies approaching us
(particularly at sysmocom) regarding funding for implementing new
features, fixing existing bugs and short-comings, etc.  As part of that,
we can even work on much needed infrastructural changes in the software.&lt;/p&gt;
&lt;p&gt;So now we are in the opposite situation: There's a lot of interest in
funding Osmocom work, but there are few people in the Osmocom community
interested and/or capable to follow-up to that.  Some of the early
contributors have moved into other areas, and are now working on
proprietary cellular stacks at large multi-national corporations.  Some
others think of GSM as a fun hobby and want to keep it that way.&lt;/p&gt;
&lt;p&gt;At sysmocom, we are trying hard to do what we can to keep up with the
demand.  We've been looking to add people to our staff, but right now we
are struggling only to compensate for the regular fluctuation of
employees (i.e. keep the team size as is), let alone actually adding new
members to our team to help to move free software cellular networks
ahead.&lt;/p&gt;
&lt;p&gt;I am struggling to understand why that is.  I think Free Software in
cellular communications is one of the most interesting and challenging
frontiers for Free Software to work on.  And there are many FOSS
developers who love nothing more than to conquer new areas of
technology.&lt;/p&gt;
&lt;p&gt;At sysmocom, we can now offer what would have been my personal dream job
for many years:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;paid work on Free Software that is available to the general public,
rather than something only of value to the employer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;interesting technical challenges in an area of technology where you
will not find the answer to all your problems on stackoverflow or the
like&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;work in a small company consisting almost entirely only of die-hard
engineers, without corporate managers, marketing departments, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;work in an environment free of Microsoft and Apple software or cloud
services; use exclusively Free Software to get your work done&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I would hope that more developers would appreciate such an environment.
If you're interested in helping FOSS cellular networks ahead, feel free
to have a look at &lt;a class="reference external" href="http://sysmocom.de/jobs"&gt;http://sysmocom.de/jobs&lt;/a&gt; or contact us at
&lt;a class="reference external" href="mailto:jobs@sysmocom.de"&gt;jobs@sysmocom.de&lt;/a&gt;.  Together, we can try to move Free Software for mobile
communications to the next level!&lt;/p&gt;</description><category>gsm</category><category>openbsc</category><category>osmocom</category><category>sysmocom</category><guid>https://laforge.gnumonks.org/blog/20160502-osmocom-sysmocom-jobs/</guid><pubDate>Sun, 01 May 2016 16:00:00 GMT</pubDate></item><item><title>You can now install a GSM network using apt-get</title><link>https://laforge.gnumonks.org/blog/20160328-osmocom-in-debian/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;This is great news: You can now install a GSM network using apt-get!&lt;/p&gt;
&lt;p&gt;Thanks to the efforts of Debian developer Ruben Undheim, there's now
an OpenBSC (with all its flavors like OsmoBSC, OsmoNITB, OsmoSGSN,
...) package in the official Debian repository.&lt;/p&gt;
&lt;p&gt;Here is the link to the e-mail indicating acceptance into Debian:
&lt;a class="reference external" href="https://tracker.debian.org/news/755641"&gt;https://tracker.debian.org/news/755641&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think for the past many years into the OpenBSC (and wider Osmocom)
projects I always assumed that distribution packaging is not really
something all that important, as all the people using OpenBSC surely
would be technical enough to build it from the source.  And in fact, I
believe that building from source brings you one step closer to
actually modifying the code, and thus contribution.&lt;/p&gt;
&lt;p&gt;Nevertheless, the project has matured to a point where it is not used
only by developers anymore, and particularly also (god beware) by
people with limited experience with Linux in general.  That such
people still exist is surprisingly hard to realize for somebody like
myself who has spent more than 20 years in Linux land by now.&lt;/p&gt;
&lt;p&gt;So all in all, today I think that having packages in a Distribution
like Debian actually is important for the further adoption of the
project - pretty much like I believe that more and better public
documentation is.&lt;/p&gt;
&lt;p&gt;Looking forward to seeing the first bug reports reported through
bugs.debian.org rather than &lt;a class="reference external" href="https://projects.osmocom.org/"&gt;https://projects.osmocom.org/&lt;/a&gt; .  Once that
happens, we know that people are actually using the official Debian
packages.&lt;/p&gt;
&lt;p&gt;As an unrelated side note, the Osmocom project now also has nightly
builds available for Debian 7.0, Debian 8.0 and Ubunut 14.04 on both
i586 and x86_64 architecture from
&lt;a class="reference external" href="https://build.opensuse.org/project/show/network:osmocom:nightly"&gt;https://build.opensuse.org/project/show/network:osmocom:nightly&lt;/a&gt;.  The
nightly builds are for people who want to stay on the bleeding edge of
the code, but who don't want to go through building everything from
scratch.  See &lt;a class="reference external" href="http://lists.osmocom.org/pipermail/openbsc/2016-March/008203.html"&gt;Holgers post on the openbsc mailing list&lt;/a&gt;
for more information.&lt;/p&gt;</description><category>debian</category><category>gsm</category><category>openbsc</category><category>osmocom</category><guid>https://laforge.gnumonks.org/blog/20160328-osmocom-in-debian/</guid><pubDate>Sun, 27 Mar 2016 16:00:00 GMT</pubDate></item><item><title>Osmocom.org migrating to redmine</title><link>https://laforge.gnumonks.org/blog/20160221-osmocom-redmine/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;In 2008, we started bs11-abis, which was shortly after renamed to
OpenBSC.  At the time it seemed like a good idea to use
&lt;a class="reference external" href="http://trac.edgewall.org/a"&gt;trac&lt;/a&gt; as the project management system,
to have a wiki and an issue tracker.&lt;/p&gt;
&lt;p&gt;When further Osmocom projects like OsmocomBB, OsmocomTETRA etc. came
around, we simply replicated that infrastructure: Another trac instance
with the same theme, and a shared password file.&lt;/p&gt;
&lt;p&gt;The problem with this (and possibly the way we used it) is:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;it doesn't scale, as creating projects is manual, requires a sysadmin
and is time-consuming.  This meant e.g. SIMtrace was just a wiki page
in the OsmocomBB trac installation + associated http redirect, causing
some confusion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;issues can not easily be moved from one project to another, or have
cross-project relationships (like, depend on an issue in another
project)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;we had to use an external planet in order to aggregate the blog of
each of the trac instances&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;user account management the way we did it required shell access to the
machine, meaning user account applications got dropped due to the
effort involved. My apologies for that.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Especially the lack of being able to move pages and tickets between
trac's has resulted in a suboptimal use of the tools.  If we first write
code as part of OpenBSC and then move it to libosmocore, the associated
issues + wiki pages should be moved to a new project.&lt;/p&gt;
&lt;p&gt;At the same time, for the last 5 years we've been successfully using
&lt;a class="reference external" href="http://www.redmine.org/"&gt;redmine&lt;/a&gt; inside sysmocom to keep track of
many dozens of internal projects.&lt;/p&gt;
&lt;p&gt;So now, finally, we (zecke, tnt, myself) have taken up the task to
migrate the osmocom.org projects into redmine.  You can see the current
status at &lt;a class="reference external" href="http://projects.osmocom.org/"&gt;http://projects.osmocom.org/&lt;/a&gt;.  We could create a more
comprehensive project hierarchy, and give libosmocore, SIMtrace,
OsmoSGSN and many others their own project.&lt;/p&gt;
&lt;p&gt;Thanks to zecke for taking care of the installation/sysadmin part and
the initial conversion!&lt;/p&gt;
&lt;p&gt;Unfortunately the conversion from trac to redmine wiki syntax (and
structure) was not as automatic and straight-forward as one would have
hoped.  But after spending one entire day going through the most
important wiki pages, things are looking much better now.  As a side
effect, I have had a more comprehensive look into the history of all of
our projects than ever before :)&lt;/p&gt;
&lt;p&gt;Still, a lot of clean-up and improvement is needed until I'm happy,
particularly splitting the OpenBSC wiki into separate OsmoBSC, OsmoNITB,
OsmoBTS, OsmoPCU and OsmoSGSN wiki's is probably still going to take
some time.&lt;/p&gt;
&lt;p&gt;If you would like to help out, feel free to register an account on
projects.osmocom.org (if you don't already have one from the old trac
projects) and mail me for write access to the project(s) of your choice.&lt;/p&gt;
&lt;p&gt;Possible tasks include&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;putting pages into a more hierarchic structure (there's a parent/child
relationship in redmine wikis)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;fixing broken links due to page renames / wiki page moves&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;creating a new redmine 'Project' for your favorite tool that has a git
repo on &lt;a class="reference external" href="http://git.osmocom.org/"&gt;http://git.osmocom.org/&lt;/a&gt; and writing some (at least initial)
documentation about it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You don't need to be a software developer for that!&lt;/p&gt;</description><category>gsm</category><category>openbsc</category><category>osmocom</category><guid>https://laforge.gnumonks.org/blog/20160221-osmocom-redmine/</guid><pubDate>Sat, 20 Feb 2016 16:00:00 GMT</pubDate></item><item><title>32C3 is over, GSM and GPRS was running fine, osmo-iuh progress</title><link>https://laforge.gnumonks.org/blog/20151231-32c3/</link><dc:creator>Harald Welte</dc:creator><description>&lt;section id="the-32c3-gsm-network"&gt;
&lt;h2&gt;The 32C3 GSM Network&lt;/h2&gt;
&lt;p&gt;32C3 was great from the Osmocom perspective:  We could again run our own
cellular network at the event in order to perform load testing with real
users.  We had 7 BTSs running, each with a single TRX.  What was new
compared to previous years:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;OsmoPCU is significantly more robust and stable due to the efforts of
Jacob Erlbeck at sysmocom.  This means that GPRS is now actually still
usable in severe overload situations, like 1000 subscribers sharing
only very few kilobits.  Of course it will be slow, but at least data
still passes through as much as that's possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We were using half-rate traffic channels from day 2 onwards, in order
to enhance capacity.  Phones supporting AMR-HR would use that, but
then there are lots of old phones that only do classic HR (v1).
OsmoNITB with internal MNCC handler supports TCH/H with HR and AMR for
at least five years, but the particular combination of OsmoBTS +
OsmoNITB + lcr (all master branches) was not yet deployed at previous
CCC event networks so far.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Being forced to provide classic HR codec actually revealed several bugs
in the existing code:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;OsmoBTS (at least with the sysmoBTS hardware) is using bit ordering
that is not compliant to what the spec says on how GSM-HR frames
should be put into RTP frames.  We didn't realize this so far, as
handing frames from one sysmoBTS to another sysmoBTS of course works,
as both use the same (wrong) bit ordering.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The ETSI reference implementation of the HR codec has lots of
global/static variables, and thus doesn't really support running
multiple transcoders in parallel.  This is however what lcr was trying
(and needing) to do, and it of course failed as state from one
transcoder instance was leaking into another.  The problem is simple,
but the solution not so simple.  If you want to avoid re-structuring
the entire code in very intrusive ways or running one thread per
transcoder instance, then the only solution was to basically memcpy()
the entire data section of the transcoding library every time you
switch the state from one transcoder instance to the other.  It's
surprisingly difficult to learn the start + size of that data section
at runtime in a portable way, though.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to our resident voice codec expert Sylvain for debugging and
fixing the above two problems.&lt;/p&gt;
&lt;p&gt;Thanks also to Daniel and Ulli for taking care of the actual logistics
of bringing + installing (+ later unmounting) all associated equipment.&lt;/p&gt;
&lt;p&gt;Thanks furthermore to Kevin who has been patiently handling the 'Level 2
Support' cases of people with various problems ending up in the GSM
room.&lt;/p&gt;
&lt;p&gt;It's great that there is a team taking care of those real-world test
networks.  We learn a lot more about our software under heavy load
situations this way.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="osmo-iuh-progress-talk"&gt;
&lt;h2&gt;osmo-iuh progress + talk&lt;/h2&gt;
&lt;p&gt;I've been focussing basically full day (and night) over the week ahead
of Christmas and during Christmas to bring the osmo-iuh code into a
state where we could do a end-to-end demo with a regular phone + hNodeB
+ osmo-hnbgw + osmo-sgsn + openggsn.  Unfortunately I only got it up to
the point where we do the PDP CONTEXT ACTIVATION on the signalling
plane, with no actual user data going back and forth.  And then, for
strange reasons, I couldn't even demo that at the end of the talk.
Well, in either case, the code has made much progress.&lt;/p&gt;
&lt;p&gt;The video of the talk can be found at
&lt;a class="reference external" href="https://media.ccc.de/v/32c3-7412-running_your_own_3g_3_5g_network#video"&gt;https://media.ccc.de/v/32c3-7412-running_your_own_3g_3_5g_network#video&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;section id="meeting-friends"&gt;
&lt;h2&gt;meeting friends&lt;/h2&gt;
&lt;p&gt;The annual CCC congress is always an event where you meet old friends
and colleagues.  It was great talking to Stefan, Dimitri, Kevin, Nico,
Sylvain, Jochen, Sec, Schneider, bunnie and many other hackers.  After
the event is over, I wish I could continue working together with all
those folks the rest of the year, too :/&lt;/p&gt;
&lt;p&gt;Some people have been missed dearly.  Absence from the CCC congress is
not acceptable.  You know who you are, if you're reading this ;)&lt;/p&gt;
&lt;/section&gt;</description><category>ccc</category><category>gsm</category><category>openbsc</category><category>osmocom</category><guid>https://laforge.gnumonks.org/blog/20151231-32c3/</guid><pubDate>Wed, 30 Dec 2015 16:00:00 GMT</pubDate></item><item><title>Anyone interested in supporting SMPP interworking at 32C3?</title><link>https://laforge.gnumonks.org/blog/20151206-32c3-smpp/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;Sylvain brought this up yesterday:  Wouldn't it be nice to have some
degree of SMS interfacing from OpenBSC/OsmoNITB to the real world at
32C3?  It is something that we've never tried so far, and thus
definitely worthy of testing.&lt;/p&gt;
&lt;p&gt;Of course, full interworking is not possible without assigning public
MSISDN to all internal subscribers / 'extensions' how we call them.&lt;/p&gt;
&lt;p&gt;But what would most certainly work is to have at least outbound SMS
working by means of an external SMPP interface.&lt;/p&gt;
&lt;p&gt;The OsmoNITB-internal SMSC speaks SMPP already (in the SMSC role), so we
would need to implement some small amount of glue logic that behaves as
ESME (external SMS entity) towards both OsmoNITB as well as some
public SMS operator/reseller that speaks SMPP again.&lt;/p&gt;
&lt;p&gt;Now of course, sending SMS to public operators doesn't come for free.
So in case anyone reading this has access to SMPP at public operators,
resellers, SMS hubs, it would be interesting to see if there is a chance
for some funding/sponsoring of that experiment.&lt;/p&gt;
&lt;p&gt;Feel free to contact me if you see a way to make this happen.&lt;/p&gt;</description><category>ccc</category><category>gsm</category><category>openbsc</category><category>osmocom</category><category>sms</category><guid>https://laforge.gnumonks.org/blog/20151206-32c3-smpp/</guid><pubDate>Sat, 05 Dec 2015 16:00:00 GMT</pubDate></item><item><title>Python tool to talk to OsmoNITB MNCC interface</title><link>https://laforge.gnumonks.org/blog/20151202-mncc-python/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;The immediate first use case for this was to be able to 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.&lt;/p&gt;
&lt;p&gt;The first working version of the tool is available from&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://git.osmocom.org/mncc-python/"&gt;http://git.osmocom.org/mncc-python/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;git clone git://git.osmocom.org/mncc-python&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I'm happy for review / cleanup suggestion by people with more Python-foo
than I have.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;The actual encoding/decoding of MNCC messages is auto-generated from the
mncc header file #defines, enums and c-structures by means of ctypes
code generation.&lt;/p&gt;
&lt;p&gt;mncc_test.py currently drops you into a python shell where you can e.g.
start more / new calls by calling functions like &lt;em&gt;connect_call("7839",
"3802")&lt;/em&gt; from that shell.  Exiting the shell by &lt;em&gt;quit()&lt;/em&gt; or &lt;em&gt;Ctrl+C&lt;/em&gt;
will terminate all call FSMs and terminate.&lt;/p&gt;</description><category>gsm</category><category>openbsc</category><category>osmocom</category><guid>https://laforge.gnumonks.org/blog/20151202-mncc-python/</guid><pubDate>Tue, 01 Dec 2015 16:00:00 GMT</pubDate></item></channel></rss>