During the last couple of days, I've been working on completing, cleaning up and merging a Virtual Um interface (i.e. virtual radio layer) between OsmoBTS and OsmocomBB. 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.
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.
In OsmoBTS, this is implemented via the new
osmo-bts-virtual BTS model.
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.
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 travelling 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.
If you're curious and want to give it a shot, I've put together some setup instructions at Virtual Um.
Yesterday we've reached a remarkable milestone: the new OsmoMSC has first subscribed a 3G as well as a 2G phone at the same time!
Recall the recent big developments in Osmocom:
- creating OsmoHLR to manage subscribers asynchronously and across voice and data realms,
- separating an OsmoMSC off OsmoNITB,
- creating a true asynchronous state machine driven VLR in OsmoMSC,
- adding UMTS authentication with Milenage,
- supporting IuCS (and IuPS) to enable hNodeB driven 3G in Osmocom,
- and last but not least adding a true A interface to OsmoMSC using our brand new SCCP/M3UA impementation.
After this work has reached a stage where we can subscribe phones, send SMS and call each other using AoverIP and 3G separately, the remaining big step was to combine all of this in the new OsmoMSC: can we talk both A over IP to our separate OsmoBSC as well as IuCS via OsmoHNBGW to a 3G hNodeB, at the same time?
Some patches are still in the queue, but since yesterday, the answer is a resounding: Yes!
Typical for a software engineer's mindset, the joy of reaching this milestone is immediately followed by an outlook of what is left open:
- Split the current / legacy openbsc.git repository in separate new projects and lay the OsmoNITB to rest.
- Rename our MGCP gateway (osmo-bsc_mgcp) to OsmoMGW and teach it to transcode between TRAU frames, RTP and the 3G IuUP to facilitate voice calls between all of legacy BTS models using E1, our "current" 2G BTSes talking RTP over IP as well as 3G hNodeBs that encapsulate IuUP in RTP.
- Polish to production quality, update the docs and package for various platforms.
These are exciting times to be part of Osmocom: big changes are finally converging, to open up new horizons for FOSS driven cellular network technology.
- support of audio play-back via ALSA (standard Linux sound card drivers)
- support for Adaptive Multi-Rate (AMR)
- support for RTP payload formats for AMR, EFR HR-ETSI and HR-IETF
If all those new features are combined, you can use gapk as a RTP playback sink for any of the codecs used in (not only) Osmocom GSM networks. This is very useful for debugging, particularly if combined with a recent patch to OsmoBSC/OsmoNITB enabling the administrator to re-direct any BTS-originated RTP stream of an active call by issuing an IPA RSL MDCX command.
We've received the first mass-produced batch of version 3 of the mPCIE WWAN modem breakout boards.
Changes from the previous version 2:
- single-sided board with SIM slot moved to the top
- added drill holes for simplified mounting of the board
- added three SMA jacks (and U.FL jacks, and U.FL jumper wires) to use SMA-attached RF cabling/antennas with proper strain relief as opposed to a clumsy pigtail
As usual, all design files are published under CC-BY-SA at http://git.osmocom.org/osmo-small-hardware/tree/mpcie-breakout
Pre-manufactured/assembled boards are in stock and available as a kit with all related accessories from the sysmocom webshop:
We're happy to announce that there will be two talks related to the Osmocom cellular infrastructure projects at the upcoming OpenCellular Workshop held in Nairobi, Kenya on June 19 and June 20.
At the OpenCellular workshop hosted by iHub, technology and business leaders will share their insights and drive discussions around radio design, site planning, business models and many other topics on rural connectivity.
The two talks about Osmocom will be on:
- Osmocom: Open-source cellular stack for 2G and 3G by Harald Welte, Osmocom and sysmocom co-founder
- End to end testing of the Osmocom stack by Pau Espin Pedrol, engineer at sysmocom
You can learn more about the event (including venue, schedule, etc.) at https://www.opencellular.ihub.co.ke/
We're looking forward to meeting all parties involved in providing rural communications, as we consider the Osmocom cellular protocol stack a key factor in driving cost and innovation in connecting the next billion mobile subscribers.
Good news for everyone who got no OsmoCon2017 tickets or were otherwise unable to attend: Video recordings of all OsmoCon talks are available at C3VOC (direct search link). Enjoy introductions to, news on and real life reports around the Osmocom mobile communication stack. Great work by the VOC, thanks!
We are happy to announce that the OsmoCon2017 schedule has just become even more exciting with the addition of two talks on two projects that relate to Osmocom: OpenCellular (as a hardware platform to run OsmoBTS, OsmoBSC, OsmoNITB, ...) and Community Cellular Manager as a software to manage Osmocom-based cellular networks.
Community Cellular Manager¶
CCM is a software management and deployment suite enabling the operation of small-scale cellular networks that can also be used with the OpenCellular platform we announced in June. It makes it possible for organizations with limited technical capacity to leverage OpenCellular or third-party radio access network (RAN) solutions to build small-scale cellular networks in their own communities. See here for more information (and source code!).
Speaker: Shaddi Hasan (Facebook)
OpenCellular is an open source and cost-effective, software-defined wireless access platform (for GSM BTS and other standards), aimed to improve connectivity in remote areas of the world. See here for more information about OpenCellular.
Speaker: Kashif Ali (Facebook)
OsmoCon 2017 updates¶
There are some updates related to OsmoCon2017, the first Osmocom Conference, held on April 21st, 2017 in Berlin, Germany.
Summary¶Summary (for those too busy to read the full post):
- Schedule of talks has been released
- Travel Grants available for participants who are otherwise unable to travel to Berlin
- Social Event details available, including menu
- April 21st is approaching fast, make sure you get your Ticket in time. Limited number of seats available.
Schedule has been release¶
The list of talks with their abstracts has been on the website for quite some time, but now we actually have put together a schedule based on those talks.
Please see OsmoCon2017 for the schedule.
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.
We are happy to announce that we have received donations to permit for providing travel grants!
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.
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.
See more details about it at OsmoCon2017_SocialEvent.
The Osmocom core network landscape is transforming. Adding full UMTS Authentication support, paired with the 3G developments of the past year, has rocked the boat of the good old OsmoNITB. Here is why:
From previous 3G announcements1, you may already know that the OsmoNITB, the Network-In-The-Box, combines BSC, MSC and HLR (among other things), which has drawbacks. Our MSC code was nicely placed in a separate libmsc, but libmsc never stood on its own. From the start it always had its fingers deep in libbsc data structures. In 3G core networks, there no longer is a BSC, so we needed a clear interface to talk to libmsc, and make it not depend on libbsc. We do have a standalone OsmoBSC, so technically, it could talk to a standalone MSC implementation, instead of having both in the same program. Thus, on the 3G branch, we basically killed off the BSC part of OsmoNITB: the first step towards our brand new standalone OsmoMSC.
But what is a 3G core network without full 3G authentication? UMTS AKA2 was published in Release 1999 of the 3GPP technical specifications (R99) and provides the means for mutual authentication, usually using the Milenage algorithm. Since R99, SIM cards (USIM) not only verify their authenticity to the core network, they also expect the core network to verify its own authenticity, hence the term mutual authentication. 3G USIMs may fall back to pre-R99 authentication, but in general, 3G is expected to be synonymous with UMTS AKA. So far, Osmocom fell short of that.
We have had the Milenage algorithms implemented in libosmocore for years, but our stock OsmoNITB is unable to use it. The main reason: the subscriber database is incapable of managing UMTS AKA tokens. Another shortcoming of this database is that it runs synchronously in the OsmoNITB process: if it is locked or needs a bit longer, our entire core network stalls until the request is completed. And a third clumsy fact is that the OsmoSGSN cannot use OsmoNITB's subscriber database, duplicating the authorization configuration.
It made sense to solve all of these subscriber database problems in one effort, again trimming OsmoNITB, but this time at the other end. Enter stage the brand new OsmoHLR, a separate process managing the subscriber database:
- OsmoHLR has full UMTS AKA support.
- It serves GSUP to both our MSC and SGSN.
- As a separate process, the HLR now runs fully asynchronously.
Of course, the MSC needs to act as a GSUP client to use the separate OsmoHLR server. We needed to teach libmsc to handle GSUP requests asynchronously. In the 3GPP TS specifications, this is handled by the VLR, the Visitor Location Register. So far the VLR existed implicitly within OsmoNITB, basically as an in-RAM storage of subscriber data read directly from the database storage. But the VLR is more than that: it is specified to follow detailed state machines interacting with MSC and HLR, which allow, you guessed it, asynchronous handling of subscriber data. With the HLR moving to a separate process, we needed to implement a VLR proper. A generic finite state machine implementation has been added to libosmocore, and the specs' state machine definitions for the VLR have been implemented, supporting UMTS AKA right from the start.
Adding the new feature set had the logical consequence of profound code changes. In the 3G developments, we have for some time called the OsmoNITB-without-BSC a Circuit-Switched Core Network (OsmoCSCN). As it turns out, OsmoCSCN was merely a working title, it is already gone from code and documentation. Because, what do you get when you also strip from it the HLR? You get an OsmoMSC! (Technically, to accurately call it "OsmoMSC", we would also need to externalize the SMS storage3. It's on the todo list!)
By now it may be clear to you that OsmoNITB will not be around for long. But the transition away from OsmoNITB is not trivial: users have to get familiar with the new OsmoHLR. OsmoNITB's VTY configuration commands for subscriber management no longer exist. And, of course, our OsmoMSC cannot talk to OsmoBSC yet: to fully replace OsmoNITB with OsmoBSC + OsmoMSC + OsmoHLR, we also need a proper A-interface implementation on the OsmoMSC side. Even though OsmoNITB will stick around as a 2G solution until then, the move to an external HLR process in itself is a profound change in admin processes.
In consequence, we have taken yet another profound decision: we will not merge these new developments to openbsc.git's master branch. To clearly mark the move to the new Osmocom core network topology with the VLR-HLR separation and support for 3G by the new OsmoMSC program, we will create a brand new git repository that will be the focus of ongoing development. The current openbsc.git repository will remain as it is; it may see backports in urgent cases, but in essence it will be laid to rest and clearly marked as legacy4. Before we can flip that switch, we still need to sort out some petty details of what should move where, and then agree on a good name for the new repository. Until then, 2G with UMTS AKA support will live on the openbsc.git vlr_2G branch, while 3G with UMTS AKA support will live on the vlr_3G branch. The vlr_2G branch still features an OsmoNITB, but with an external OsmoHLR. The vlr_3G (previously sysmocom/iu) extends the vlr_2G branch to transform OsmoNITB to OsmoMSC and support the IuCS interface.
What about UMTS AKA on packet-switched connections? OsmoSGSN has had a GSUP client for quite some time now5. In fact GSUP was initially named "GPRS Subscriber Update Protocol" -- the G now re-coined to "Generic". Adding UMTS AKA to the OsmoSGSN was a breeze. You don't even need a special branch for that, it's already merged to master.
UMTS AKA is not limited to 3G. Any 2G network that indicates compliance with Release 1999 in the System Information bits can benefit from mutual authentication, and so does Osmocom, now.
Here is an overview of the current landscape:
Legacy 2G without UMTS AKA
┌────────────────────────┐ │ OsmoNITB │ ┌─────┐ ├╌╌╌╌╌┐ ╔═════╤════════╗ │ │ BTS │ <-Abis-> │ BSC ┆ ║ SMS ┆ subscr ║ │ │ │ └─────┴─╨─────┴────────╨─┘ │ │ │ │ ┌──────────┐ ┌──────────┐ │ PCU │ <-Gb---> │ OsmoSGSN │ <-GTP-> │ OpenGGSN │ └─────┘ └──────────┘ └──────────┘
2G with UMTS AKA
┌─────────────────────┐ │ OsmoNITB │ ┌─────┐ ├╌╌╌╌╌┐ ╔═════╗ ┌╌╌╌╌╌┤ ┌────────────┐ │ BTS │ <-Abis-> │ BSC ┆ ║ SMS ║ ┆ VLR │ <-GSUP-> │ OsmoHLR │ │ │ └─────┴─╨─────╨─┴─────┘ │ │ │ │ │ │ │ │ ┌─────────────────────┐ │ ╔════════╗ │ │ PCU │ <-Gb---> │ OsmoSGSN │ <-GSUP-> │ ║ subscr ║ │ └─────┘ │ │ └─╨────────╨─┘ │ │ ┌──────────┐ │ │ <-GTP--> │ OpenGGSN │ └─────────────────────┘ └──────────┘
3G with UMTS AKA
┌─────────────────────┐ │ OsmoMSC │ ┌───────────┐ ┌───────────┐ │ ╔═════╗ ┌╌╌╌╌╌┤ ┌────────────┐ │ 3G hNodeB │ <-Iuh-> │ OsmoHNBGW │ <-IuCS-> │ ║ SMS ║ ┆ VLR │ <-GSUP-> │ OsmoHLR │ └───────────┘ │ │ └───────╨─────╨─┴─────┘ │ │ │ │ │ │ │ │ ┌─────────────────────┐ │ ╔════════╗ │ │ │ <-IuPS-> │ OsmoSGSN │ <-GSUP-> │ ║ subscr ║ │ └───────────┘ │ │ └─╨────────╨─┘ │ │ ┌──────────┐ │ │ <-GTP--> │ OpenGGSN │ └─────────────────────┘ └──────────┘
2G with UMTS AKA and 3G support are not packaged yet. To use them, you need to build the software from source.
- For OsmoNITB with 2G UMTS AKA, you need to build openbsc.git using the vlr_2G branch.
- For 3G including UMTS AKA support, refer to the 3G wiki page.
With the help of Osmocom's sponsors and supporters, including but not limited to NLnet and sysmocom, we were able to invest due time and effort and have reached a remarkable milestone: UMTS AKA is now supported on Osmocom 3G as well as 2G networks, using Free Software all the way. Thank you for making this possible!
1 News post: 3G Voice Works
2 Universal Mobile Telecommunications System, Authentication and Key Agreement protocol
3 So far our OsmoMSC has a local sqlite database to manage SMS persistently, which is still a potential source of stalling due to synchronism.
4 Another reason for moving to a new repository: OpenBSC was the early name of the project, but by now the lack of "Osmo" in its name is a source of confusion among new users, since "OpenBSC" wrongly suggests affiliation with the unrelated OpenBTS project.
5 See config item auth-policy remote.
Also available in: Atom