blob: 6df4265f42bf3103eef1c1e913a4cfc31d0b3502 [file] [log] [blame]
.. 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