..
   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
   SPDX-License-Identifier: Apache-2.0

Overview
========

There are many ways to deploy Aether, depending on the requirements of the edge
site. The Reliability, Availability, and Serviceability (RAS) of each set of
equipment will differ depending on the characteristics of each edge.

This document provides several hardware deployment options and explains the
differences between them.

Deployment Options
------------------

Development Environments
""""""""""""""""""""""""

For users looking for a development or fully software-simulated environment,
there is ``Aether-in-a-Box (AiaB)`` - instructions for running this can be
found in the :doc:`Aether SD-Core Developer Guide </developer/sdcore>`.  AiaB
is only suitable for testing and developing software, and can't connect to
physical hardware, but is a good choice for learning about the different
software components within Aether.

Production Environments
"""""""""""""""""""""""

Deploying Aether on hardware is required for both production deployments and
hardware testing.  Before deploying Aether, a detailed plan including the
network topology, hardware, and all cabling needs to be created.

For redundancy of workloads running in Kubernetes, at least 3 compute nodes
must be available. A single or pair of compute nodes can be used, but software
would need to be configured without High Availability (HA) enabled.

The topologies below are *simplified physical topologies* to show the equipment
needed and the minimal connectivity between devices. Within these topologies,
multiple VLANs, routing, and other network-level configuration is required to
make a functional Aether edge.

There are also possible RAS improvements that can be done at a topology level -
for example, fabric switch connections can be made with using two cables, and
configured to tolerate the failure or replacement of one cable or NIC port,
which is recommended especially for inter-switch links.

Edge Connectivity
-----------------

Aether's is a managed service, and Aether Edges require a constant connection
via VPN to the 4G and 5G core in Aether Central for managing subscriber
information.

At a minimum, the site must provide a public static IP address that can be used
for the VPN connection. This can be behind NAT using port forwarding can be
configured to the Aether Edge within the network.

Additionally, for initial installation and setup and and managing
updates to the edge sites, access via SSH (public key only) is required.

BESS-based Network Topology
---------------------------

The :doc:`Software-only BESS UPF
</edge_deployment/bess_upf_deployment>`, which can be used for deployments that
do not have P4 switching hardware.

.. image:: images/edge_mgmt_only.svg
   :alt: BESS network topology


BESS runs on an x86 compute server, and is deployed using Kubernetes. In
production it requires a SR-IOV capable network card, and specific K8s CNIs to
be used.

The Management Server and Switch must be configured with multiple VLANs which
provide subnets required for routing within the BESS UPF.

P4-based Network Topology
-------------------------

If only a single P4 switch is used, the :doc:`Simple
<trellis:supported-topology>` topology can be used, but provides no network
redundancy:

.. image:: images/edge_single.svg
   :alt: Single Switch Topology

If another switch is added, and a "Paired Leaves"  (aka :doc:`Paired Switches
<trellis:supported-topology>`) topology is used, which can tolerate the loss of
a leaf switch and retain connections for all dual-homed devices. Single homed
devices on the failed leaf would need another form of HA, for example,
deploying multiple eNBs where some are connected to each leaf, and can provide
radio coverage.:

.. image:: images/edge_paired_leaves.svg
   :alt: Paired Leaves Topology

For larger deployments, a 2x2 fabric can be configured (aka :doc:`Single-Stage
Leaf-Spine <trellis:supported-topology>`), which provide Spine redundancy, but
does not support dual-homing of devices.

.. image:: images/edge_2x2.svg
   :alt: 2x2 Fabric Topology

Other topologies as described in the :doc:`Trellis Documentaiton
<trellis:supported-topology>` can possibly be used, but are not actively being
tested at this time.

Additionally, the P4-based topologies can support running both the BESS UPF and
P4 UPF on the same hardware at the same time if desired (for testing, or
simultaneous 4G/5G support).

Hardware Descriptions
---------------------

Fabric Switch
"""""""""""""

To use the P4 UPF, you must use fabric switches based on the `Intel (previously
Barefoot) Tofino chipset
<https://www.intel.com/content/www/us/en/products/network-io/programmable-ethernet-switch/tofino-series.html>`_.
There are two variants of this switching chipset, with different resources and
capabilities.

Aether currently supports these P4 switch models:

* `EdgeCore Wedge100BF-32X
  <https://www.edge-core.com/productsInfo.php?cls=1&cls2=180&cls3=181&id=335>`_,
  a Dual Pipe Tofino ASIC

* `EdgeCore Wedge100BF-32QS
  <https://www.edge-core.com/productsInfo.php?cls=1&cls2=180&cls3=181&id=770>`_,
  a Quad Pipe Tofino ASIC, which has more chip resources and a faster embedded
  system with more memory and storage.

The P4 UPF and SD-Fabric features run within the constraints of the Dual Pipe
system for production deployments, but for development of features in P4, the
larger capacity of the Quad Pipe is desirable.

These switches feature 32 QSFP+ ports capable of running in 100GbE, 40GbE, or
4x 10GbE mode (using a split DAC or fiber cable) and have a 1GbE management
network interface.

See also the :ref:`Rackmount of Eqiupment
<edge_deployment/site_planning:rackmount of equipment>` for how the Fabric
switches should be rackmounted to ensure proper airflow within a rack.

Compute Server
""""""""""""""

These servers run Kubernetes, Aether connectivity apps, and edge applications.

Minimum hardware specifications:

* AMD64 (aka x86-64) architecture

* 8 CPU Cores (minimum), 16-64 recommended

* 32GB of RAM (minimum), 128GB+ recommended

* 250 GB of storage (SSD preferred), 1TB+ recommended

* 2x 40GbE or 100GbE Ethernet network card to P4 switches, with DPDK support

* 1x 1GbE management network port.  2x required for BESS UPF.

Optional but highly recommended:

* Lights out management support, with either a shared or separate NIC and
  support for HTML5 console access.

Management Server
"""""""""""""""""

One management server is required, which must have at least two 1GbE network
ports, and runs a variety of network services to bootstrap and support the
edge.

In current Aether deployments, the Management Server also functions as a router
and VPN gateway back to Aether Central.

Minimum hardware specifications:

* AMD64 (aka x86-64) architecture

* 4 CPU cores, or more

* 8GB of RAM, or more

* 120GB of storage (SSD preferred), or more

* 2x 1GbE Network interfaces (one for WAN, one to the management switch)

Optional:

* 10GbE or 40GbE network card with DPDK support to connect to fabric switch

* Lights out management support, with either a shared or separate NIC and
  support for HTML5 console access.

Management Switch
"""""""""""""""""

A managed L2/L3 management switch is required to provide connectivity within
the cluster for bootstrapping equipment.  It is configured with multiple VLANs
to separate the management plane, fabric, and the out-of-band and lights out
management connections on the equipment.

Minimum requirements:

* 8x 1GbE Copper ports (adjust to provide a sufficient number for every copper
  1GbE port in the system)

* 2x 10GbE SFP+ or 40GbE QSFP interfaces (only required if management server
  does not have a network card with these ports)

* Managed via SSH or web interface

* Support the LLDP protocol for debugging cabling issues

* Capable supporting VLANs on each port, with both tagged and untagged traffic
  sharing a port.


Optional:

* PoE+ support, which can power eNB and monitoring hardware, if using
  Management switch to host these devices.

eNB Radio
"""""""""

The LTE eNB used in most deployments is the `Sercomm P27-SCE4255W Indoor CBRS
Small Cell
<https://www.sercomm.com/contpage.aspx?langid=1&type=prod3&L1id=2&L2id=1&L3id=107&Prodid=751>`_.

While this unit ships with a separate power brick, it also supports PoE+ power
on the WAN port, which provides deployment location flexibility. Either a PoE+
capable switch or PoE+ power injector should be purchased.

If connecting directly to the fabric switch through a QSFP to 4x SFP+ splitter
cable, a 10GbE SFP+ to 1GbE Copper media converter should be purchased. The `FS
UMC-1S1T <https://www.fs.com/products/101476.html>`_ has been used for this
purpose successfully.

Alternatively, the Fabric's 10GbE SFP+ could be connected to another switch
(possibly the Management Switch) which would adapt the speed difference, and
provide PoE+ power, and power control for remote manageability.


Testing Hardware
----------------

The following hardware is used to test the network and determine uptime of
edges.  It's currently required, to properly validate that an edge site is
functioning properly.

Monitoring Raspberry Pi and CBRS dongle
"""""""""""""""""""""""""""""""""""""""

One pair of Raspberry Pi and CBRS band supported LTE dongle is required to
monitor the connectivity service at the edge.

The Raspberry Pi model used in Pronto is a `Raspberry Pi 4 Model B/2GB
<https://www.pishop.us/product/raspberry-pi-4-model-b-2gb/>`_

Which is configured with:

* HighPi Raspberry Pi case for P4

* Either a:

  * PoE Hat used with a PoE switch (recommended, allows remote power control)

  * USB-C Power Supply

* MicroSD Card with Raspbian - 16GB

One LTE dongle model supported in Aether is the `Sercomm Adventure Wingle
<https://www.sercomm.com/contpage.aspx?langid=1&type=prod3&L1id=2&L2id=2&L3id=110&Prodid=767>`_.


Example BoMs
------------

To help provision a site, a few example Bill of Materials (BoM) are given
below, which reference the hardware descriptions given above.

Some quantities are dependent on other quantities - for example, the number of
DAC cables frequently depends on the number of servers in use.

These BOMs do not include UE devices.  It's recommended that the testing
hardware given above be added to every BoM for monitoring purposes.


BESS UPF Testing BOM
""""""""""""""""""""

The following is the minimum BoM required to run Aether with the BESS UPF.

============ ===================== ===============================================
Quantity     Type                  Purpose
============ ===================== ===============================================
1            Management Switch     Must be Layer 2/3 capable for BESS VLANs
1            Management Server
1-3          Compute Servers       Recommended at least 3 for Kubernetes HA
1 (or more)  eNB
1x #eNB      PoE+ Injector         Required unless using a PoE+ Switch
Sufficient   Cat6 Network Cabling  Between all equipment
============ ===================== ===============================================

P4 UPF Testing BOM
""""""""""""""""""

============ ===================== ===============================================
Quantity     Type                  Description/Use
============ ===================== ===============================================
1            P4 Fabric Switch
1            Management Switch     Must be Layer 2/3 capable
1            Management Server     At least 1x 40GbE QSFP ports recommended
1-3          Compute Servers       Recommended at least 3 for Kubernetes HA
2x #Server   40GbE QSFP DAC cable  Between Compute, Management, and Fabric Switch
1            QSFP to 4x SFP+ DAC   Splitter between Fabric and eNB
1 (or more)  eNB
1x #eNB      10GbE to 1GbE Media   Required unless using switch to convert from
             converter             fabric to eNB
1x #eNB      PoE+ Injector         Required unless using a PoE+ Switch
Sufficient   Cat6 Network Cabling  Between all equipment
============ ===================== ===============================================

P4 UPF Paired Leaves BOM
""""""""""""""""""""""""

============ ===================== ===============================================
Quantity     Type                  Description/Use
============ ===================== ===============================================
2            P4 Fabric Switch
1            Management Switch     Must be Layer 2/3 capable
1            Management Server     2x 40GbE QSFP ports recommended
3            Compute Servers
2            100GbE QSFP DAC cable Between Fabric switches
2x #Server   40GbE QSFP DAC cable  Between Compute, Management, and Fabric Switch
1 (or more)  QSFP to 4x SFP+ DAC   Splitter between Fabric and eNB
1 (or more)  eNB
1x #eNB      10GbE to 1GbE Media   Required unless using switch to convert from
             converter             fabric to eNB
1x #eNB      PoE+ Injector         Required unless using a PoE+ Switch
Sufficient   Cat6 Network Cabling  Between all equipment
============ ===================== ===============================================


P4 UPF 2x2 Leaf Spine Fabric BOM
""""""""""""""""""""""""""""""""

============ ===================== ===============================================
Quantity     Type                  Description/Use
============ ===================== ===============================================
4            P4 Fabric Switch
1            Management Switch     Must be Layer 2/3 capable
1            Management Server     2x 40GbE QSFP ports recommended
3            Compute Servers
8            100GbE QSFP DAC cable Between Fabric switches
2x #Server   40GbE QSFP DAC cable  Between Compute, Management, and Fabric Switch
1 (or more)  QSFP to 4x SFP+ DAC   Splitter between Fabric and eNB
1 (or more)  eNB
1x #eNB      10GbE to 1GbE Media   Required unless using switch to convert from
             converter             fabric to eNB
1x #eNB      PoE+ Injector         Required unless using a PoE+ Switch
Sufficient   Cat6 Network Cabling  Between all equipment
============ ===================== ===============================================

