Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 1 | == Overview |
| 2 | |
| 3 | === About OsmoPCU |
| 4 | |
Philipp Maier | 2342d60 | 2023-03-24 15:04:04 +0100 | [diff] [blame] | 5 | OsmoPCU is the Osmocom implementation of the GPRS PCU (Packet Control Unit) |
| 6 | element inside the GPRS network. Depending on the BTS type the PCU will be |
| 7 | co-located within the BTS or run in co-location with the BSC. |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 8 | |
Philipp Maier | 2342d60 | 2023-03-24 15:04:04 +0100 | [diff] [blame] | 9 | [[pcu_co_located_with_bts]] |
| 10 | ==== OsmoPCU in co-location with OsmoBTS |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 11 | |
Philipp Maier | 2342d60 | 2023-03-24 15:04:04 +0100 | [diff] [blame] | 12 | In most OsmoPCU-supported base stations, the PCU is co-located with the BTS. |
| 13 | In this scenario OsmoPCU and OsmoBTS run on the same host system. Both are |
| 14 | interconnected using a unix domain socket based interface. |
| 15 | (see also: <<pcu_sock_iface>>) |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 16 | |
| 17 | [[fig-gprs-pcubts]] |
| 18 | .GPRS network architecture with PCU in BTS |
| 19 | [graphviz] |
| 20 | ---- |
| 21 | digraph G { |
| 22 | rankdir=LR; |
| 23 | MS0 [label="MS"] |
| 24 | MS1 [label="MS"] |
| 25 | MS0->BTS [label="Um"] |
| 26 | MS1->BTS [label="Um"] |
| 27 | BTS->BSC [label="Abis"] |
| 28 | BSC->MSC [label="A"] |
| 29 | BTS->PCU [label="pcu_sock"] |
| 30 | PCU->SGSN [label="Gb"] |
| 31 | SGSN->GGSN [label="GTP"] |
Pau Espin Pedrol | 7b7fb22 | 2021-01-29 13:04:36 +0100 | [diff] [blame] | 32 | PCU [color=red] |
Philipp Maier | f963a3d | 2023-03-24 11:33:03 +0100 | [diff] [blame] | 33 | { rank=same BTS PCU } |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 34 | } |
| 35 | ---- |
| 36 | |
Philipp Maier | 2342d60 | 2023-03-24 15:04:04 +0100 | [diff] [blame] | 37 | NOTE: Depending on the hardware architecture, OsmoPCU may also have direct |
| 38 | access on the PHY interface to exchange PDCH traffic efficiently. The socket |
| 39 | interface is then only used for signalling. |
| 40 | |
| 41 | ==== OsmoPCU in co-location with OsmoBSC |
| 42 | |
| 43 | Classic E1 based BTSs usually do not include a PCU. Instead those base stations |
| 44 | typically rely on an external PCU that is co-located with the BSC. The |
| 45 | signalling traffic (paging, channel assignments ect.) is then exchanged with the |
| 46 | BTS via RSL, while the PDCH traffic is handled by the PCU through a dedicated |
| 47 | TRAU frame based E1 connection. |
| 48 | |
| 49 | OsmoPCU supports this scenario as well. Due to the dedicated E1 connection, the |
| 50 | implementation is complex and strongly hardware specific. As of now (March 2023) |
| 51 | OsmoPCU supports Ericsson RBS2000/RBS6000 only. This implementation has been |
| 52 | made possible through funding by the NLnet Foundation. |
| 53 | |
| 54 | [[fig-gprs-pcubts]] |
| 55 | .GPRS network architecture with PCU in BTS |
| 56 | [graphviz] |
| 57 | ---- |
| 58 | digraph G { |
| 59 | rankdir=LR; |
| 60 | MS0 [label="MS"] |
| 61 | MS1 [label="MS"] |
| 62 | MS0->BTS [label="Um"] |
| 63 | MS1->BTS [label="Um"] |
| 64 | BTS->BSC [label="Abis"] |
| 65 | BSC->MSC [label="A"] |
| 66 | BTS->PCU [label="pcu_sock"] |
| 67 | PCU->SGSN [label="Gb"] |
| 68 | SGSN->GGSN [label="GTP"] |
| 69 | PCU [color=red] |
| 70 | { rank=same BTS PCU } |
| 71 | } |
| 72 | ---- |
| 73 | |
| 74 | When OsmoPCU runs in co-location to OsmoBSC, both are connected through the |
| 75 | same unix domain socket interface as mentioned above. |
| 76 | (see also: <<pcu_co_located_with_bts>>) The socket is used to pass signalling |
| 77 | traffic between PCU and BSC while the PCU controls the PDCH by directly talking |
| 78 | to the BTS CCU (channel coding unit) through a dedicated E1 connection. The |
| 79 | E1 line interface uses TRAU frames and is vastly comparable to the interface that |
| 80 | is used when speech is transferred. |
| 81 | |
| 82 | Since the PCU is mainly set up by OsmoBSC (or OsmoBTS) via the PCU socket, the |
| 83 | configuration in the BSC co-located scenario is no different from the BTS |
| 84 | co-located scenario. However, since the PCU requires a direct E1 connection to |
| 85 | the BTS an E1 line must be set up. (See also: <<cfg_e1_line>>) |
| 86 | |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 87 | === Software Components |
| 88 | |
| 89 | OsmoPCU consists of a variety of components, including |
| 90 | |
| 91 | * Gb interface (NS/BSSGP protocol) |
Philipp Maier | 2342d60 | 2023-03-24 15:04:04 +0100 | [diff] [blame] | 92 | * `pcu_sock` interface towards OsmoBTS (or OsmoBSC) |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 93 | * TBF management for uplink and downlink TBF |
| 94 | * RLC/MAC protocol implementation |
| 95 | * per-MS context for each MS currently served |
| 96 | * CSN.1 encoding/decoding routines |
| 97 | |
| 98 | ==== Gb Implementation |
| 99 | |
| 100 | OsmoPCU implements the ETSI/3GPP specified Gb interface, including TS |
| 101 | 08.16 (NS), TS 08.18 (BSSGP) protocols. As transport layer for NS, it |
| 102 | supports NS/IP (NS encapsulated in UDP/IP). |
| 103 | |
| 104 | The actual Gb Implementation is part of the libosmogb library, which is |
| 105 | in turn part of the libosmocore software package. This allows the same |
| 106 | Gb implementation to be used from OsmoPCU, OsmoGbProxy as well as |
| 107 | OsmoSGSN. |
| 108 | |
Philipp Maier | 2342d60 | 2023-03-24 15:04:04 +0100 | [diff] [blame] | 109 | [[pcu_sock_iface]] |
| 110 | ==== `pcu_sock` Interface to OsmoBTS/OsmoBSC |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 111 | |
Philipp Maier | 2342d60 | 2023-03-24 15:04:04 +0100 | [diff] [blame] | 112 | The interface towards OsmoBTS/OsmoBSC is called 'pcu_sock' and implemented |
| 113 | as a set of non-standardized primitives over a unix domain socket. The |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 114 | default file system path for this socket is `/tmp/pcu_bts`. |
| 115 | |
Philipp Maier | 2342d60 | 2023-03-24 15:04:04 +0100 | [diff] [blame] | 116 | The PCU socket path can be freely configured to a different file/path name, |
| 117 | primarily to permit running multiple independent BTS+PCU (or BSC+PCU) pairs |
| 118 | on a single Linux machine without having to use filesystem namespaces or other |
| 119 | complex configurations. |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 120 | |
Philipp Maier | 2342d60 | 2023-03-24 15:04:04 +0100 | [diff] [blame] | 121 | NOTE: If you change the PCU socket path on OsmoBTS/OsmoBSC by means of the |
Harald Welte | 4ff37fe | 2016-02-20 10:56:10 +0100 | [diff] [blame] | 122 | `pcu-socket` VTY configuration command, you must ensure to make the |
| 123 | identical change on the OsmoPCU side. |