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

SD-Fabric 1.0.0
===============

This is the first release of SD-Fabric.

SD-Fabric is an open source, full stack, deeply programmable network fabric optimized for edge cloud,
5G, and Industry 4.0 applications.
It builds on SDN and cloud native principles to create a disruptive platform that for the first time
empowers the network with modern cloud development principles.

- **Right-sized Topology**: Scale from a single Top-of-Rack (ToR) switch, to an
  Highly-Available (HA) setup with paired ToRs, to a full leaf-spine fabric
  for multi-rack deployments.
- **API Driven**: Well-defined APIs provide the ability to drop or reroute traffic,
  create slices with configurable QoS, obtain telemetry, and more.
- **Cloud Managed**: Fully integrated and configured by Aether™ Management Platform.
- **5G as a Workload**: Reduce CPU load and increase performance by terminating GTP-U tunnels
  directly in the fabric switches, with QoS and slicing support.
- **End-to-End Visibility**: With Inband Network Telemetry (INT) on switches and end hosts,
  enabling closed loop control applications.

Feature Highlights
-------------------
- **Fabric connectivity**

  - Support single switch, paired-leaves with dual-homing, and leaf-spine topology
  - Bridging, IPv4 routing, ECMP, DHCP relay
  - Redundancy on both control and data plane

- :ref:`Switch-based P4-UPF <p4_upf>`

  - 4G/5G UPF implemented with P4 programmable switches
  - Support downlink buffering for UE idle-mode and handover via microservice
  - Integration with PFCP standard interface

- :ref:`Slicing and QoS <slicing_qos>`

  - Data plane support for fabric-wide slicing and QoS using dedicated hardware queues
  - Control plane integration with SD-Core for UPF QoS with single slice (multiple slices in the next release)
  - REST APIs for classification of non-mobile traffic

- :ref:`Inband Network Telemetry (INT) <int>`

  - INT-XD mode compliant with Telemetry Report Specification v0.5
  - Integrated with Intel DeepInsight
  - Switch INT

    - Support for flow, drop, and queue congestion reports
    - Watchlist and smart filters to reduce the volume of reports
    - Integration with P4-UPF

  - Host INT

    - Experimental implementation based on eBPF
    - Kubernetes CNI-independent, tested with Cilium and Calico
    - Support for flow and drop reports

- **API**

  - Drop traffic
  - Pin traffic to specific spine (in a leaf-spine setup)
  - Slicing and QoS for non-mobile traffic

- **Scalability**

  - 5K UEs, 10 calls per second with 1 CPU core and 4G RAM per ONOS instance


Deployment
----------
- Support Kubernetes deployments with Helm charts
- Logging integration via EFK
- Monitoring integration via Prometheus/Grafana
- Alarm integration via Kibana


Testing
-------
- **Data plane tests**

  - Unary tests based on PTF framework (running pre-merge on Tofino model)
  - Line rate test based on PTF framework and TRex traffic generator for INT and QoS features
    (running nightly on hardware switch)

- **Control plane tests**

  - UP4 integration with PFCP Agent based on ONOS STC framework for 2x2 and paired-leaves topologies
    (running pre-merge)

- **System tests**

  - Based on TestON framework
  - Running nightly on paired-leaves and 2x2 topology with 3 ONOS instances
  - Features covered:

      - Bridging
      - Paired-leaves
      - UP4
      - INT with DeepInsight integration
      - QoS (both mobile and non-mobile traffic)

  - Jenkins dashboard showing nightly results

Known Issues and Limitations
----------------------------
- `SDFAB-653 <https://jira.opennetworking.org/browse/SDFAB-653>`_

   ArpHandler is unable to handle ARP requests for device loopback address
- `SDFAB-655 <https://jira.opennetworking.org/browse/SDFAB-655>`_

   UP4 reconciliation cycle can leave switch flow state inconsistent causing UE
   data traffic to be dropped. Requires to detach and re-attach UEs.
- Host INT features assumes the fabric interface on each K8s worker node uses the same name

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

SD-Fabric ONOS image
^^^^^^^^^^^^^^^^^^^^
- `tost <https://registry.aetherproject.org/harbor/projects/4/repositories/tost>`_: ``registry.aetherproject.org/tost/tost:1.0.0``

Sub-component versions:

- `onos <https://github.com/opennetworkinglab/onos>`_: ``2.5.5-rc1``
- `trellis-control <https://github.com/opennetworkinglab/trellis-control>`_: ``3.1.0``
- `trellis-t3 <https://github.com/opennetworkinglab/trellis-t3>`_: ``4.0.0``
- `fabric-tna <https://github.com/stratum/fabric-tna>`_: ``1.0.0``
- `up4 <https://github.com/omec-project/up4>`_: ``1.0.0``

Stratum image
^^^^^^^^^^^^^
- `stratum-bfrt <https://hub.docker.com/r/stratumproject/stratum-bfrt>`_: ``stratumproject/stratum-bfrt:21.10-9.5.0``

DBUF image
^^^^^^^^^^
- `dbuf <https://github.com/omec-project/dbuf>`_: ``registry.aetherproject.org/tost/dbuf:1.0.0``

PFCP Agent image
^^^^^^^^^^^^^^^^
- `pfcp-agent <https://github.com/omec-project/upf-epc/tree/master/pfcpiface>`_: ``omecproject/upf-epc-pfcpiface:master-fcdbc95``

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

  - `onos-classic chart <https://github.com/onosproject/onos-helm-charts/tree/master/onos-classic>`_: ``0.1.24``
  - `stratum chart <https://github.com/stratum/stratum-helm-charts/tree/master/stratum>`_: ``0.1.13``
  - `pfcp-agent chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/pfcp-agent>`_: ``0.0.1``
  - `dbuf chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/dbuf/>`_: ``0.0.1``
  - `int-host-reporter chart <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/refs/heads/master/int-host-reporter>`_: ``0.0.1``
