Add common chapters on GB interface variants and SGSN pool

The chapters are not 100% finished, as there is still some
implementation work going on in terms of the libosmogb 'ns2' code
as well as the introduction of the SGSN pool feature to osmo-gbproxy.

Change-Id: I0ba2ed2a72db52a7282f4f1055812644421b2a98
This commit is contained in:
Harald Welte 2020-12-12 20:46:40 +01:00
parent c507529358
commit c1ef1ade56
5 changed files with 279 additions and 0 deletions

View File

@ -0,0 +1,38 @@
msc {
hscale="2";
pcu [label="PCU"], sgsn [label="SGSN"];
|||;
pcu rbox sgsn [label="(1) Initial Configuration after [re] start of PCU with NSEI 1024"];
--- [label="SNS-Size procedure to inform SGSN of PCU NS-VC capacity"];
pcu -> sgsn [label="SNS-SIZE (NSEI=1234, MAX-NR-NSVCS=8, NUM-IP-EP=1)"];
pcu <- sgsn [label="SNS-SIZE-ACK (NSEI=1234)"];
--- [label="PCU-originated SNS-CONFIG: Configure SGSN downlink flows"];
pcu -> sgsn [label="SNS-CONFIG (NSEI=1234, List of PCU side IPv4/IPv6 Elements)"];
pcu <- sgsn [label="SNS-CONFIG-ACK"];
--- [label="SGSN-originated SNS-CONFIG: Configure PCU uplink flows"];
pcu <- sgsn [label="SNS-CONFIG (NSEI=1234, List of SGSN side IPv4/IPv6 Elements)"];
pcu -> sgsn [label="SNS-CONFIG-ACK"];
|||;
pcu rbox sgsn [label="(2) Establishment of full mesh of NS-VCs: Each PCU side EP to each SGSN side EP"];
--- [label="NS-ALIVE procedure to the first SGSN-side IPv4 Endpoint"];
pcu -> sgsn [label="NS-ALIVE"];
pcu <- sgsn [label="NS-ALIVE-ACK"];
--- [label="NS-ALIVE procedure to the second SGSN-side IPv4 Endpoint"];
pcu -> sgsn [label="NS-ALIVE"];
pcu <- sgsn [label="NS-ALIVE-ACK"];
|||;
pcu rbox sgsn [label="(3) Establishment of BSGGP Virtual Connections (BVC)"];
--- [label="BVC-RESET of the (PCU global) Signaling BVC"];
pcu -> sgsn [label="NS-UNITDATA( BVC-RESET (BVCI=0) )"];
pcu <- sgsn [label="NS-UNITDATA( BVC-RESET-ACK (BVCI=0) )"];
|||;
--- [label="BVC-RESET of the PTP BVC of the first cell in the BSS"];
pcu -> sgsn [label="NS-UNITDATA( BVC-RESET (BVCI=999, RA-ID 262-42-13135-0) )"];
pcu <- sgsn [label="NS-UNITDATA( BVC-RESET-ACK (BVCI=999) )"];
...;
--- [label="BVC-RESET of the PTP BVC of the Nth cell in the BSS"];
pcu -> sgsn [label="NS-UNITDATA( BVC-RESET (BVCI=543, RA-ID 262-42-24675-0) )"];
pcu <- sgsn [label="NS-UNITDATA( BVC-RESET-ACK (BVCI=543) )"];
}

View File

@ -0,0 +1,62 @@
[[gb-sgsn-pool]]
== Gb interface in SGSN Pooling
SGSN Pooling is a modern optional extension of the 3GPP GERAN
architecture. It is officially referred-to as _Intra Domain Connection
of RAN Nodes to Multiple CN Nodes_. It requires The use of IP-SNS and
does not support legacy or non-standard Gb variants.
Without this optional feature, a given PCU/BSS always connects to one
SGSN via a Gb interface. All traffic is handled through that one
interface.
While the NS-level load sharing function and the _weights_ of the IP-SNS
allow for load distribution between different user plane entities, there
was demand for additional scalability and fail-over capabilities leading
to the SGSN pooling feature.
The major changes introduced to the Gb interface by SGSN pooling are as
follows:
* There is a separate NSE in the BSS for each of the SGSNs in the pool,
creating a 1:1 relationship between BSS-NSE and SGSN.
* Each of those per-SGSN NSEs has it's own NS-VCGs and NS-VCs, unrelated
to those of the other NSEs
* Each of those per-SGSN NSEs has it's own Signaling BVC
* Each Cell in the BSS has one PTP BVC _per SGSN in the pool_
This relationship is illustrated in <<fig-gb-pool>> below.
[[fig-gb-pool]]
.Gb interface concepts when SGSN pooling feature is used (from 3GPP TS 48.016)
image::./common/images/gb-concepts-pool.pdf[]
Looking strictly at the Gb interface, this means that there is a completely
separate Gb interface between each BSS and each pool member SGSN. All of the
procedures explained in <<gb-ip-sns>> hence occur N number of times to N number
of SGSN pool members.
=== Status of SGSN Pool support in Osmocom
==== osmo-pcu
There is currently no direct support for SGSN pooling in `osmo-pcu`
itself. However, as of December 2020, `osmo-gbproxy` is being extended
with SGSN pooling support.
This means that SGSN pooling can be added to any `osmo-pcu` based
deployment by introducing `osmo-gbproxy` between `osmo-pcu` and the SGSN.
The use of `osmo-gbproxy` also has the added benefit that all Gb
interfaces from various PCUs are aggregated into one Gb interface
towards (each) SGSN. Most deployments are used to such a _one interface
per BSS_ approach as they are used to the BSC-colocated PCU architecture
and not to the BTS-colocated PCU architecture as implemented in Osmocom.
==== osmo-gbproxy
FIXME
==== osmo-sgsn
FIXME

View File

@ -0,0 +1,179 @@
[[gb_variants]]
== Gb interface variants
There are a couple of variants of the Gb interface out there. This
section tries to provide an overview into what those variants are, how
they differ from each other and how to configure Osmocom software
accordingly.
The two peers involved in any Gb interface must always be in agreement
about the specific Gb interface variant before they are able to
connect.
=== Gb over Frame Relay over E1/T1
Historically, this is the first Gb interface that was specified as part
of GSM Release 97 when GPRS was first introduced.
Like all other terrestrial GSM interfaces, it uses circuit-switched
technology from the PDH/ISDN family of systems: E1 or T1 lines as per
ITU-T G.703 / G.704.
GSM TS 08.16 and later <<3gpp-ts-48-016>> specify that Frame Relay (FR)
shall be used as transport layer between the E1/T1 bit-stream and the
NS-level Gb messages.
Two peer entities such as a GPRS BSS and a SGSN are interconnected by a
NS-VCG (Virtual Connection Group) consisting of any number of NS-VCs
(Virtual Connections).
Each NS-VC in turn operates over a Frame Relay Permanent Virtual Circuit
(PVC), identified by its DLCI (Data Link Connection Identifier).
The protocol stacking is BSSGP/NS/FR/E1.
.Example: Gb over Frame Relay configuration
----
ns
nse 2001 nsvci 11 frnet hdlcnet1 dlci 16 <1>
nse 2001 nsvci 12 frnet hdlcnet2 dlci 17
nse 2001 nsvci 13 frnet hdlcnet3 dlci 18
nse 2001 nsvci 14 frnet hdlcnet4 dlci 19
nse 2002 nsvci 15 frnet hdlcnet5 dlci 20 <2>
nse 2002 nsvci 16 frnet hdlcnet6 dlci 21
nse 2003 nsvci 17 frnet hdlcnet7 dlci 22 <3>
nse 2003 nsvci 18 frnet hdlcnet8 dlci 23
----
<1> one NSE (2001) with four NS-VCI (11..14) on hdlcnet1..4 with their respective DLCI
<2> another NSE (2002) with two NS-VCI (15..16) on hdlcnet5..6 with their respective DLCI
<3> another NSE (2003) with two NS-VCI (17..18) on hdlcnet7..8 with their respective DLCI
==== FR Driver Support
The Osmocom NS/FR support currently requires the individual Frame Relay
Links to be exposed as Linux kernel HDLC net-devices. The Osmocom NS
implementation has to be instructed which `hdlcX` network devices it
shall use for each NS-VC, and which DLCIs to use on them.
The Linux kernel Frame Relay LMI support (which only implements the user
role anyway) is not used. Instead, the ITU-T Q.933 LMI is implemented
as part of the Osmocom NS code in libosmogb. You must hence use
`sethdlc hdlcX fr lmi none` to configure the HDLC net-devices for use
with Osmocom. The net-devices must also be _up_, e.g. using the
`ip link set hdlcX up` command in some system start-up script.
As the Osmocom Gb implementation uses AF_PACKET sockets on those
`hdlcX` network interfaces, the respective program must be running with
`CAP_NET_RAW` capability.
=== Gb over Frame Relay encapsulated in GRE/IP
This is a variant of the Gb-over-FR specified above. However, an
external router (e.g. certain ancient Cisco routers) is used to take the
Frame Relay frames from the physical E1/T1 TDM circuit and wrap them
into the GRE encapsulation as per IETF RFC 2784.
Those GRE/IP messages from the external Cisco router are then passed to
the Osmocom Gb stack (e.g. to `osmo-gbproxy`).
The protocol stacking is BSSGP/NS/FR/GRE/IP.
FIXME: Example configuration
----
ns
encapsulation framerelay-gre enabled 1
encapsulation framerelay-gre local-ip 127.0.0.1
----
=== Gb over IP "ip.access style"
This is a non-standard variant of Gb which is not found in the GSM/3GPP
specifications.
It uses an UDP/IP based transport layer, while not yet implementing the
IP-SNS that is normally required by a true 3GPP Gb over IP interface
described further below. Hence, this variant resembles an intermediate
state where a Gb interface originally designed for Frame Relay is used
over IP without any of the IP-specific procedures specified by 3GPP.
The major difference to 3GPP Gb over IP specified below are:
* No support for the IP-SNS and its SNS-SIZE, SNS-ADD, SNS-DELETE,
SNS-WEIGHT procedures
* Use of the NS-RESET, NS-BLOCK and NS-UNBLOCK procedures which are
normally forbidden over an IP network.
The protocol stacking is BSSGP/NS/UDP/IP.
FIXME: Full example configuration
----
ns
encapsulation udp local-ip 127.0.0.1
encapsulation udp local-port 23000
----
[[gb-ip-sns]]
=== 3GPP Gb over IP with IP-SNS
This is the only official, 3GPP-standardized way of speaking a Gb
interface over IP based transport.
It features the IP Sub-Network Service (IP-SNS) in order to dynamically
exchange information about IP endpoints (IP+port tuples) between the Gb
interface peers. This means that normally only one basic / first IP
endpoint needs to be configured. All additional IP endpoints and their
relative weight for load distribution are then negotiated via the
IP-SNS.
The major differences of this true IP based Gb compared to any of the
above are:
* No use of the NS-RESET, NS-BLOCK or NS-UNBLOCK procedures
* Ability to use some NS-VCs only for signaling (data_weight=0) or only
for user plane traffic (signaling_weight=0). This helps with SGSNs
that have an internal control/user plane separation architecture.
Once the IP endpoints of the peers are known to each other, A full mesh
of NS-VCs between all PCU-side endpoints and all SGSN endpoints is
established.
<<fig-gb-sns-nsvcs>> below illustrates a deployment with two IP
endpoints on both the BSS (PCU) and the SGSN, as well as the resulting
four NS-VCs established between them.
[[fig-gb-sns-nsvcs]]
.IP sub-network relationship between NS-VCs and NS-VLs (from 3GPP TS 48.016)
image::./common/images/gb-ip-nsvc.pdf[]
The sequence of messages in an IP-SNS enabled Gb interface bring-up can
be seen in <<fig-ip-sns-sequence>>. Here we have a PCU/BSS with a
single IP endpoint and a SGSN with two IP endpoints, which results in
only two NS-VC being established.
Furthermore, for each of the cells in the BSS/PCU, we can see the
BVC-RESET procedure for its corresponding PTP BVC.
[[fig-ip-sns-sequence]]
.Initialization of Gb interface using IP-SNS procedures
[mscgen]
----
include::gb-ip-sns.msc[]
----
==== PCU Configuration
FIXME: Full example configuration
.Example: osmo-pcu configuration for use with IP-SNS
----
pcu
gb-dialect ip-sns
----
NOTE: The initial IP endpoint for osmo-pcu is not configured in the PCU
itself, but in the BSC, who downloads the Gb interface configuration to
the BTS during BTS OML start-up, which in turn passes it to the PCU over
the unix domain socket between BTS and PCU

Binary file not shown.

Binary file not shown.