.. SPDX-FileCopyrightText: 2021 Open Networking Foundation <info@opennetworking.org>
.. SPDX-License-Identifier: Apache-2.0

SD-Fabric 1.1
=============

After one year of incubation under the ONF's member-only license,
we are excited to present the first `open-source release of SD-Fabric under the Apache 2.0 license
<https://opennetworking.org/news-and-events/press-releases/onfs-leading-private-5g-connected-edge-platform-aether-now-released-to-open-source/>`_

SD-Fabric 1.1 comes with numerous new features and improvements.
The main focus for this release is full integration with Aether,
ONF’s private-5G edge connectivity solution for enterprises.
SD-Fabric brings the many benefits of network programmability to Aether,
from a hardware-accelerated highly-available P4-UPF, to fabric-wide slicing and QoS,
and per-packet visibility via Inband-Network Telemetry (INT).

In this release, we provide two UPF options: the switch-based P4-UPF, offering the highest performance;
and the CPU-based BESS-UPF, tailored for deployment flexibility and horizontal scalability.
Both UPFs come with numerous bug fixes as well as integration with Aether 2.0 features,
such as support for 5G base stations, application filtering, QoS via multi-level rate-limiting,
and enhanced visibility with per-flow metrics and INT integration.

Moreover, we provide many operational improvements such as better support for
enterprise networks, simplified configuration, improved stability, and reduced resource usage.

We hope the transition to open source will catalyze the adoption of SD-Fabric and
attract more users and contributors from the community.
Please visit the :ref:`SD-Fabric documentation website <index>` to learn more about
all the features SD-Fabric offers and how to get started.

Feature Highlights
------------------

Open Source Release
^^^^^^^^^^^^^^^^^^^
All SD-Fabric components are now completely open source under the Apache 2.0 license.
We have published all source code, docker images, helm charts, documentation, and mailing lists.

Aether Integration
^^^^^^^^^^^^^^^^^^
This release provides the following integrations with Aether 2.0:

- **4G/5G slice based on P4-UPF**:
  which can now be instantiated using the Aether management portal or APIs.
  In this release, we support creating only one P4-UPF slice,
  creation of more P4-UPF slices will come in future releases.
  As before, more than one slice can be created when using BESS-UPF.
- **Initial INT integration**:
  this release adds di-metrics-exporter,
  a new service which fetches and aggregates real-time INT-based metrics and anomalies
  from Intel\ |reg| DeepInsight |tm|,
  to produce per-UE health status reports to be consumed by the Aether Analytics Engine (work-in-progress).
  SD-fabric supports monitoring of UE traffic when using both P4-UPF and BESS-UPF.

P4-UPF
^^^^^^
This release aims at bringing feature parity with BESS-UPF. To this end, P4-UPF now supports
the following new features:

- **Application filtering**:
  where the UPF can drop or forward traffic based on application endpoints
  (IPv4 prefix and port range) configured using PFCP SDF filters received from SD-Core.
  We support all ROC policies: ALLOW-ALL, DENY-ALL, ALLOW-PUBLIC.
- **Multi-level rate-limiting**:
  where traffic can be policed at the application level, UE level, or slice level.
  Per-application and per-UE rate limits can be configured by means of PFCP QERs received from SD-Core.

BESS-UPF
^^^^^^^^
- **Port ranges in app filtering rules**:
  BESS-UPF now supports installing PDRs with SDF filters
  matching on more than one transport-layer port.
- **Arbitrary IPv4 prefix lengths in app filtering rules**:
  including Aether's **allow-public** rule set (which blocks traffic to RFC 1918 private subnets).
- **Per-flow metrics (experimental)**:
  when enabled, the BESS pipeline collects metrics such as throughput, latency, jitter, and packet loss.
  Metrics are collected for each PFCP PDR rule,
  allowing performance monitoring for multiple application flows for the same UE.
  Metrics can be exported via the Prometheus endpoint in PFCP-Agent.

Slicing & QoS
^^^^^^^^^^^^^
We continue to make slicing and QoS more configurable to adapt to different use cases.

- **ONOS now reads slicing parameters via netcfg**:
  to support static configuration of arbitrary slices and traffic classes.
- **Updated config generation scripts**:
  to automatically generate both Stratum chassis_config and ONOS netcfg file using high-level parameters.

Operations
^^^^^^^^^^
Numerous improvements to make it easier to deploy and operate SD-Fabric.

- **Support for P4Runtime port translation**:
  which allows hiding ASIC-specific internal port numbers from user-facing configuration files.
  Now, when configuring switch interfaces in both the ONOS netcfg and Stratum chassis config,
  users can specify front panel port/channel numbers instead of SDK port numbers.
- **Remove the management server from the data plane**:
  user traffic is now processed by P4-UPF or BESS-UPF and then
  forwarded upstream (or to edge-applications) directly by the fabric switches.
- **Support base stations behind L3-routed network**:
  supporting real-world enterprise deployments.
- **Improve support for paired-leaves topology and distributed UPF**:
  by enabling phased-recovery by default to ensure
  traffic is not sent to a recovering switch until it is fully programmed, avoiding unnecessary packet drops.

Bug fixes and other improvements
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Made primary controller election in ONOS persistent during device and cluster events,
  ensuring flow/group operations to always be successful.
- Improved the UP4's distributed UPF replication protocol,
  fixing a known issue that was causing missing or stale flows in some switches.
- Implemented a reconciliation mechanisms in the ONOS device manager to
  facilitate recovery from network partition scenarios
- Fixed wrong flow handling during network partition scenarios
- Enabled ZGC garbage collector in ONOS to reduce garbage collector pauses and their effects on the cluster.
- Upgraded Atomix to 3.1.12 and Karaf to 4.2.14

Testing
^^^^^^^
- Built a new Go-based integration test infrastructure for PFCP-Agent,
  including ``pfcpsim``, a CLI-based tool to emulate SMF interactions in tests.
  The new infrastructure allows testing PFCP-Agent interaction for both P4-UPF and BESS-UPF.
- Nightly SD-Fabric integration tests now include PFCP-Agent
- Added new nightly test cases for new P4-UPF features and persistent controller election

Development
^^^^^^^^^^^
- Created a v1model version of the fabric-tna P4 program.
  The new P4 program allows sharing the same pipeconf and PTF tests as the TNA version of the program,
  facilitating development and testing in bmv2-based emulated environments.

Upgrade Notes
-------------
If you are upgrading from SD-Fabric 1.0, there are several substantial changes that require additional attention.

**ONOS netcfg**

- We renamed all pipeconf names and replaced ``spgw`` with ``upf``
  (e.g., ``fabric-spgw-int`` is now named ``fabric-upf-int``)
- We bumped the supported Intel\ |reg| P4 Studio SDE from ``9_5_0`` to ``9_7_0``
- S1U/N3 address and UE pool configuration for the UP4 app is no longer necessary.
  Please use the PFCP-Agent ``upf.json`` or helm values to specify them.
- When using 5G base stations, make sure to set the ``pscEncapEnabled`` flag to true in the UP4's netcfg
- Because of P4Runtime translation,
  all port numbers in the ONOS netcfg should match the **singleton port id** used in the Stratum chassis config
  (instead of the ASIC-specific P4 port number).
- See :ref:`ONOS Network Config <onos_network_config>` for more details

**PFCP agent**

- We made UE pool configuration in the PFCP Agent mandatory.
  Make sure to configure ``ue_ip_pool``, under the ``cpiface`` group, in the ``upf.json`` file (or Helm values).
- Access IP configuration parameter is now mandatory.
  Make sure to configure ``access_ip`` in the ``upf.json`` file (or Helm values).
- ``p4rtciface.ue_ip_pool`` has been removed. Use ``cpiface.ue_ip_pool`` instead.
- Introduced ``slice_id`` field. It defaults to 0 if not specified.
- See :ref:`PFCP agent config <pfcp_agent_config>` for more details

**Stratum chassis config**

- Since the Stratum's singleton port ID can now be used in the ONOS netcfg for all port numbers
  (thanks to P4Runtime translation), we recommend using the following easy-to-understand convention:

    - For unchannelized ports: use the same front panel port number,
      e.g., for port “9/0” use singleton port ID “9”
    - For channelized ports: use the formula “port number x 100 + channel”,
      e.g., when configuring channels 9/0, 9/1, 9/2, and 9/3,
      the corresponding singleton port IDs should be 900, 901, 902, and 903
- See `Stratum port number <https://github.com/stratum/stratum/blob/main/stratum/hal/bin/barefoot/README.run.md#user-content-port-numbers>`_ for more details

**Docker image**

- All our docker images are now hosted on DockerHub.
  Remember to update image registry, repo and tag if you were pulling images from the Aether Registry previously
- We renamed the ``tost`` image to ``sdfabric-onos``

**Helm value**

- ``logging.karafVersion`` should be updated from ``4.2.9`` to ``4.2.14``


Known Issues and Limitations
----------------------------
- Some INT collectors might not support topologies with dual-homed hosts.
- In P4-UPF, configuration of slice rate limits is currently not exposed to Aether.
  We plan to add this in the next minor release (SD-Fabric v1.1.1).
- In P4-UPF, we currently don't support exporting per-port or per-flow metrics
  via Prometheus. As a consequence, when using the Aether monitoring dashboard,
  the corresponding graphs will not be populated. We plan to add this in the
  next major release (SD-Fabric v1.2)
- In BESS-UPF, when using application filtering with port ranges, we don't
  support ranges wider than 100 ports. Please create more application filtering
  rules to cover the desired range.

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

SD-Fabric ONOS
^^^^^^^^^^^^^^
- Image

  - `opennetworking/sdfabric-onos <https://hub.docker.com/r/opennetworking/sdfabric-onos>`_: ``1.1.0``

- Source code

  - `onos <https://github.com/opennetworkinglab/onos>`_: ``2.5.7-rc2``
  - `trellis-control <https://github.com/opennetworkinglab/trellis-control>`_: ``3.2.0``
  - `fabric-tna <https://github.com/stratum/fabric-tna>`_: ``1.1.0``
  - `up4 <https://github.com/omec-project/up4>`_: ``1.1.0``

Stratum
^^^^^^^
- Image: `stratumproject/stratum-bfrt <https://hub.docker.com/r/stratumproject/stratum-bfrt>`_: ``22.03.01-9.7.0``
- Repo: `stratum <https://github.com/stratum/stratum>`_: ``29f391580de8d5ee2d7a207a9a4261fda4e54a6f``

DBUF
^^^^
- Image: `opennetworking/dbuf <https://hub.docker.com/r/opennetworking/dbuf>`_: ``1.0.0``
- Repo: `dbuf <https://github.com/omec-project/dbuf>`_: ``v1.0.0``

PFCP Agent
^^^^^^^^^^
- Image: `omecproject/upf-epc-pfcpiface <https://hub.docker.com/r/omecproject/upf-epc-pfcpiface>`_

    - For P4-UPF: ``master-3e29b49``
    - For BESS-UPF: ``master-9a4d86c``

- Repo: `upf <https://github.com/omec-project/upf>`_

    - For P4-UPF: ``3e29b49e96e39e0ba7bf4190a8b0d0aa9413b08d``
    - For BESS-UPF: ``9a4d86c654a9f60947ebf71d015d4781ed7a95a6``

BESS UPF
^^^^^^^^
- Image: `omecproject/upf-epc-bess <https://github.com/omec-project/upf>`_: ``master-9a4d86c``
- Repo: `upf <https://github.com/omec-project/upf>`_: ``9a4d86c654a9f60947ebf71d015d4781ed7a95a6``

Helm Chart Versions
-------------------
- `sdfabric <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/sdfabric>`_: ``1.1.0``

  - `onos-classic chart <https://github.com/onosproject/onos-helm-charts/tree/master/onos-classic>`_: ``0.1.28``
  - `stratum chart <https://github.com/stratum/stratum-helm-charts/tree/master/stratum>`_: ``0.1.18``
  - `pfcp-agent chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/pfcp-agent>`_: ``0.0.13``
  - `dbuf chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/dbuf/>`_: ``0.0.4``
  - `int-host-reporter chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/int-host-reporter>`_: ``0.0.4``
  - `di-topology-watchdog chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/di-topology-watchdog>`_: ``0.0.5``
  - `di-metrics-exporter chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/di-metrics-exporter>`_: ``0.0.3``

- `bess-upf chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/bess-upf>`_: ``0.0.5``

Patches
-------

.. toctree::
   :maxdepth: 2
   :glob:

   1.1.1

.. |reg|    unicode:: U+000AE .. REGISTERED SIGN
.. |tm|     unicode:: U+2122 .. TRADE MARK SIGN
