- What is OpenBSC
- Configurations / Modes
- Source code
- Mailing list
- IRC (Internet Relay Chat)
- Project status
OpenBSC is the current name for a software program that started with the name bs11-abis.
What is OpenBSC
It is a BSC (Base Station Controller) side implementation of the A-bis protocol, as implemented in the GSM Technical Specification 08.5x and 12.21. It implements a minimal subset of the BSC, MSC and HLR. It does not implement ant of the interfaces (like the A and B interfaces) between the higher-order GSM network components.
The goal of the project is to
- provide a basis for experimentation and security research with GSM from the network side
- document, publicized and point out any security related issues that we find as part of that
- learn more about GSM networks on a lower level, particularly the practical aspects with real-world equipment
We are not primarily interested in
- building a stable/reliable BSC/MSC for deployment in networks requiring high-9 (99.999....) availability
- building something that follows the GSM spec to the last detail
- disrupting actual commercial GSM network
While OpenBSC is mainly written in portable C99 code, there are is one non-portable parts: The E1 input driver requires a Linux kernel with mISDN support and an E1 interface card compatible with mISDN. You only need this if you have an E1 based BTS.
To operate a GSM network, you not only need OpenBSC but of course also some kind of GSM BTS. The only currently tested configurations are with a
- sysmocom sysmoBTS (by means of OsmoBTS)
- fairwaves UmSITE and UmDESK (using OsmoBTS)
- Siemens BS-11 microBTS
- ip.access nanoBTS
IF you feel geeky, you could also build a BTS yourself, using UmTRX SDR (Software Defined Radio) hardware and a usual PC with OsmoBTS software. The software installation is described at the network_from_scratch page.
Configurations / Modes
OpenBSC network-in-the-box (NITB) mode
This is very different from a classic GSM network in which the BSC is only one minor element in the distributed network consisting of many different elements like BSC, MSC, HLR, etc. Nonetheless, it is the classic mode to operate OpenBSC. In this configuration, you only need (at least) one BTS and OpenBSC. There is no need for a MSC, HLR, VLR, AuC or any other traditional GSM network components.
In order to use the NITB mode, you will use the osmo-nitb program.
Interconnecting OpenBSC with an ISDN or SIP PBX
If you want to connect calls outside of your OpenBSC based GSM network, you can have Linux Call Router and OpenBSC work together to create a setup like this:
OpenBSC in BSC-only mode
If you want to use OpenBSC as a classic GSM BSC, you can do that as well. However, you will need all other parts of the GSM network and a MSC that can provide an A-over-IP interface using SCCP-lite
In order to use the BSC-only mode, you will use the osmo-bsc program.
As we're a mostly research oriented project, we don't really have any releases yet. This will likely change soon.
You can check out the source code via
git clone git://git.osmocom.org/openbsc.git
or browse it at http://cgit.osmocom.org/cgit/openbsc/
There's a developer mailing list called firstname.lastname@example.org Subscription is available at http://lists.osmocom.org/mailman/listinfo/openbsc/
IRC (Internet Relay Chat)
We have an IRC channel where some developers and users hang out. You can find it at: irc.freenode.net/#openbsc
Things that work
- Mobility Management
- Very simplistic HLR implemented as sqlite database
- Non-secure Authentication using IMEI/IMSI? and regular SIM cards.
- Authentication using COMP128v1 if you have SIM cards with known Ki
- IMEI/IMSI? skimming of all phones that try to register with OpenBSC
- Transmission of MM INFO packets with operator name and local time / timezone
- paging of mobiles that are registered to the BTS
- keeping track of which location area a phone has last performed location updating
- in-call handover between multiple cells inside one BSC
- SMS Support
- Voice Call Support
- MO (Mobile Originated) and MT (Mobile Terminated) calls
- TCH/F support with FR and EFR codec
- TCH/H support with AMR codec (in BSC-only configuration)
- E1 support
- Abis/IP support
- Abis/IP protocol for nanoBTS
- RTP gateway to interoperate E1 based BTS and nanoBTS on one BSC and switch calls between them
- GPRS/EDGE support
- configuring the nanoBTS OML objects/attributes for GPRS and EDGE
- setting SYSTEM INFORMATION 13 via RSL
- configurable RAID/CGI/NSVCI/NSEI/BVCI
- have the BTS interoperate a SGSN with Gb (NS-over-IP) interface
- beta state OsmoSGSN? included along OpenBSC
Things that are implemented but don't work yet or aren't tested yet
- dynamic PDCH / TCH switching
Things being worked at
- GPS/DCF77 disciplined quartz reference for the HFC-E1 card (via HS-Esslingen, Student Research Project)
Things that are not implemented
- Cell Broadcast
- Any type of transcoding of voice data
- TCH/H voice calls (they work in osmo-bsc, but not in osmo-nitb)
- CSD? calls
- emergency call handling (works in osmo-bsc, but not in osmo-nitb)
- Discontinuous TX and RX (DTX? / DRX?) support
OpenBSC was mainly developed by Harald Welte and Holger Freyther. Contributions by Dieter Spaar, Stefan Schmidt, Daniel Willmann, Jan Luebbe, Thomas Seiler and Andreas Eversberg.
Special thanks to Dieter Spaar for BS11-Init? and tons of feedback and comments, without which we would not have been able to make progress as quickly as we did.