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

SD-Core 1.0.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``

SD-Core 1.0.1 Release
=====================

Minor release with bug fixes on top of release 1.0.0. Below is the list of defects fixed on top of previous release.

    * MME crash due to OOM kill.
    * MME fails to send PCO to SPGW - MME had NAS decoding issue which was causing MME to not send PCO IE towards SPGW.
    * SPGW main thread blocks on DNS query - Improved SPGW code to raise DNS request in separate thread. Also added
      support for DNS query timeout.
    * SMF changes to fix FAR action flags

Helm Chart Versions and their component charts versions

* sdcore-helm-chart: 0.9.19
    * omec-control-plane: 0.9.17
    * omec-sub-provision: 0.3.2
    * 5g-control-plane: 0.5.6
    * User Plane 0.5.4
    * 5g-ran-sim 0.3.2

SD-Core 1.0.2 Release
=====================

Minor release with bug fixes on top of release 1.0.1. Below is the list of defects fixed on top of previous release.

    * SPGW subscriber gauge metrics are removed once subscriber is detached from network.

* sdcore-helm-chart: 0.9.20
    * omec-control-plane: 0.9.18
    * omec-sub-provision: 0.3.2
    * 5g-control-plane: 0.5.6
    * User Plane 0.5.4
    * 5g-ran-sim 0.3.2

SD-Core 1.0.3 Release
=====================

Minor release with bug fixes on top of release 1.0.2. Below is the list of defects fixed on top of previous release.

    * SPGW -  Configurable DNS timeout. Default value 100ms. This helps admin to tune dns timeout
      to any reasonable value.
    * PCRF - If PCRF crashes then pcrf was not able to handle new calls. Database cleanup was missing to handle
      context replacement
    * MME - tau failure and service reject send failure fix. UL count was not incremented in some error cases.

* sdcore-helm-chart: 0.9.22
    * omec-control-plane: 0.9.20
    * omec-sub-provision: 0.3.3
    * 5g-control-plane: 0.5.7
    * User Plane 0.5.4
    * 5g-ran-sim 0.3.2

SD-Core 1.0.4 Release
=====================

Minor release with bug fixes on top of release 1.0.3. Below is the list of defects fixed on top of previous release.

    * PCRF - PCRF crash was seen after 7 days of run. It was found that PCRF pod was logging messages in file as well
      as stdout. Now logging messages to file is made configurable and default its in disabled state.
    * HSSF - HSS memory consumption was growing over period of time. It was found that HSSF pod was logging messages
      in file as well as stdout. Now logging messages to file is made configurable and default its in disabled state.

* sdcore-helm-chart: 0.9.23
    * omec-control-plane: 0.9.21
    * omec-sub-provision: 0.3.3
    * 5g-control-plane: 0.5.7
    * User Plane 0.5.4
    * 5g-ran-sim 0.3.2
