Aether 1.5 Release
==================

Highlights
----------

The focus of this release is an update of Aether to support the 5G SD-Core.
This included a redesign of Aether modeling and workflows, integration of the
5G SD-Core into Aether, and an update of the 4G SD-Core to be compliant with
the 5G Aether API. 4G Small Cells are readily available and deployed at
multiple Aether installations. The 5G Core is part of a Deutsche Telekom SD-RAN
trial and is being used with 5G-SA disaggregated RAN components (CU/DU/RU).

Deployment of Aether has been demonstrated on Anthos and on Elastic Kubernetes
Service. Persistent test deployments are now maintained by ONF to further
evaluate Aether functionality on those platforms.


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

4G and 5G Connectivity Service
""""""""""""""""""""""""""""""

Aether supports mobile/cellular connectivity using both the 4G and the 5G
SD-Core. The Aether ROC may be used with both cores simultaneously. The 4G
modeling used by Aether-1.0 has been replaced with newer modeling that unifies
the 4G and 5G cores in a single modeling abstraction.

Device Grouping and Network Slicing
"""""""""""""""""""""""""""""""""""

Aether supports a Network Slicing abstraction where similar connected devices
can be aggregated together into a Device-Group, and different Device Groups can
be allocated to different network slices (Virtual Connectivity Service - VCS).

Grouping connected devices affords ease of management - devices in the same
group are configured together and afforded the same treatment in the network.
Separating device-groups into different slices affords isolation between
groups. The data plane connectivity for different slices are realized through
different User Plane Functions (UPFs).

Furthermore, Aether supports Access Control - devices not part of any
Device-Group are rejected by the network.

Aether Portal
"""""""""""""

The Aether Portal is a modern secure Single Page Application implemented in
Angular. The portal integrates both control of the Aether Network and metrics
reported by Aether components in a single pane of glass with multi-tenancy
separation. The portal allows complex control operations to be batched together
as one transaction into a convenient “basket” and then atomically committed to
the configuration. All of the functions of the Portal are also available on a
secure REST API, with an OpenAPI 3 schema.

Role-Based Access Control
"""""""""""""""""""""""""

The Aether control API supports role-based access control, together with
external authentication using OpenID Connect. These access controls are used in
the Aether Portal to limit which enterprises a portal user is allowed to view
or modify. The Aether Portal supports multiple enterprises simultaneously.

Flexible Kubernetes Deployment Options
""""""""""""""""""""""""""""""""""""""

Fully managed Aether deployment using Rancher is officially supported. Together
with Rancher, Aether allows configuration, management, and monitoring of
Kubernetes clusters. These clusters can be used to host the Aether Connectivity
Service as well as customer edge applications. Support for other managed
Kubernetes services such as Google Anthos or Amazon Elastic Kubernetes Service
should be considered beta and not officially supported.

Testing
-------

Aether uses automated testing based on Jenkins and Robot Framework. The tests
performed are described below.

SD-Core Tests
"""""""""""""

* 4G

  * Functional Coverage: Attach,detach, dataplane traffic, handover, TAU,
    paging, error scenarios, few failure/restart of network functions

  * Scale and Performance tests utilizing BESS

* 5G

  * Functional Coverage: register, deregister, dataplane traffic scenarios,
    handover, TAU, DDN, few error scenarios, few failure/restart of network
    functions

  * Scale tests (BESS)

Jenkins jobs for functional and scale tests can be found on `Aether Jenkins -
SD-Core System Tests
<https://jenkins.aetherproject.org/view/SD%20Core%20System%20Tests/>`_

ROC
"""

  * Functional API and GUI test coverage

Jenkins jobs: `Aether Jenkins - ROC System Tests
<https://jenkins.aetherproject.org/view/ROC%20System%20Tests/>`_


System Tests
""""""""""""

* 4G and 5G Sanity Test coverage:

  * Configure ROC with related models for 4G and 5G
  * Validate for attach/register UE, pings, detach/degister UE

Jenkins Jobs: `Aether Jenkins - Aether System Tests
<https://jenkins.aetherproject.org/view/Aether%20System%20Tests/>`_

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

Aether documentation is available at `docs.aetherproject.org
<https://docs.aetherproject.org>`_


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

* A given UE may participate in a 4G core or a 5G core, but not both.

* 4G UEs may each participate in a single DeviceGroup, and 4G DeviceGroups may
  each participate in a single VCS. This restriction does not apply to 5G UEs.

* Application filtering is modeled in the API and the GUI, but application
  filtering is not active in the data plane.

* Disabling/deleting a device group from a VCS does not restrict UE from
  getting attached to the network [SDCORE-467]

Component Versions in the 1.5 Release
-------------------------------------

Helm Chart Versions and their component charts and containers:

* atomix-controller: ``0.6.8``

    * atomix-controller: ``v0.6.1``

* atomix-raft: ``0.1.9``

    * atomix-raft-storage-controller: ``v0.9.2``

* aether-roc-umbrella: ``1.3.9``

    * config-models/aether-3.x: ``3.0.13``

    * aether-roc-api: ``v0.7.14``

    * aether-roc-gui: ``v0.7.22``

    * onos-config: ``v0.9.2``

    * onos-topo: ``v0.8.3``

    * sdcore-adapter: ``v0.1.36``

* sdcore-helm-chart: ``0.6.2``

    * omec-control-plane: ``0.6.25``

        * hssdb: ``c3po-hssdb:master-9a5f565``
        * hss: ``c3po-hss:master-9a5f565``
        * mme: ``nucleus:master-86d2678``
        * spgwc: ``spgw:master-6aad2f2``
        * pcrf: ``c3po-pcrf:pcrf-b29af70``
        * pcrfdb: ``c3po-pcrfdb:pcrf-b29af70``
        * config4g: ``5gc-webui:onf-release3.0.5-bf0b54f``

    * omec-sub-provision: ``0.0.6``

        * simapp: ``simapp:main-7d20738``

    * 5g-control-plane: ``0.2.21``

        * amf: ``5gc-amf:onf-release3.0.5-921b890``
        * nrf: ``5gc-nrf:onf-release3.0.5-3471442``
        * smf: ``5gc-smf:onf-release3.0.5-e991983``
        * ausf: ``5gc-ausf:onf-release3.0.5-85ea075``
        * nssf: ``5gc-nssf:onf-release3.0.5-c372b24``
        * pcf: ``5gc-pcf:onf-release3.0.5-95ae49f``
        * udr: ``5gc-udr:onf-release3.0.5-bc3b287``
        * udm: ``5gc-udm:onf-release3.0.5-40055e8``
        * webui: ``5gc-webui:onf-release3.0.5-bf0b54f``

    * omec-user-plane: ``0.3.36``

        * bess: ``upf-epc-bess:master-fcdbc95``
        * pfcpiface: ``upf-epc-pfcpiface:master-fcdbc95``
