universalss7

The universal SS7 Library

The Universal SS7 library is a set of open source libraries to process signalling system 7 messages as used in the GSM world and transported over IP (So called Sigtran family of protocols)

Universal SS7 consists of:

ulibUniversal Library abstracting general use things (config files, webserver, layer objects etc)
ulibdba libary to query MySQL Postgres and Redis databases
ulibasn1a library to make it easier to deal with ASN1 encoded objects
ulibsmppa library to deal with the SMPP protocol
ulibsctpa library to extend ulib with SCTP specific sockets
ulibm2paa library implementing the SS7 M2PA (MTP2 over IP) protocol
ulibmtp3a library implementing the SS7 MTP3 and M3UA protocols
ulibgta library implementing SS7 SCCP Global Title handling
ulibsccpa library implementing the SS7 SCCP protocol
ulibtcapa library implementing the SS7 TCAP protocol
ulibgsmmapa library implementing the SS7 GSM-MAP protocol
ulibsmsa library implementing SMS encoding/decoding functions
ulibss7configa library implementing config file, api and basic stuff to tie an ss7 app together
ulibdiametera library implementing Diameter encoding/decoding functions
ulibpcapa library allowing to read/write ss7 packets using pcap files
ulibcamela library dealing with CAMEL files (still incomplete)
ulibisupa library dealing with ISUP files (still incomplete)

Related stuff

Used libraries

ulibdnsa library doing DNS functionality
schrittmachera system daemon for hot/standby configurations
schrittmacherclienta library for applications to implement a hot/standby mechanism
operatordba library to translate MNC/MCC into operator names
umscriptscripting engine used in some ss7 products
pointcodecommand line tool 'pc' to convert pointcodes in different formats
hlrclientclient for hlr lookups
libiconv-1.17library to convert character sets
libdispatchlibdispatch (aka GrandCentral Dispatch)
gnustep build scriptsThe GNUSTEP build scripts
gnustep makeThe GNUSTEP make environment
libobjc2The ObjectiveC 2.0 runtime
gnustep-baseThe GNUSTEP base library (Foundation)
gnustep-corebaseTHE GUSTEP corebase library (CoreFoundation)
gnustep-guiThe GNUSTEP libraries for GUI (AppKit, not used by universalss7)
gnustep-backThe GNUSTEP libraries for GUI backend (driver for X11, not used by universalss7)

The GNUSTEP libraries are compiled for /usr/local/ and are included in the repositories for easy installation. The gnustep versions which come with Debian are outdated and do not work with modern ARC and libobjc2 implementations and should not be installed.

Install from Repository (Debian/Ubuntu):

3.1 Add the repository key

wget -O - http://repo.universalss7.ch/debian/key.asc | apt-key add -

3.2 Add the repository

Debian 10 Buster (amd64, arm64)
echo "deb http://repo.universalss7.ch/debian/ buster universalss7" > /etc/apt/sources.list.d/universalss7.list
Debian 11 Bullseye (amd64, arm64)
echo "deb http://repo.universalss7.ch/debian/ bullseye universalss7" > /etc/apt/sources.list.d/universalss7.list
ubuntu 22.04 LTS Jammy Jellyfish (amd64,arm64)
echo "deb http://repo.universalss7.ch/ubuntu/ jammy universalss7" > /etc/apt/sources.list.d/universalss7.list

3.3 Checkout the binaries and development dependencies through a metapackage

apt-get update
apt-get install universalss7
apt-get install universalss7-dev

Downloads

The arm64 architecture runs on Raspberry Pi4, a arm64 VM running Debian under Apple M1 or powerful ARM servers such as these. Main development currently occurs on Debian 10 and amd64 architecture while Debian 11 and arm64 are starting to be frequently updated.

Building from Source

To build UniversalSS7 under Linux follow these instructions to build gnustep and ulib with Objective C ARC support. Especially to get libobjc2 correctly for support with arc is a bit tricky at times so I would recommend to use the prebuild packages for gnustep and libobjc downloadable from the release above. The ones in the official debian repository do not support ARC and thus will not work. The ones in our universalss7 repository of course will. most important tip: use clang 9 on Debian10 and use the gold linker on Debian 10 and 11 (symlink /usr/bin/ld -> /usr/bin/ld.gold)

Then checkout all repositories above in the order above and do

./configure
make
sudo make install
ldconfig
on each of them. if you want debugging enabled, use
./configure --enable-debug
instead.

To build Universal SS7 under macOS, make sure /LibraryFrameworks can be written to from your user (it installs there by default). Furthermore load the SCTP Kernel driver for macOS Sierra. Support for SCTP is no longer available on MacOS X as Apple has depreciated kernel extensions. This prohibits SCTP from being used under MacOS. As essential SS7 protocols such as M3UA, M2PA and even Diameter are run on top of SCTP, you are in dead water here. You can run Diameter over TCP but you can not run M2PA or M3UA over TCP. SCTP can be run in userspace over UDP encapsulation but if the remote end is a mobile infrastructure, it will not support it. I currently do most of the development using Xcode on a Mac so I'm very dissapointed about the move of Apple to drop kernel extensions and give no viable options to run SCTP on a Mac.

You can run UniversalSS7 on a Apple computer with a M1 or M2 chip however by running a VM with Debian under VMWare Fusion, Parallels or < href="https://docs.getutm.app/installation/macos/">UTM

Then checkout all repositories above in the order above and do

./configure
make
sudo make install
Alternatively you can open the xcode project file and build it from there (make for macOS in this case simply calls xcodebuild).

Current State of the project

The Release-1.8.0 branch is stable for use as SS7 endpoint.
Release 1.8.0's new features:

Plans for the next releases: