Aether 2.0 Release
==================

Aether Highlights
-----------------

This release of Aether, the first to `fully embrace open
source <https://www.prnewswire.com/news-releases/onfs-leading-private-5g-connected-edge-platform-aether-now-released-to-open-source-301487587.html>`__,
adds two exciting new capabilities. The first is support for 5G
deployments, enabling greatly increased bandwidth compared to 4G-based
deployments. Complementing 5G is our P4 based mobile-core User Plane
Function (UPF), which offers a high performance hardware-accelerated
datapath that does not need to be routed through compute-based software
UPFs. Aether maintains backward compatibility with 4G, and both 4G and
5G slices may make use of both software and hardware based UPFs. P4
hardware and BESS software UPFs can be deployed side-by-side in a hybrid
deployment.

As part of this release, several edge applications have been showcased
on the Aether platform. We demonstrated the first Aether-interactive
smart application, an OpenVINO based AI/ML person-detection application
that dynamically increases network-bandwidth for video recording
purposes when a person is detected, and then dynamically reduces the
same when people are no longer detected. In partnership with Intel,
we have also deployed an anomaly detection application on the Aether
platform that runs as an edge application, monitors a manufacturing or
packaging line of product samples, and then uses an AI/ML algorithm to
detect anomalies in real time. These applications were demonstrated at
Mobile World Congress 2022 in Barcelona last week.

The transition to open source will further increase the pace of Aether
development, putting it within the reach of the 5G and edge developer
community that ONF has been cultivating and encouraging. Developer
contributions are welcome, and increased access will allow increased
adoption of this technology.

Features & Improvements
-----------------------

New 5G features
"""""""""""""""

This release of Aether incorporates SD-Core 1.1, which includes
integration with 5G gNB small-cells from T&W running 5G-SA RAN stack
from Radisys, 5G slices with Application filtering, and a policy
framework that supports QoS at multiple levels - subscribers,
applications and slices. For more details, please refer to the SD-Core
1.1 Release notes.

SD-Fabric Integration
"""""""""""""""""""""

This release of Aether incorporates SD-Fabric 1.1. While previous
releases of Aether supported SD-Fabric as a “Beta” feature, this release
officially supports the P4 UPF and other SD-Fabric features like paired
leaf-switches with dual UPFs for High Availability.

The P4 UPF may now be added to Aether as an available UPF. In addition
to a single P4 UPF, Aether continues to allow multiple BESS UPFs to be
deployed alongside the P4 UPF. The user can decide at slice provisioning
time whether a slice should use the P4 UPF or a BESS UPF. UPFs may only
be bound to one slice at a time. The P4 UPF and the BESS UPF both
support application filtering and QoS metering. The BESS UPF has been
enhanced to include additional per-flow metrics.

For more details, please refer to the SD-Fabric 1.1 Release notes.

Sim-Card and Device Modeling
""""""""""""""""""""""""""""

The Aether configuration model has been enhanced to include support for
*SIM card* and *device* modeling. The lifecycle of a device is now
decoupled from the lifecycle of the SIM card that is attached to that
device. Devices can be created in the modeling before their SIM cards
are created, and devices may continue to exist after their SIM cards
have been removed. A removed SIM card can be associated with a different
device.

Aether may be configured to automatically learn of provisioned SIM cards
and add them to the enterprise configuration. An administrator may then
see the list of available SIM cards and choose which one to add to a
device.

The model tree has been revised to be more hierarchical. For example,
Slices are now contained within Sites, and Sites are contained within
Enterprises. This eliminated many of the boilerplate Slice and
Enterprise links that used to be present in the Aether-1.6 models, and
it provides automatic enforcement of objects to the appropriate scope.

Configuration System Improvements
"""""""""""""""""""""""""""""""""

Aether’s ROC configuration system internals were redesigned and
reimplemented to address various instability issues and incorporate new
patterns and architectures. The controllers at the core of onos-config
were `redesigned in
TLA+ <https://github.com/onosproject/onos-tlaplus/blob/master/Config/Config.pdf>`__
– a machine-checked formal specification language – to develop a more
stable and viable architecture long-term, and the controllers were
reimplemented according to the new design. On the northbound, new gNMI
extensions make onos-config’s handling of gNMI Set and Get requests
configurable with support for various consistency strategies when
propagating changes to gNMI targets. On the southbound, support was
added for handling non-persistent targets (recovering target
configuration after restarts). For additional information, please see
the `README
file <https://github.com/onosproject/onos-config/blob/master/docs/README.md>`__
for the configuration system.

Support for complex validation rules
""""""""""""""""""""""""""""""""""""

Aether now has support for complex validation rules (“guardrails”) to
prevent misconfiguration of the system. These guardrails are specified
using Aether’s yang modeling language, allowing Aether staff to easily
add more rules as the need arises.

Data Plane Optimization
"""""""""""""""""""""""

Prior releases of Aether passed data plane traffic through the
management server. Aether 2.0 has been optimized so that this is no
longer necessary. User traffic is now processed by the P4-UPF or the
BESS-UPF and then forwarded upstream (or to edge-applications) directly
by the dataplane (fabric) leaf-switch.

Furthermore, we now support more common enterprise deployments where the
radio access nodes (eNBs/gNBs) connect to the enterprise L3-routed
network, rather than connect directly to our fabric. We also simplified
configuration to support the use of fabric-switch front panel ports
rather than using the confusing, device-specific SDK ports.

Aether 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, failure/restart of network
     functions

* 5G

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

* Jenkins jobs for functional can be found at

   * https://jenkins.aetherproject.org/view/SD%20Core%20System%20Tests/

ROC:

* Functional API

* Related Jenkins jobs

   * https://jenkins.aetherproject.org/view/ROC%20System%20Tests/

Aether System Tests

* 5G

   * Functional testing includes multiple slice creations,
     enable/disable of device groups, QoS validations, rate limiting
     tests (at UE, slice, application), application filtering tests,
     container restart tests

* 4G

   * Functional testing includes multiple slice creations,
     enable/disable of device groups, QoS validations, rate limiting
     tests (at UE, slice, application), application filtering tests,
     container restart tests

* Jenkins Jobs:

   * https://jenkins.aetherproject.org/view/Aether%20System%20Tests/

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

Aether documentation is available at
`docs.aetherproject.org <http://docs.aetherproject.org>`__.

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

*  Each site should be configured with a different “Enterprise ID”.

*  The P4 UPF does not support Slice MBR, which requires leaving out the
   `configuration endpoint` configuration for P4 UPFs.
   Additionally, only 1 slice can currently use a P4 UPF. The next
   release of Aether will remove both limitations.

* This transaction history page on the operations portal is not
  currently enabled; It will be available shortly after the first
  2.0 release.

*  The Sim-Card model deviates from the ID convention used by the other
   models, using the field “sim-id” instead of “sim-card-id”.

*  IMSIs should not be removed from Simapp. They may be added at any
   time.

Component Versions
------------------

ROC:

* atomix-controller: 0.6.9

* atomix-raft-storage: 0.1.25

* onos-operator: 0.5.1

* aether-roc-umbrella: 2.0.39

SD-Core (SD-Core 1.1 release):

* sdcore-helm-chart: 0.10.13 (Umbrella Helm Chart)

   * Omec-control-plane : 0.10.9

   * Omec-sub-provision : 0.4.5

   * 5g-control-plane : 0.6.17

   * 5g-ran-sim: 0.4.10

UPF: bess-upf: 0.0.5

SD-Fabric (1.1 release):

* sdfabric: 1.0.30

Sercomm eNB

* Firmware version: 3922

