[[chapter_introduction]] == Overview [[intro_overview]] === About OsmoSGSN OsmoSGSN is the Osmocom implementation of the GPRS SGSN (Serving Gprs Support Node) element inside the GPRS network. The SGSN plays a similar central function to the GPRS network as the MSC plays in the GSM network. The SGSN is connected on the downlink side to Gb interfaces of the BSS, specifically the PCU inside the BSS. The SGSN is further connected by the GTP protocol to the GGSN which terminates the tunnels towards the external packet data network (e.g. IPv4). OsmoSGSN supports both a PCU that is co-located with(in) the BTS, as well as a PCU that is co-located with(in) the BSC. In combination with OsmoNITB/OsmoBSC/OsmoBTS, the PCU is co-located within the BTS. [[fig-gprs-pcubts]] .GPRS network architecture with PCU in BTS [graphviz] ---- digraph G { rankdir=LR; MS0 [label="MS"]; MS1 [label="MS"]; MS0->BTS [label="Um"]; MS1->BTS [label="Um"]; BTS->BSC [label="Abis"]; BSC->MSC [label="A"]; BTS->PCU [label="pcu_sock"]; PCU->SGSN [label="Gb"]; SGSN->GGSN [label="GTP"]; } ---- === Software Components OsmoSGSN contains a variety of different software components, which we'll quickly describe in this section. ==== Gb Implementation OsmoSGSN implements the ETSI/3GPP specified Gb interface, including TS 08.16 (NS), TS 08.18 (BSSGP) and TS 08.64 (LLC) protocols. As transport layers for NS, it supports NS/IP (NS encapsulated in UDP/IP), as well as NS/FR/GRE/IP. The latter is provided in order to use a Router with Ethernet and Frame Relay interface to convert to actual physical Frame Relay medium, which is not directly supported by OsmoSGSN. The actual Gb Implementation is part of the libosmogb library, which is in turn part of the libosmocore software package. This allows the same Gb implementation to be used from osmo-pcu, osmo-gbproxy as well as OsmoSGSN. ==== GTP Implementation OsmoSGSN uses the libgtp implementation originating from OsmoGGSN. It supports both GTPv0 and GTPv1. ==== GMM Implementation The GPRS Mobility Management implementation is quite simplistic at this point. It supports the GPRS ATTACH and GPRS ROUTING AREA UPDATE procedures, as well as GPRS ATTACH and GPRS DETACH. ==== LLC Implementation The LLC (Logical Link Control) implementation of OsmoSGSN only supports non-acknowledged mode, as this is the most common use case in real-world GPRS networks. It does support both TCP/IP header compression according to RFC1144 and payload compression according to V.42bis The LLC implementation does support LLC encryption with ciphers GEA3 and GEA4. For encryption to work the auth policy needs to be set to remote and the SGSN connected to an HLR containing the subscriber data including key material. Other auth policys will not work with encryption. ==== Session Management Implementation The session management procedures ACTIVATE PDP CONTEXT and DEACTIVATE PDP CONTEXT are supported. However, no MODIFY PDP CONTEXT and no Network-initiated PDP context activation is possible. This is again covering the predominant use cases and configurations in GPRS real-world networks while skipping the more esoteric features. Multiple PDP contexts can be attached by a single MS. Multiple GGSNs can be configured and routing to a GGSN can be configured based on APN. Dynamic lookup of GGSNs though DNS-based APN resolving is also possible. === Limitations At the time of writing, OsmoSGSN still has a number of limitations, which are a result of the demand-driven Open Source development model. If you require any of those features, please consider implementing and contributing them, or contracting the existing OsmoSGSN developers for performing that work. Known Limitations include: * No paging coordination between SGSN and MSC * No SMS over Ps support