[[overview]]
== Overview

This manual should help you getting started with OsmoBSC. It will cover
aspects of configuring and running the OsmoBSC.

[[intro_overview]]
=== About OsmoBSC

OsmoBSC is the Osmocom implementation of a Base Station Controller. It
implements:

- an 'A-bis' interface towards BTSs and
- an 'A' interface towards an MSC. It is important to be aware that there are
  two variants of the 'A' interface, see <<a-interface>>.

=== Software Components

OsmoBSC contains a variety of different software components, which
we'll briefly describe in this section.

==== A-bis Implementation

OsmoBSC implements the ETSI/3GPP specified A-bis interface, including TS 08.56
(LAPD), TS 08.58 (RSL) and TS 12.21 (OML). In addition, it supports a variety
of vendor-specific extensions and dialects in order to communicate with BTSs
from Siemens, Nokia, Ericsson, ip.access, Octasic and sysmocom, as well as
various USRP based BTS implementations, using OsmoBTS and OsmoTRX (like the
Ettus B200 series, the Fairwaves XTRX or the LimeSDR, to name a few).

For more information, see <<bts>> and <<bts-examples>>.

[[a-interface]]
==== A Implementation

OsmoBSC implements a sub-set of the GSM A interface as specified in TS 08.08
(BSSAP) and TS 04.08 (DTAP).

Osmocom offers two variants of the 'A' interface's protocol stacking:

- 'BSSAP/SCCPlite'
- 'BSSAP/SCCP/M3UA' (called AoIP)

Traditionally, OsmoBSC only implemented the BSSAP/SCCPlite protocol, but since a
proper M3UA implementation became available in 2017 as part of 'libosmo-sigtran'
('libosmo-sccp.git'), the stock OsmoBSC now supports BSSAP/SCCP/M3UA.  SCCPlite
support has been subsequently added to libosmo-sigtran in 2018, and now both
variants of the 'A' interface are supported by `osmo-bsc`.

The difference between an BSSAP/SCCPlite and BSSAP/SCCP/M3UA is illustrated in
<<fig-sccplite>> and <<fig-sccp-m3ua>>.

===== BSSAP/SCCPlite

Unlike classic A interface implementations for E1 interfacs,
`osmo-bsc` implements a variant of encapsulating the A interface over
IP.  To do so, the SCCP messages are wrapped in an IPA multiplex and then
communicated over TCP.  The audio channels are mapped to RTP streams.

This protocol stacking is sometimes called "SCCPlite".

[[fig-sccplite]]
.`osmo-bsc-sccplite` operation using 'BSSAP/SCCPlite'
[graphviz]
----
digraph G {
        rankdir=LR;
        MS0 [label="MS"];
        MS1 [label="MS"];
        MS2 [label="MS"];
        MS3 [label="MS"];
        BTS0 [label="BTS"];
        BTS1 [label="BTS"];
        BSC [label="OsmoBSC-SCCPlite"];
        MSC [label="3rd party MSC"];
        {MS0,MS1}->BTS0 [label="Um"];
        {MS2,MS3}->BTS1 [label="Um"];
        {BTS0,BTS1}->BSC [label="Abis\nTCP\nIP"];
        BSC->MSC [label="BSSAP\nSCCP\nTCP\nIP"];
}
----

===== BSSAP/SCCP/M3UA

The default OsmoBSC's A interface uses the M3UA variant of SIGTRAN protocol
stacking:

|=====
|BSSAP
|SCCP
|M3UA
|SCTP
|IP
|=====

It is recommended to use the M3UA variant, which is required to operate with OsmoMSC.

To route SCCP/M3UA messages between OsmoBSC and and MSC, an STP instance like
OsmoSTP is required.

[[fig-sccp-m3ua]]
.`osmo-bsc` operation using 'BSSAP/SCCP/M3UA'
[graphviz]
----
digraph G {
        rankdir=LR;
        MS0 [label="MS"];
        MS1 [label="MS"];
        MS2 [label="MS"];
        MS3 [label="MS"];
        BTS0 [label="BTS"];
        BTS1 [label="BTS"];
        BSC [label="OsmoBSC"];
        STP [label="OsmoSTP"];
        MSC [label="OsmoMSC\n(or 3rd-party MSC)"];
        {MS0,MS1}->BTS0 [label="Um"];
        {MS2,MS3}->BTS1 [label="Um"];
        {BTS0,BTS1}->BSC [label="Abis\nTCP\nIP"];
        BSC->STP->MSC [label="BSSAP\nSCCP\nM3UA\nSCTP\nIP"];
}
----

==== BSC Implementation

The BSC implementation covers the classic functionality of a GSM Base
Station Controller, i.e.

* configuring and bringing up BTSs with their TRXs and TSs
* implementing the A-bis interface / protocols for signalling and actual
  voice data (TRAU frames).
* processing measurement results from the mobile stations in dedicated
  mode, performing hand-over decision and execution.
* Terminating the TS 04.08 RR (Radio Resource) sub-layer from the MS.

For more information, see <<net>>, <<bts>> and <<bts-examples>>.


==== TRAU mapper / E1 sub-channel muxer

Unlike classic GSM networks, OsmoBSC does not perform any transcoding.
Rather, a compatible codec is selected for both legs of a call, and
codec frames are passed through transparently.  In order to achieve this
with E1 based BTS, OsmoBSC contains a E1 sub-channel de- and
re-multiplexer as well as a TRAU mapper that can map uplink to downlink
frames and vice versa.
