..
   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
   SPDX-License-Identifier: Apache-2.0

SD-Core 1.0 Release
===================

SD-Core supports 4G & 5G network functions. SD-Core provides APIs for configuration, telemetry, policy
management. Access network can connected to AMF or MME depending on type of access used. Below is the
summary of the features delivered in SD-Core.

Highlights
----------

**Support of REST APIs to configure SD-Core:** Configuring multiple network functions to enable/disable a
service in a network is complex. Single entry point for REST api based configuration is easy to use
and less error prone. Our main motivation behind this work item was to hide the complexity of the network
and make APIs more intuitive for the operator. These APIs work well for both 4G & 5G network functions.

**Subscriber Management Interface**: 3gpp requires user security keys to be configured in the network function.
We have provided two interfaces to configure subscribers in SD-Core. One of the way to configure subscribers
is through REST api calls to SD-Core. The other way is to add/delete/modify subscription through helm charts.
APIs are extensible and can be easily integrated with 3rd party sim provision solution. Also while operator
is updating the subscriptions, there is no need to restart any of the SD-Core components. This interface
to SD-Core is access agnostic and same interface works for 4G as well as 5G access.

**3gpp defined procedures validation and hardening for error scenarios:** SD-Core has been deployed in Aether
Network for more than 2 years now and in the year 2021 we added 5G support in the SD-Core. SD-Core is used in
couple of operator trials. Also multiple Aether sites using different access networks to connect to
centralized SD-Core control plane.
This exercise has helped 4G/5G 3gpp procedures validations with multiple access networks, tools and user equipments.
Some of the widely used procedures are UE Registration/De-registration, UE PDU Establishment/modification/Deletion,
Xn handover, UE Context Release & Service request etc. This activity also includes handling of retransmission of
messages, retrying the messages when packet loss is observed over the network, handling no response from the peer
network functions,handling of network function failures or handling of reject responses from peer network functions.


**Operations support to manage multiple PLMN within Core Network:** SD-Core supports configuration
of multiple slices with different PLMN. This helps in sharing the same core network among multiple
operator networks. Each SD-Core network function is capable of handling multiple PLMN in the network.

**Multiple User plane support using APN (4G) and Slice Id (5G) using CUPS call flows:** SD-Core
supports connections from multiple user planes. Even multiple user planes from the same edge can
connect to same control plane. Control plane uses APN or Slice ID to identify user plane.

**Metrics exposure to get visibility of radio network connections and UE connections:** SD-core
uses prometheus to export metrics. These metrics are useful to get the status of various
gNodeB/eNodeB connected to Core Network. Also SD-Core gives the metrics to share current user
connectivity status.

**SD-Core Scale support:** SD-Core 5G solution is build on top of free5gc open source code.
Numerous enhancements done on the base code to get the production quality stability. One of
the important goal we achieved was getting 5000 subscribers with 10 subscribers attach per
second with single instance. We will be pushing for higher limits in upcoming changes.
To achieve this limit, AMF & SMF has seen numerous architecture level changes. SD-Core 4G is
built on top of OMEC project. 4G is tested for 16000 calls at the rate of 100 calls per second.
All these results are achieved with distributed user plane. Vertical scaling can be done easily
to achieve higher call setup rates.

**Application Filtering Support:** Network slice really becomes
useful when operator has the capability to apply access control. Operator can deploy multiple
applications at the edge or internet and can restrict the users from accessing it based on the
slice user belongs to. This adds extra layer of security in the edge app deployment.

**Policy framework to support QoS at multiple levels:** SD-Core makes use of policy network
function (PCF/PCRF) to enforce qos decisions on the subscriber session. Policies are configured
per network slice using configuration interface.  PCF/PCRF binds those policies to the subscribers.
APIs gives the flexibility to Operator to assign UE level QoS, per application QoS and also slice level QoS.

**5G gNB simulator:** gNB simulator simulates 5G UE & 5G gNodeB. gNBSim is capable of supporting
multiple UEs and multiple gNodeBs. The tool is also capable of doing data tests. This assists quick
development of the features. This tool can be used to run automated tests for the 5G core network.
Please refer :ref:`gNB-Simulator` documentation for more details.

Testing
-------
For various testing related details refer (see :ref:`sdcore-testing`)

Documentation
-------------

SD-Core documentation is available at `docs.sd-core.opennetworking.org
<https://docs.sd-core.opennetworking.org>`_


Known Issues and Limitations
----------------------------

    - Same IMSI can not part of multiple device groups
    - Only 5 application filtering rules can be added per Slice
    - Application filtering should be configured with only /32 endpoint address. Subnet is not supported
    - Application filtering does not work if port ranges are used in filter configuration
    - Each device group should have unique DNN configuration

.. note::
    For any 3gpp release compliance refer - (:ref:`4g-compliance`) and (:ref:`5g-compliance`)

Component Versions in the 1.0 Release
-------------------------------------

Helm Chart Versions and their component charts and containers:

* sdcore-helm-chart: ``0.9.17``
    * omec-control-plane: ``0.9.15``
        * hssdb: ``registry.aetherproject.org/proxy/omecproject/c3po-hssdb:master-771c0c3``
        * hss  : ``registry.aetherproject.org/proxy/omecproject/c3po-hss:master-771c0c3``
        * pcrf  : ``registry.aetherproject.org/proxy/omecproject/c3po-pcrf:pcrf-a6bdc3d``
        * pcrfdb  : ``registry.aetherproject.org/proxy/omecproject/c3po-pcrf:pcrf-a6bdc3d``
        * config4g  : ``registry.aetherproject.org/omecproject/5gc-webui:onf-release3.0.5-e29f159``
        * spgwc  : ``registry.aetherproject.org/omecproject/spgw:master-144bd86``
        * mme  : ``registry.aetherproject.org/proxy/omecproject/nucleus:master-ccdbf69``
    * omec-sub-provision: ``0.3.2``
        * simapp: ``registry.aetherproject.org/omecproject/simapp:main-329c82d``
    * 5g-control-plane: ``0.5.5``
        * amf: ``registry.aetherproject.org/omecproject/5gc-amf:onf-release3.0.5-9683d5c``
        * smf: ``registry.aetherproject.org/omecproject/5gc-smf:onf-release3.0.5-46dfe2d``
        * nrf: ``registry.aetherproject.org/omecproject/5gc-nrf:onf-release3.0.5-13304e8``
        * nssf: ``registry.aetherproject.org/omecproject/5gc-nssf:onf-release3.0.5-aa3a60b``
        * pcf: ``registry.aetherproject.org/omecproject/5gc-pcf:onf-release3.0.5-9f7734b``
        * udm: ``registry.aetherproject.org/omecproject/5gc-udm:onf-release3.0.5-c28433a``
        * udr: ``registry.aetherproject.org/omecproject/5gc-udr:onf-release3.0.5-deef506``
        * ausf: ``registry.aetherproject.org/omecproject/5gc-ausf:onf-release3.0.5-be7d4ac``
    * User Plane ``0.5.4``
        * bess: ``"registry.aetherproject.org/proxy/omecproject/upf-epc-bess:master-103b198"``
        * pfcpiface: ``"registry.aetherproject.org/proxy/omecproject/upf-epc-pfcpiface:master-103b198"``
    * 5g-ran-sim ``0.3.2``
        * gnbsim: ``registry.aetherproject.org/omecproject/5gc-gnbsim:dev-new-gnbsim-025ae2b``
