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

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

SD-Core support 4G & 5G network functions. SD-Core gives configuration APIs, metrics APIs.
Access network can connected to AMF or MME depending on type of access used.

Highlights
----------

    - REST configuration interface support

        - Network Slices can be added, deleted, modified using REST interface
        - ``Refer Configuration Guide for more details``

    - SIMapp support for subscriber management

        - created to add subscriber contents in webui/config4g pod
        - Simapp also supports addition of network slice, device group in the SD-Core (5G/4G)
        - Simapp can update the configuration during runtime (add, delete, modify config)
        - Support of API to send the Network Slice & Device Group slice when configPod asks for it

    - 5G Specific Features

        - 3gpp Supported & Validated Procedures are,

            - UE Registration/De-registration
            - UE PDU Establishment/modification/Deletion
            - More details about 3gpp compliance can be found at (see :ref:`4g-compliance`)
              and (see :ref:`5g-compliance`)

        - Multiple PLMN support. Sending multiple PLMNs in NRF registration
        - Error handling on all interfaces. This includes message retransmission,
            rejected response handling, no response handling

    - 4G specific features
        - APN based Selection of User Plane Network function.
        - CUPS compliant control plane

    - Metrics

        - Subscriber metrics
        - eNB/gNB metrics

    - Scale Support

        - 4G - 16K calls at the rate of 100 calls have been tried
        - Handover rate of 50 handovers per second is supported by SD-Core
        - 5G - 5000 Calls at the rate of 10 calls per second

    - Operations Feature

        - UE/IMSI can be added while SD-Core is running
        - Network slice can be created in runtime
        - UE/IMSI can be removed from the slice at any time

    - Application Filtering

        - When multiple slices are created then devices in the slice can
          have access to only specified networks. More details of the application
          filtering can be found at - `TODO </overview/3gpp-compliance-4g>`

New Features and Improvements
-----------------------------

Testing
-------

    - CI Run for all SD-Core repository
    - Common Repository like simapp, config pod changes trigger CI for 4G/5G

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

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


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

    - For any 3gpp release compliance refer - (see :ref:`4g-compliance`) and (see :ref:`5g-compliance`)
    - Same IMSI can not part of multiple slices
    - Only 5 application filtering rules can be added per Slice

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

Helm Chart Versions and their component charts and containers:

* sdcore-helm-chart: ``0.9.14``
    * omec-control-plane: ``0.9.13``
        * 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-03d4139``
        * spgwc  : ``registry.aetherproject.org/omecproject/spgw:master-282dc78``
        * mme  : ``registry.aetherproject.org/proxy/omecproject/nucleus:master-1225da6``
    * 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``
