Open Source Mobile Communications Free Software Projects
Next to the various other Free Software projects, one particular focus area of my work is mobile communications technology. Most of those projects have by now been collected under the umbrella of the Osmocom (Open Source Mobile Communications) project.
Below is a list of those Osmocom projects that I was or am personally involved in. There are many more Osmocom projects, check out https://git.osmocom.org/ for a list of the available repositories.
Active Projects
libosmocore / libosmogsm / libosmovty / libosmoctrl
This is a set of core libraries used by most Osmocom projects, particularly those implementing GSM/GPRS network elements.
libosmocore contains select() loop abstraction, timers, message buffers, linked list, gsmtap, etc.
libosmovty contains the Osmocom VTY interface code, providing a cisco-style command line interface and configuration file parsing
libosmogsm contains GSM/GPRS specific code that is shared between multiple of our GSM related programs
libosmoctrl contains the control interface implementation, i.e. the programmatic interface by which external programs can control Osmocom programs
More about libosmocore at https://bb.osmocom.org/trac/wiki/libosmocore
libosmo-abis
libosmo-abis is the library implementing the transport layer for the A-bis protocol, in different flavors. So far, it supports - E1 based A-bis over mISDN-supported controllers - E1 based A-bis over DAHDI-supported controllers - IP based A-bis using SCCP/Lite also known as IPA multiplex
More about libosmo-abis at https://openbsc.osmocom.org/trac/wiki/libosmo-abis
OsmocomBB
OsmocomBB is an implementation of the mobile-phone-side GSM protocol stack, including Layer 1 (TDMA) through Layer 2 (LAPDm) and Layer 3 (RR/MM/CC). I founded the project and focussed mostly on the Layer 1 development.
More about OsmocomBB can be found at https://bb.osmocom.org/
OpenBSC / OsmoBSC / OsmoNITB / OsmoSGSN / etc.
OpenBSC and related projects are an implementation of GSM/GPRS network elements, including the BSC, but also including the SGSN, and something we call the NITB (Network In The Box).
This software is used to run a Free Software baesd GSM network.
OpenBSC was founded by me in 2008.
For more information see https://openbsc.osmocom.org/
OsmoBTS
OsmoBTS is a Free Software implementation of the GSM BTS (Base Transceiver Station) Layer 2 + 3. It supports a variety of different Layer 1 / PHY implementations, and intefaces over A-bis/IP towards the BSC.
OsmoBTS was primarily developed by Andreas Eversberg and myself.
For more information see https://openbsc.osmocom.org/trac/wiki/OsmoBTS
rtl-sdr
rtl-sdr is a project that enables you to use inexpensive Realtek-baesd DVB-T receiver USB dongles as general-purpose SDR receivers.
For more informatio see https://sdr.osmocom.org/trac/wiki/rtl-sdr
libsmpp34
This is a library implementing the SMPP SMS-Transport-Protocol, Version 3.4. The library was originally developed by Raul Tremsal, we have slightly improved it in the Osmocom project when added a SMPP interface to OsmoNITB.
The source code is available from https://cgit.osmocom.org/libsmpp34/
OpenGGSN
OpenGGSN is an open source GPRS Gateway Support Node (GGSN) implementation, originally developed by Jens Jakobsen. As he was not reachable anymore and seemed to have abandoned the project in 2005, I adopted it at Osmocom.org. It has since received many fixes and improvements.
For more information see https://openbsc.osmocom.org/trac/wiki/OpenGGSN
pysim
pysim is a small utility used to program a variety of different programmable SIM cards. It is developed and mainitained by Sylvain Munaut, I just contributed a few patches to it.
For more information see https://openbsc.osmocom.org/trac/wiki/OpenBSC_Crypto
The source code is available from https://cgit.osmocom.org/pysim/
simtrace
Osmocom SIMtrace is a project to allow protocol tracing of the interface between a (U)SIM card and a phone. It consists of hardware and associated device firmware as well as host software.
I did a proof-of-concept based on a generic SAM7 development board, after which Kevin Redon did the actual PCB board layout, and I the firmware and host software.
For more information see https://bb.osmocom.org/trac/wiki/SIMtrace
osmo-ais-tx
This is a small proof-of-concept hack to use a general-purpose SDR hardware and gnuradio to transmit AIS (Automatic Identification System) frames.
The source code is available at FIXME:git
osmo-adsb-gen
This is a small proof-of-concept hack to transmit ADS-B / Mode-S messages using a general-purpose SDR transmitter.
The source code is available at FIXME:git
asn1_docextract
This is an utility that I wrote, parsing Microsoft Word for DOS files and extracting any ASN.1 syntax contained therein. This can be used to extract the MAP v1 syntax from the older versions of GSM TS 09.02 (GSM MAP).
The source code is available at https://cgit.osmocom.org/asn1_docextract/
gen_ladder
This is a small utility that I wrote to generate ladder diagrams. Ladder diagrams are often used to illustrate messaging sequences between network nodes in (mobile) communications networks.
It uses a simple-to-write text format and generates a pretty ladder diagram from it. This is useful when preparing presentation slides or technical papers without having to touch a vector or bitmap graphics program.
The source code can be found at https://cgit.osmocom.org/gen_ladder/
asn1c / libasn1c
asn1c is an ASN.1 compiler / code generator developed by Lev Walkin.
The original home page is at https://lionet.info/asn1c/compiler.html
I just did some hacks on it here and there, including - merge / re-base the APER support by Eurecom - add type name prefixing support - split the runtime code into a shared library
The Osmocom fork of asn1c/libasn1c can be found at https://cgit.osmocom.org/asn1c/ and https://cgit.osmocom.org/libasn1c/ respectively.
OsmocomTETRA / osmo-tetra
OsmocomTETRA is a (partial) Free Software implementation of the TETRA (Terrestrial Trunked Radio) system. It includes code to receive, demodulate, decode and protocol-analyze the radio interface.
I'm the main author of the project.
More information can be found at https://tetra.osmocom.org/trac/
Inactive Projects
The below proejcts are - at least currently - inactive. The reasons are many-fold. One being that the amount of time I have is limited, and the number of projects is large. Sometimes there are other reasons, like a better altenative being available meanwhile.
Osmo-USRP
This was a 2011 attempt of turning OpenBTS into a real GSM BTS with A-bis interface, by mergig code from both OpenBTS and Osmocom.
The code was never completed and is by now abandoned. It has been superseded by the use of OsmoBTS with OsmoTRX.
My original source code can be found at https://cgit.osmocom.org/openbts-osmo/ and had been continued by Tom Cooper at https://github.com/tacooper/Osmo-USRP
osmo-gprs-ms-sim
libtelnet + ipaccess-telnet
The ip.access nanoBTS GSM Base Trasnceiver Stations have a debug telnet interface that is secured by some authentication.
ipaccess-telnet is a Free Software implementation of that authentication I did back in 2010, when adding nanoBTS support to OpenBSC. It is based entirely on libtelnet by Sean Middleditch.
The source code can be found at https://git.osmocom.org/libtelnet/
libosmo-asn1-tcap
This is a C-language shared library utilizing libasn1c to provide encoding and decoding functions for the TCAP protocol
The source code can be found at https://git.osmocom.org/libosmo-asn1-tcap/
libosmo-asn1-map
This is a C-language shared library utilizing libasn1c to provide encoding and decoding functions for the MAP protocol
The source code can be found at https://git.osmocom.org/libosmo-asn1-map/
libosmo-tcap
This is a 2010 attempt at implementing the TCAP state machines and an associated application interface in C language. It usese libosmo-asn1-tcap for the encoding/decoding.
The source code can be found at https://git.osmocom.org/libosmo-tcap/
osmocom-lcs
FIXME:git
libosmo-crypt-a53
FIXME:git
osmo-codegen
An attempt at using code generation for (particularly) the GSM Layer 3 protocol description. The idea was to describe the L3 message definitions into a domain-specific language (DSL), and thenn use an ANTLR3 based parser + code generator.
The DSL, the transcibed message definitions and the ANTLR3 parser exist, but no actual code generator has been written.
The source code can be found at https://git.osmocom.org/osmo-codegen/
erlang/osmo_ss7
This is an Erlang implementation of various versions of SIGTRAN and SS7 protocol layers, including - codecs for BSSMAP, IPA, ISUP, M2PA, M2UA, M3UA, MTP2, MTP3, SCCP - state machines for M3UA, MTP2, MTP3, SUA - SCTP encapsulation of the various xUA
The code forms an erlang Application and includes a supervisor hierarchy.
The source code can be found at https://git.osmocom.org/erlang/osmo_ss7/
erlang/osmo_cap
This is an Erlang library for encoding/decoding CAP (Camel Application Part) messages.
The source code can be found at https://git.osmocom.org/erlang/osmo_cap/
erlang/osmo_map
This is an Erlang library for encoding/decoding MAP (Mobile Application Part0 messages.
The source code can be found at https://git.osmocom.org/erlang/osmo_map/
erlang/mgw_nat
This is an Erlang implementation of something like NAT (Netwokr Address Translation) for the ISUP, SCCP, TCAP and MAP protocols on the GSM/UMTS roaming interface.
It acts as a transparent proxy (not seen by the STPs) for a SIGTRAN connection and performs various configurable state-less and stateful re-writing, including Global Titles on all protocol levels
The source code can be found at https://git.osmocom.org/erlang/mgw_nat/
An earlier version was called osmo-map-masq and is available from https://git.osmocom.org/osmo-map-masq/
erlang/signerl
This is an Erlang TCAP + MAP implementation originally started by Vance Shipley (Motivity), which I inherited in 2011 and continued to work on until about 2013 when I had a lack of time to continue. It is mostly complete and is probably just in need of a lot of testing + debugging.
The source code can be found at https://git.osmocom.org/erlang/signerl/
erlang/osmo_sccp
This is an Erlang implementation of the SCCP protocol.
The connectionless part of SCCP is working and has been used together with signerl and osmo_ss7.
The connection-oriented part of SCCP is mostly implemented (except segmentation/reassembly and expedited data) but has never been tested/used so far.
The source code can be found at https://git.osmocom.org/erlang/osmo_sccp/
osmo-cos
This is an incomplete and abandoned project attempting to implement a Card OS (Smart Card Operationg System) on a Chinese CC32RS512 smart card controller.
With the availability of inexpensive cards like the sysmoUSIM-SJS1, where the ADM key is available and the contents of each file and all keys can be freely programmed, the need for implementing a CardOS has significantly disappeared.
The by now abandoned source code can be found at https://cgit.osmocom.org/osmo-cos/
osmo-auc
Was an early attemt/proof-of-concept to implement an Authentication Center based on the C-language libosmo-map.
The source code can be found at https://git.osmocom.org/osmo-auc/