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/