Unverified Commit e812920b authored by Raphael Defosseux's avatar Raphael Defosseux Committed by GitHub

Merge pull request #4 from OPENAIRINTERFACE/develop-documentation

Documentation
parents 9a38d850 835cac7b
# RELEASE NOTES: #
## v1.0.0 -- May 2019 ##
* First release, Able to serve a MME with basic attach, detach, release, paging procedures, default bearer only.
# Contributing to OpenAir-CN #
We want to make contributing to this project as easy and transparent as possible.
Please refer to the steps described on our website: [How to contribute to OAI](https://www.openairinterface.org/?page_id=112)
1. Sign and return a Contributor License Agreement to OAI team.
2. Create an account on [GitHub](https://github.com).
3. Provide the identifiant of this account to the OAI team (mailto:contact@openairinterface.org) so you have developer rights on this repository.
4. The policies are described in these wiki pages: [OAI Policies](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/oai-policies-home)
- You can fork onto another hosting system. But we will **NOT** accept a pull request from a forked repository.
* This decision was made for the license reasons.
* The Continuous Integration will reject your pull request.
- All pull requests SHALL have **`develop`** branch as target branch.
## Coding Styles ##
We are using `clang-format` as formatting tool on the C/C++ code.
At the time of writing (March 30th, 2020), we are using `clang-format` version 8.0.0 or above. By default, on a Ubuntu bionic Desktop edition, you would install version 6.0.0.
So it is very likely you will have to install it manually. Again, at the time of writing, the working version we found was 9.0.0.
```bash
$ wget https://releases.llvm.org/9.0.0/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
$ mkdir clang_tmp
$ tar xvfJ clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz -C ./clang_tmp
$ sudo cp clang_tmp/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang-format /usr/bin/clang-format
$ rm -Rf clang*
$ clang-format --version
clang-format version 9.0.0 (tags/RELEASE_900/final)
```
How to format:
```bash
$ cd myClonedWorkspace/src
$ clang-format -i theFilesYouWantToFormat
```
## License ##
By contributing to OpenAirInterface, you agree that your contributions will be licensed under the [LICENSE](LICENSE) file in the root directory of this source tree.
## Continuous Integration process ##
1. You push your modified code with the new branch onto our [official GitHub repository](https://github.com/OPENAIRINTERFACE/openair-spgwu-tiny).
- Please make the name of the branch explicit and short.
2. You create a pull request from the [dedicated web page](https://github.com/OPENAIRINTERFACE/openair-spgwu-tiny/pulls).
- The `target` (`base` in the web-page) branch **SHALL be `develop`**.
- The `source` (`compare` in the web-page) branch is your branch.
3. Our Continuous Integration (CI) process will be triggered automatically on your proposed modified code and check the validity.
- Check build
- Check some formatting rules
- Run a bunch of tests
4. If at least one of these steps fails, you will have to push corrections onto your source branch.
- The step 3. will be again automatically triggered on this new commit.
- Please wait that your run is finished before committing and pushing new modifications on your source branch.
- That will allow fairness on the CI usage to other contributors.
4. When this automated process passes, one of our CI administrators will review your changes or assign a senior contributor
to do a peer-review.
5. Once the peer reviewer accepts your modification, one of our CI administrators will accept and merge your pull request
- The CI will run again on the new `develop` branch commit.
- The source branch WILL be deleted by one of our CI administrators.
# openair-cn-cups
Control User Plane Separation of SPGW-C and SPGW-U
├── http://www.openairinterface.org/?page_id=698
------------------------------------------------------------------------------
It is distributed under OAI Public License V1.0.
The license information is distributed under LICENSE file in the same directory.
OPENAIR-CN
An implementation of the Evolved Packet Core network.
------------------------------------------------------------------------------
Openair-cn is an implementation of the 3GPP specifications concerning the
Evolved Packet Core Networks, that means it contains the implementation of the
following network elements:
The OpenAirInterface CN CUPS software is composed of the following parts:
* MME,
* HSS,
* S-GW+P-GW.
Each element implementation has its own repository: this repository (`openair-spgwu-tiny`) is meant for SPGW-U.
openair-cn-cups
# openair-spgwc
In the Control User Plane Separation of SPGW, only the SPGW-U (User Plane) implementation is available in this repo.
It is distributed under `OAI Public License V1.1`. See [OAI Website for more details](https://www.openairinterface.org/?page_id=698).
The text for `OAI Public License V1.1` is also available under [LICENSE](LICENSE) file in the same directory.
# Where to start
The Openair-cn SPGW-U code is written, executed, and tested on UBUNTU server bionic version.
More details on the deployment options and the supported feature set is available on this [page](docs/FEATURE_SET.md).
# Collaborative work
This source code is managed through a GITHUB, a collaborative development platform
Process is explained in [CONTRIBUTING](CONTRIBUTING.md) file.
# Directory structure
<pre>
openair-spgwu-tiny
├── build : Build directory, contains targets and object files generated by compilation of network functions.
├── log : Directory containing build log files.
├── scripts : Directory containing scripts for building network functions
├── spgw_c : Directory containing CMakefile.txt and object files generated by compilation of SPGW-C network function.
├── spgw_u : Directory containing CMakefile.txt and object files generated by compilation of SPGW-U network function.
└── ci-scripts : Directory containing scripts for the CI process
│ ├── log : Directory containing build log files.
│ ├── scripts : Directory containing scripts for building network functions
│ └── spgw_u : Directory containing CMakefile.txt and object files generated by compilation of SPGW-U network function.
├── ci-scripts : Directory containing scripts for the CI process
├── etc : Directory containing the configuration files to be deployed for each network function.
└── src : Source files of network functions.
├── common : Common header files
......@@ -22,15 +52,9 @@ openair-cn-cups
├── gtpv1u : Generic GTPV1-U stack implementation
├── gtpv2c : Generic GTPV2-C stack implementation
├── itti : Inter task interface
├── oai_spgwc : SPGW-C main directory, contains the "main" CMakeLists.txt file.
├── oai_spgwu : SPGW-U main directory, contains the "main" CMakeLists.txt file.
├── pfcp : Generic PFCP stack implementation.
├── pgwc : PGW-C network fonctions procedures and contexts.
├── sgwc : SGW-C network fonctions procedures and contexts.
├── spgwu : SPGW-U network fonctions procedures and contexts.
│   └── simpleswitch : Very Basic Switch implementation.
├── pfcp : Generic PFCP stack implementation.
└── udp : UDP server implementation.
</pre>
RELEASE NOTES:
v1.0.0 -> First release, Able to serve a MME with basic attach, detach, release, paging procedures, default bearer only.
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="./images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">OpenAirInterface Core Network Feature Set</font></b>
</td>
</tr>
</table>
**Table of Contents**
1. [OpenAirInterface Core Network Block Diagram](#1-openairinterface-core-network-block-diagram)
2. [OpenAirInterface Core Network Fundamentals](#2-oai-core-network-fundamentals)
3. [OpenAirInterface Core Network Deployment](#3-oai-core-network-deployment)
4. [OpenAirInterface SPGW-CUPS Fundamentals](#4-oai-spgw-cups-fundamentals)
5. [OpenAirInterface SGW Feature List](./FEATURE_SET_SGW.md)
6. [OpenAirInterface PGW Feature List](./FEATURE_SET_PGW.md)
# 1. OpenAirInterface Core Network Block Diagram #
![Block Diagram](./images/oai_cn_block_diagram.png)
# 2. OAI Core Network Fundamentals #
* Network Access Control Functions
- Authentication and authorization
- Admission control
- Policy and charging enforcement
* Packet Routing and Transfer Functions
- IP header compression function
- Packet screening.
* Mobility Management Functions
- Reachability management for UE in ECM IDLE state
* Security Functions
* Radio Resource Management Functions
* Network Management Functions (O&M)
- GTP C signaling based Load and Overload Control
- Load balancing between MME instances
- MME control of overload
- PDN GW control of overload
# 3. OAI Core Network Deployment #
* Target OS
- Ubuntu 18.04 (bionic) server edition
- Red Hat Entreprise Linux 8
* Hardware Requirements
- x86-64 Intel/AMD CPU
- At least one 1 network device
* Linux Kernel
- Generic kernel is enough
* Deployment feasible on:
- PC
- Server
- Container
- Virtual Machine
# 4. OAI SPGW-CUPS Fundamentals #
CUPS = Control-User Planes Separation
So SPGW is composed of almost 2 network functions:
* 1 SPGW-C
* 1 SPGW-U
Fully written in C++ (-std=c++17)
* Internal design still asynchronous (ITTI based API)
* Usage of submodules: spdlog, libfolly (nolock collections)
Main differences with previous SPGW (tag `v0.7.0`)
* Handles GTP fragmentation
* Enables Network Address Translation (NAT), based on iptables
* Easier to install (no kernel dependencies)
* Switch-talking natively PFCP
* Data is copied/handled in user space
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="./images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">OpenAirInterface Core PDN Gateway Feature Set</font></b>
</td>
</tr>
</table>
**Table of Contents**
1. [PGW Fundamentals](#1-pgw-fundamentals)
2. [OAI PGW Available Interfaces](#2-oai-pgw-available-interfaces)
3. [OAI PGW Conformance Functions](#3-oai-pgw-conformance-functions)
# 1. PGW Fundamentals #
(from [Wikipedia.org](https://en.wikipedia.org/wiki/System_Architecture_Evolution))
The Packet Data Network Gateway provides connectivity from the UE to external packet data networks by being the point of exit and entry of traffic for the UE.
A UE may have simultaneous connectivity with more than one PGW for accessing multiple PDNs.
The PGW performs:
- Policy enforcement,
- Packet filtering for each user,
- Charging support,
- Lawful interception and
- Packet screening.
Another key role of the PGW is to act as the anchor for mobility between 3GPP and non-3GPP technologies such as WiMAX and 3GPP2 (CDMA 1X and EvDO)
# 2. OAI PGW Available Interfaces #
| **ID** | **Interface** | **Status** | **Comments** | **Protocols** |
| ------ | ------------- | ------------------ | ---------------------------------------------- | ------------- |
| 1 | S5 / S8 | :heavy_check_mark: | Available on control plane only. | GTP-based |
| 2 | Gx | :x: | Policy | |
| 3 | Gy | :x: | Charging | |
| 4 | SGi | :heavy_check_mark: | | |
# 3. OAI SGW Conformance Functions #
Based on document **3GPP TS 23.401 V15.5.0 §4.4.3.3**.
| **ID** | **Classification** | **Status** | **Comments** |
| ------ | ------------------------------------------------------------ | ------------------ | ---------------------------------------------- |
| 1 | Per-user based packet filtering (ie deep packet inspection) | :heavy_check_mark: | |
| 2 | Lawful Interception | :x: | |
| 3 | UE IP address allocation | :heavy_check_mark: | Pools of IP addresses |
| 4 | Transport level packet marking in the uplink and downlink | :x: | |
| 5 | Accounting for inter-operator charging | :x: | |
| 6 | UL and DL service level charging as defined in TS 23.203 | :x: | |
| 7 | Interfacing OFCS through | :x: | |
| 8 | UL and DL service level gating control | :x: | |
| 9 | UL and DL service level rate enforcement | :x: | |
| 10 | UL and DL rate enforcement based on APN-AMBR | :x: | |
| 11 | DL rate enforcement based on the accumulated MBRs of the | :x: | |
| | aggregate of SDFs with the same GBR QCI | | |
| 12 | DHCPv4 (server and client) and DHCPv6 (client and server) | :x: | |
| 13 | The network does not support PPP bearer type | :x: | |
| 14 | The PDN GW may support Non-IP data transfer | :x: | |
| 15 | Packet screening | :x: | |
| 16 | Sending of one or more "end marker(s)" to the source SGW | :x: | |
| | immediately after switching the path during SGW change | | |
| 17 | PCC related features (e.g. involving PCRF and OCS) | :x: | |
| 18 | UL and DL bearer binding as defined in TS 23.203 | :x: | |
| 19 | UL bearer binding verification as defined in TS 23.203 | :x: | |
| 20 | Functionality as defined in RFC 4861 | :x: | |
| 21 | Accounting per UE and bearer | :x: | |
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="./images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">OpenAirInterface Core Serving Gateway Feature Set</font></b>
</td>
</tr>
</table>
**Table of Contents**
1. [SGW Fundamentals](#1-sgw-fundamentals)
2. [OAI SGW Available Interfaces](#2-oai-sgw-available-interfaces)
3. [OAI SGW Conformance Functions](#3-oai-sgw-conformance-functions)
# 1. SGW Fundamentals #
(from [Wikipedia.org](https://en.wikipedia.org/wiki/System_Architecture_Evolution))
The Serving Gateway routes and forwards user data packets, while also acting as the mobility anchor for the user plane during inter-eNodeB handovers and as the anchor for mobility between LTE and other 3GPP technologies (terminating S4 interface and relaying the traffic between 2G/3G systems and PGW).
For idle state UEs, the SGW terminates the downlink data path and triggers paging when downlink data arrives for the UE.
* It manages and stores UE contexts, e.g. parameters of the IP bearer service, network internal routing information.
* It also performs replication of the user traffic in case of lawful interception.
# 2. OAI SGW Available Interfaces #
| **ID** | **Interface** | **Status** | **Comments** | **Protocols** |
| ------ | ------------- | ------------------ | ---------------------------------------------- | ------------- |
| 1 | S5 / S8 | :heavy_check_mark: | Split in control plane only | GTP-C/U |
| | | :x: | Missing split in User plane | |
| 2 | S1-U | :heavy_check_mark: | Split in control plane only | GTP-U/UDP |
| 3 | S11 | :heavy_check_mark: | S11-C only actually | GTP-C/UDP |
| 4 | S4 | :x: | No interconnection with SGSN | GTP-C/UDP |
| 5 | S12 | :x: | No interconnection with UTRAN | GTP-U/UDP |
# 3. OAI SGW Conformance Functions #
Based on document **3GPP TS 23.401 V15.5.0 §4.4.3.2**.
| **ID** | **Classification** | **Status** | **Comments** |
| ------ | ------------------------------------------------------------ | ------------------ | ---------------------------------------------- |
| 1 | Local Mobility Anchor point for inter eNodeB handover | :question: | Should be, X2HO have to be tested. |
| | (except when user data is transported using the Control | | |
| | Plane CIoT EPS optimization) | | |
| 2 | Sending sending of one or more "end marker" to | :x: | Could be requested |
| | -- the source eNodeB, | | |
| | -- the source SGSN or | | |
| | -- the source RNC | | |
| | immediately after the Serving GW switches the path during | | |
| | inter-eNodeB and inter-RAT handover(s), | | |
| | especially to assist the reordering function in eNodeB | | |
| 3 | Mobility anchoring for inter-3GPP mobility | :x: | No Support of 2G and 3G systems |
| | (terminating S4 and relaying the traffic between 2G/3G system and PDN GW) | | |
| 4 | ECM-IDLE mode downlink packet buffering and | :x: | Buffering is not supported in idle-mode |
| | initiation of network triggered service request procedure | | |
| | and optionally Paging Policy Differentiation | | |
| 5 | Lawful Interception | :x: | |
| 6 | Packet routing and forwarding | :heavy_check_mark: | |
| 7 | Transport level packet marking in the uplink & the downlink | :x: | Could be supported |
| | e.g. setting the DiffServ Code Point, based on the QCI, and | | |
| | optionally the ARP priority level, of the associated EPS bearer | | |
| 8 | Accounting for inter-operator charging. | :x: | |
| | -- For GTP based S5/S8, the SGW generates accounting data per UE and bearer | | |
| 9 | Interfacing OFCS according to charging principles and | :x: | |
| | through reference points specified in TS 32.240 | | |
| 10 | Forwarding of "end marker" to the | :x: | |
| | -- the source eNodeB, | | |
| | -- the source SGSN or | | |
| | -- the source RNC | | |
| | when the "end marker" is received from PGW and SGW has downlink user plane established. | | |
| | Upon reception of "end marker", the Serving GW shall not send Downlink Data Notification. | | |
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment