VOLTHA 2.9 Release Notes
========================

Highlights
----------

VOLTHA-2.9 builds on the existing 2.8 Long Term Support (LTS) release for VOLTHA.

The release focused on including some important underlying architectural changes that were avoided before the LTS
release. With VOLTHA 2.9 Kafka was removed as a mechanism for the inter-container communication and the ONOS OLT app
was completely rewritten, moreover a new transparent OLT tagging workflow has been introduced, to support
new operators, e.g. TIM. OLT Underlying software was updated to newer APIs. Other enhancements included resource
limits for the various components, optimization on the OMCI channel and proper cleanup of several items and resources.
During the 2.9 continuous support of the 2.8 release was done, with continuous bug fixes based on the jenkins
nightly suite and 2.9 discoveries.


VOLTHA 2.9 first and foremost moved away from the Kafka bus for inter container communication. Removing Kafka made the
interaction between the different VOLTHA components (core and adapters) direct and with no serialization overhead,
guaranteeing not only faster communication but an immediate response for operations. Removing Kafka uncovered several
bugs related to timing between the core and the adapters. All of these were fixed and where applicable also back-ported
to the 2.8 release.
Alongside the removal of Kafka, while the voltha-protos and voltha-lib go were modified a cleanup of stale APIs and
objects was performed, clarifying the supported protos objects and simplifying the library functions.

During the VOLTHA 2.9 release the OLT ONOS app was completely re-written to ensure better code quality, workflow
separation, correct handling and ordering of events. The app is based on a per subscriber queue mechanism, not on a
series of java completable futures, which were hard to coordinate. The queue mechanism also increased speed and
performance of the app. Furthermore code quality vastly improved, making the app now much more extensible as
showcased by a new transparent OLT workflow that was integrated. ONOS was moved to ONOS 2.5.4, which includes a
key bugfix on the application store to enable In Service Software Update (ISSU) of ONOS instances. The 2.5.4 includes
also other bug fixes on the 2.5 LTS version.
Along with the OLT app queuing mechanism a flow serialization and queuing mechanism was also introduced in the
openonu adapter and finalized in the OLT adapter to handle flows and technology profile instances, ensuring correct
ordering at this level as well.

Transparent OLT tagging capability has been integrated in VOLTHA and ONOS. Configuring the 4096 VLAN in sadis as
c-tag for a subscriber now makes the OLT just transparently forward traffic, which must be double tagged. No VLAN
operation will be performed after the ONT tags the packet. Such workflow requirement from Telecom Italia that,
thanks to this support, can now deploy VOLTHA in their network.

The Broadcom Abstraction Layer has been moved to BAL 3.10.2.2. A major version upgrade that ensures inclusion of
multiple bug fixes and setting up for feature support such as LAG and IPv6.

Several enhancements were made on the interaction and process with the ONUs. First and foremost VOLTHA 2.9 supports
OMCI prioritized sending allowing operations such as ONU software download to have lower priority than other
configuration requests. The decoding of MEs has been relaxed and storing of unknown MEs has been implemented,
allowing the inclusion of non-standard MEs from ONUs, expanding the pool of supported devices.

Finally the release provided bug fixes across the stack. Previously discussed were the ETCD stale information
fixes that ensured Proper Cleanup of resources in the storage after device/flows delete. Cleanup of VTFD and
other resources is also performed on the ONU.
Several fixes were brought in the ONU image upgrade procedures concerning multiple ONUs, allowing abort during any
phase and correct indication statuses. The ONU port locking state is also now correctly reported. Fixes were also
included for flow deletion operation during reconciliation and possible deadlocks for Flow/GemPort multi-uni scenarios.
Serialization was enhanced in omci-lib-go.  For a complete list of bugs please refer to the Jira Issues section.

On the testing front VOLTHA 2.9 expanded the openonu suite with new multi-uni and multi-olt tests, extending the ONU
software update success and failure scenarios.  2.9 expands the TT multicast tests to 7 tests from the basic first
test. Container restart tests now include a continuous background ping. ONU delete and re-add is also tested,
alongside the before-mentioned correct device, subscriber and service information deletion across the stack.
Furthermore 3 new OLTs were added to Certification for both the 2.8 and 2.9 releases, Radisys 1600G and 1600X and
the ADTRAN 6320.

During the 2.9 release also key design discussions have been happening to have BBF relationship and design discussion
for IPv6, Plain Old Telephone Support (POTS), LAG and the next iteration of a controller for VOLTHA that will replace
ONOS.

Along with VOLTHA 2.9, the Device Management Brigade also released a new minor version
(`1.1.1 <https://github.com/opencord/device-management-interface/releases/tag/v1.1.1>`_) of the interface with
Introduce PON-ID related APIs, port mapping labels and auto-negotiation parameters.


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

- Move to gRPC for inter container communication

  - Removal of Kafka bus for internal use
  - Direct communication between containers via gRPC
  - Immediate response for request
  - Faster container to container interaction
  - Fixed several bug fixes exposed by different/faster timing in interaction

- Complete OLT application rewrite

  - Queue based mechanism for subscribers and events
  - Flow installation feedback
  - Better performance and event sequence handling
  - Better code quality and extensibility
  - Fully backwards compatible with VOLTHA 2.8

- Transparent OLT workflow

  - 4096 c-tag translates into no VLAN operation performed at the OLT
  - Support in olt pipeliner in ONOS, olt adapter and agent
  - Full support for TIM HISA workflow

- ONU interaction enhancements in openonu adapter

  - Prioritized OMCI sending
  - Relaxed decoding and storing of unknown MEs
  - PM counter Reset
  - Flow serialization and queueing mechanism

- Move to ONOS 2.5.5 with bug fixes to support ISSU
- Broadcom Abstraction Layer (BAL) has been moved to BAL 3.10.2.2

Bug Fixes
---------

- Proper Cleanup of resources in ETCD and on the ONU after device/flows delete.

- ONU image upgrade

  - multiple ONUs
  - abort during any phase
  - correct indication statuses

- Correct ONU port locking state indication
- Flow deletion operations during reconciliation
- Flow/GemPort deadlock in multi-uni scenarios
- Error reporting from openolt-agent for scheduler and queue configurations
- Error corrections at openolt adapter in case of scheduler and queue confi\guration failures
- OMCI lib-go

  - serialization of Alarms
  - Mib upload next decoding error


Test
----

Voltha-2.9 tests are available on `Jenkins <https://jenkins.opencord.org/>`_.

- Multi-uni and multi-olt tests for openonu adapter suite.
- Extended the ONU software update success and failure test scenarios.
- Extended Turk Telecom multicast tests to 5 tests.
- Container restart tests now include a continuous background ping.
- Added test for updating and validating user bandwidth profile for ATT and DT.
- Enhanced the tests voltha logging.
- Enhanced DT soak pod job with bbsim subscribers provisioning (to mock system load).
- Optimised timeouts for DT and TT workflow tests.
- Added support for subscriber uniTag provisioning for TT test suite.
- ONU delete and re-add.
- Empty device, subscriber and service information verification after deletion.


Design Discussions
------------------

- LAG and LACP
- Voice Support on multi UNI devices
- IPv6 support
- DPU support Design discussion
- New micro-service controller for VOLTHA (onos-classic replacement)
- BBF API integration



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

- Updated documentation with alarms, meters/bandwidth profiles and several other enhancements
  is published on https://docs.voltha.org

Known Issues
------------

- Edgecore ASxVOLT16 platform issues requiring hard/soft reboot(s). `[VOL-4520] <https://jira.opencord.org/browse/VOL-4520>`_
- Packets arrive on the wrong gem port in the upstream after XGSPON ONU disable/enable. `[VOL-4521] <https://jira.opencord.org/browse/VOL-4521>`_
- Packets arrive on the wrong gem port with Radisys 1600X OLT with BAL 3.10.2.2 `[VOL-4527] <https://jira.opencord.org/browse/VOL-4527>`_
- voltha-onos is based on snapshots due to sonatype issue `[VOL-4528] <https://jira.opencord.org/browse/VOL-4528>`_


Certification Program
---------------------

Thanks to the `Continuous Certification <https://opennetworking.org/continuous-certification-program>`_ program at
ONF we can also ensure that the following ONF member products are compatible with the VOLTHA 2.9 release:

- Edgecore ASGVolt64 GPON OLT
- Edgecore ASXVolt16 XGSGPON OLT
- Radisys 3200G GPON OLT
- Radisys 1600G GPON OLT
- Radisys 1600X COMBO OLT
- Adtran 6320X COMBO OLT
- Sercomm FG1000 GPON ONU
- Sercomm Glasfaser GPON ONU
- Edgecore 6712-32X Switch
- Edgecore 7712-32X Switch

In particular the 2.8 release added the Radisys 3200G GPON OLT.

Jira stories
------------
A full list of stories and bugs completed can be found under the
`VOLTHA 2.9 <https://jira.opencord.org/projects/VOL/versions/12200>`_ release page in Jira.

Component Versions in VOLTHA 2.9 release
----------------------------------------

ONOS and Atomix:
++++++++++++++++

- `ONOS 2.5 LTS <https://github.com/opennetworkinglab/onos/releases/tag/2.5.2>`_: ``2.5.5``
- `ATOMIX <https://github.com/atomix/atomix/releases/tag/atomix-3.1.9>`_: ``3.1.9``

ONOS Apps:
++++++++++

- `aaa <https://gerrit.opencord.org/gitweb?p=aaa.git;a=summary>`_: ``2.5.0``
- `dhcpl2relay <https://gerrit.opencord.org/gitweb?p=dhcpl2relay.git;a=summary>`_: ``2.5.0``
- `igmpproxy <https://gerrit.opencord.org/gitweb?p=igmpproxy.git;a=summary>`_: ``2.4.0``
- `kafka <https://gerrit.opencord.org/gitweb?p=kafka-onos.git;a=summary>`_: ``2.8.0``
- `mcast <https://gerrit.opencord.org/gitweb?p=mcast.git;a=summary>`_: ``2.5.0``
- `olt <https://gerrit.opencord.org/gitweb?p=olt.git;a=summary>`_: ``5.0.1``
- `sadis <https://gerrit.opencord.org/gitweb?p=sadis.git;a=summary>`_: ``5.5.0``
- `bng <https://gerrit.opencord.org/gitweb?p=bng.git;a=summary>`_: ``2.2.0``
- `pppoeagent <https://gerrit.opencord.org/plugins/gitiles/pppoeagent/>`_: ``1.2.0``
- `olttopology <https://gerrit.opencord.org/plugins/gitiles/olttopology/>`_: ``1.2.0``

VOLTHA Components:
++++++++++++++++++

- `Helm Charts (voltha-helm-charts) <https://gerrit.opencord.org/gitweb?p=voltha-helm-charts.git;a=tree;h=refs/heads/voltha-2.9>`_ - ``3.0.3``
- `bbsim <https://gerrit.opencord.org/gitweb?p=bbsim.git;a=tree>`_- ``1.9.1`` with `chart <https://gerrit.opencord.org/gitweb?p=helm-charts.git;a=tree;f=bbsim>`_ ``4.5.2``
- `voltha-go <https://gerrit.opencord.org/gitweb?p=voltha-go.git;a=tree;h=refs/heads/voltha-2.9>`_ - ``3.0.2`` with chart ``2.10.9``
- `ofagent-go <https://gerrit.opencord.org/gitweb?p=ofagent-go.git;a=tree;h=refs/heads/voltha-2.9>`_ - ``2.0.1``  with chart ``2.10.9``
- `voltctl <https://gerrit.opencord.org/gitweb?p=voltctl.git;a=tree>`_ - ``1.7.4``
- `voltha-openolt-adapter <https://gerrit.opencord.org/gitweb?p=voltha-openolt-adapter.git;a=tree;h=refs/heads/voltha-2.9>`_ - ``4.1.5`` with chart ``2.10.8``
- `voltha-openonu-adapter-go <https://gerrit.opencord.org/gitweb?p=voltha-openonu-adapter-go.git;a=tree;h=refs/heads/voltha-2.9>`_ - ``2.1.3`` with chart ``2.9.12``
- `voltha-onos <https://gerrit.opencord.org/gitweb?p=voltha-onos.git;a=tree;h=refs/heads/voltha-2.9>`_ -  ``5.0.5`` with chart ``0.1.27``
- `openolt agent <https://gerrit.opencord.org/gitweb?p=openolt.git;a=tree;h=refs/heads/voltha-2.9>`_ - ``3.6.2``
- `voltha-protos <https://github.com/opencord/voltha-protos/releases/tag/v5.1.2>`_ - ``5.1.2``
- `voltha-lib-go <https://github.com/opencord/voltha-lib-go/releases/tag/v7.1.3>`_ - ``7.1.3``
- `Bbsim-sadis-server <https://github.com/opencord/bbsim-sadis-server/releases/tag/v0.3.2>`_ - ``0.3.2`` with chart ``0.2.3``
- `voltha-system-tests <https://github.com/opencord/voltha-system-tests/releases/tag/2.9.0>`_ - ``2.9.0``


Helm Chart Versions:
++++++++++++++++++++
This section refers to the macro charts to deploy the required infrastructure and a (or many) VOLTHA stacks:
- Voltha-infra: ``2.9.13``
- Voltha-stack: ``2.9.17``

BAL Version:
++++++++++++
Broadcom abstraction layer (BAL) version: ``3.10.2.2``.

Openolt Agent packages:
+++++++++++++++++++++++
**EdgeCore**
Get access credentials for https://edgecore.quickconnect.to from Edgecore.
Then login and navigate to ``File_Station`` -> ``EdgecoreNAS``, and then the folder
``/ASXvOLT16/OpenOLT_Agent/From_ONF_Distribution/voltha-2.9`` or
``/ASGvOLT64/OpenOLT_Agent/From_ONF_Distribution/voltha-2.9`` based on ``ASXvOLT16`` or ``ASGvOLT64`` platform,
and pick the suitable OLT debian package based on ``BAL 3.10.2.2`` applicable for you.
Please make sure to use the ONL
``/ASXvOLT16/OpenOLT_Agent/From_ONF_Distribution/ONL-onl-4.14_ONL-OS8_2021-11-26.0058-0de1c30_AMD64_INSTALLED_INSTALLER``
for running ``BAL 3.10.2.2``.

**Radisys**
Please write to `Cameron Lundberg <cameron.lundberg@radisys.com>`_ with `Girish Gowdra <cameron.lundberg@radisys.com>`_
to get the OLT debian package validated on 3200G, 1600x and 1600G platforms for VOLTHA-2.9 release

