[[overview]]
== Overview

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

[[intro_overview]]
=== About OsmoNITB

OsmoNITB is one particular version of the OpenBSC software suite.
Unlike classic, distributed, hierarchical GSM networks, OsmoNITB
implements all parts of a GSM Network (BSC, MSC, VLR, HLR, AUC, SMSC)
__in the box__, i.e. in one element.

The difference between classic GSM network architecture and the OsmoNITB
based GSM network architecture is illustrated in <<fig-gsm-classic>> and
<<fig-gsm-nitb>>.

[[fig-gsm-classic]]
.Classic GSM network architecture (simplified)
[graphviz]
----
digraph G {
	rankdir=LR;
	MS0 [label="MS"]
	MS1 [label="MS"]
	MS2 [label="MS"]
	MS3 [label="MS"]
	BTS0 [label="BTS"]
	BTS1 [label="BTS"]
	MSC [label="MSC/VLR"]
	HLR [label="HLR/AUC"]
	MS0->BTS0 [label="Um"]
	MS1->BTS0 [label="Um"]
	MS2->BTS1 [label="Um"]
	MS3->BTS1 [label="Um"]
	BTS0->BSC [label="Abis"]
	BTS1->BSC [label="Abis"]
	BSC->MSC [label="A"]
	MSC->HLR [label="C"]
	MSC->EIR [label="F"]
	MSC->SMSC
}
----

[[fig-gsm-nitb]]
.GSM system architecture using OsmoNITB
[graphviz]
----
digraph G {
	rankdir=LR;
	MS0 [label="MS"]
	MS1 [label="MS"]
	MS2 [label="MS"]
	MS3 [label="MS"]
	BTS0 [label="BTS"]
	BTS1 [label="BTS"]
	MS0->BTS0 [label="Um"]
	MS1->BTS0 [label="Um"]
	MS2->BTS1 [label="Um"]
	MS3->BTS1 [label="Um"]
	BTS0->BSC [label="Abis"]
	BTS1->BSC [label="Abis"]
	subgraph cluster_nitb {
		label = "OsmoNITB";
		BSC
		MSC [label="MSC/VLR"]
		HLR [label="HLR/AUC"]
		BSC->MSC [label="A"]
		MSC->HLR [label="C"]
		MSC->EIR [label="F"]
		MSC->SMSC;
	}
}
----


=== Software Components

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

==== A-bis Implementation

OsmoNITB implements the ETSI/3GPP specified A-bis interface, including
_3GPP TS 48.056_ <<3gpp-ts-48-056>> (LAPD), _3GPP TS 48.058_
<<3gpp-ts-48-058>> (RSL) and 3GPP TS 52.021 <<3gpp-ts-52-021>> (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 and sysmocom.

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


==== 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 _3GPP TS 24.008_ <<3gpp-ts-24-008>> RR (Radio Resource)
  sub-layer from the MS.

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


==== HLR/AUC

A minimalistic implementation of the subscriber database (HLR) and
subscriber secret key storage (AUC).

For more information, see <<hlr>>.


==== SMSC

A minimal store-and-forward server for SMS, supporting both MO and MT
SMS service, as well as multi-part messages.

The built-in SMSC also supports an external SMSC interface.  For more
information, see <<smpp>>.


==== MSC

The MSC component of OsmoNITB implements the mobility management (MM)
functions of the TS 04.08, as well as the optional security related
procedures for cryptographic authentication and encryption.

Furthermore, it can handle TS 04.08 Call Control (CC), either by use of
an internal MNCC handler, or by use of an external MNCC agent.  For more
information see <<mncc>>.


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

Unlike classic GSM networks, OsmoNITB 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, OsmoNITB 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.


==== RTP proxy

BTS models implementing A-bis over IP don't use classic TRAU frames but
typically transport the voice codec frames as RTP/UDP/IP protocol.
OsmoNITB can either instruct the BTSs to send those voice streams
directly to each other (BTS to BTS without any intermediary), or it can
run an internal RTP proxy for passing frames from one BTS to another.

.RTP flow without RTP proxy mode (default)
[graphviz]
----
digraph G {
	rankdir=LR;

	MS0 [label="MS A"];
	MS1 [label="MS B"];
	BTS0 [label="BTS A"];
	BTS1 [label="BTS B"];
	NITB;

	MS0 -> BTS0;
	MS1 -> BTS1;
	BTS0 -> NITB [label="Abis OML+RSL",dir=both];
	BTS1 -> NITB [label="Abis OML+RSL",dir=both];
	BTS0 -> BTS1 [label="RTP",dir=both]
}
----

.RTP flow with RTP proxy mode
[graphviz]
----
digraph G {
	rankdir=LR;

	MS0 [label="MS A"];
	MS1 [label="MS B"];
	BTS0 [label="BTS A"];
	BTS1 [label="BTS B"];
	NITB;

	MS0 -> BTS0;
	MS1 -> BTS1;
	BTS0 -> NITB [label="Abis OML+RSL",dir=both];
	BTS1 -> NITB [label="Abis OML+RSL",dir=both];
	BTS0 -> NITB [label="RTP",dir=both]
	BTS1 -> NITB [label="RTP",dir=both]
}
----
