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

================
eNB Installation
================

This section describes how to install and configure the Sercomm eNB
which is the default eNB device for Aether/Pronto project.

Preliminaries
=============
In order to install and configure the Sercomm eNB, we should prepare following device:

* Laptop or PC
* USB-Ethernet adapter or Ethernet port on Laptop/PC
* CAT5/6/7 cable
* Sercomm eNB
* 1G-10G converter

Also, we should know the below information:

* MME IP address (10.168.0.6 by default)
* TAC
* Cell ID

How to access the Sercomm eNB admin UI?
=======================================
The default Sercomm eNB has default configuration values which are not working within the Aether/Pronto edge.
In order to configure the Sercomm eNB, we need to access the Sercomm eNB admin web UI.
We can initially access the UI through the LAN port on the Sercomm eNB device.

.. image:: images/enb-ser-1.jpg
  :width: 1008
  :height: 756
  :alt: Sercomm eNB Port Panel

The above figure depicts the Sercomm eNB port panel which has two Ethernet ports, one power port, and one GPS port.
We should make a physical link between the laptop/PC and LAN port on the Sercomm eNB.
In the above figure, the yellow cable should be connected to the laptop/PC.
Once the physical link is established,
the Ethernet interface on the laptop/PC should have an IP address in 11.11.11.0/24 subnet.
The Sercomm eNB will automatically assign the IP address to the Ethernet interface on the laptop/PC,
since the eNB is working as a DHCP server.
Of course, the interface should be set to DHCP, not static.

.. note::

   If the Sercomm eNB does not assign the IP address on the laptop/PC's Ethernet interface, please double-check the physical link.
   Or, it is possible to assign the static IP address on the laptop/PC's Ethernet interface. Aforementioned before, the IP address should be in 11.11.11.0/24 subnet.

After the Ethernet interface on the laptop/PC has the IP address in 11.11.11.0/24 subnet,
we can access the Sercomm eNB.
We can open the Web browser (e.g., Chrome, Firefox, etc.), and go to `https://11.11.11.188`. Then, we can see the below login page on the Web browser.

.. image:: images/enb-ser-2.png
  :alt: Sercomm eNB UI login pae

With the below credentials, we can log in the UI:

* ID: sc_femto
* Password: scHt3pp (or sc_femto)

After log-in, we can see the state page.

.. image:: images/enb-ser-3.png
  :alt: Sercomm eNB UI state page

Network configuration
=====================
We should then configure the IP address on the WAN port which will be connected to the Tofino switch.
The network configuration page shows up when we click `NetWork set` button on the top menu bar.

.. image:: images/enb-ser-4.png
  :alt: Sercomm eNB UI network configuration page

In this page, we should change four values in the `IP Address section`.

* Connected type: Static IP
* IP Address: 192.168.251.5
* Network mask: 255.255.255.0
* Gateway address: 192.168.251.1

The IP address in this menu is the IP address for the WAN port.
The Gateway address is the TOST IP address.
After pushing those values on the network configuration page, click the `Save` button at the bottom.

.. note::
   No need to touch any other parameters in this configuration page.

LTE configuration
=================
Next, we should configure the LTE parameters.
Click the `Manage` button on the top menu bar and then go to the `LTE Basic Setting` tab.

.. image:: images/enb-ser-5.png
  :alt: Sercomm eNB UI LTE configuration page

In this page, we should change below parameters:

* Carrier Number: 2
* Carrier Aggregation: unchecked
* BandWidth: 20
* FrequencyBand: 48,48
* EARFCN: 55440,55640
* CellIdentity: assigned Cell ID
* PCI: 100,101
* TxPower: 20
* Tunnel Type: IPv4
* MME IP Address: 10.168.0.6
* TAC: assigned TAC
* PLMNID: 315010
* Sync Source: FREE_RUNNING
* Enable CWMP: unchecked

Among those parameters, we should carefully set values to CellIdentity and TAC.
Those parameters are the preliminaries which ONF OPs team will assign to each site.
Likewise, after pushing those parameters, click the `Save` button at the bottom.

Then, click `SAS Configuration` tab in the same page.

.. image:: images/enb-ser-6.png
  :alt: Sercomm eNB UI SAS configuration page

In this page, we should change five values in the `Location Configuration` section as follows:

* Location: Indoor
* Location Source: Manual
* Latitude: 0
* Longitude: 0
* Elevation: -18000

Do not forget to click the save button at the bottom after pushing values.

Last, click `FAPService` menu at the top menu bar and go to `FAPControl` tab.

.. image:: images/enb-ser-7.png
  :alt: Sercomm eNB UI FAP Control page

In this page, we have to check a single radio box, `AdminState` in the `FAPService_FAPControl_LTE` section.
Then, click the `Save` button at the bottom.

This is the all steps to configure the Sercomm eNB.

Connect the Sercomm eNB to the fabric switch
============================================
After the above configuration, we should power off the Sercomm eNB and connect the eNB WAN port to the fabric switch.
The Sercomm eNB is actually has 1G WAN port, although the fabric switch has 40G interfaces.
Therefore, we should use the 1G-10G converter in which the 1G port is connected with the Sercomm eNB
whereas the 10G port is connected to 10G-40G breakout cable linked to the fabric switch.

.. note::
   Alternatively, we can use an any 1G/10G switch, if we do not have a 1G-10G converter.

Then, power on the Sercomm eNB device and get rid of the LAN port cable.

.. note::
   Without the LAN port cable, we can access the Sercomm eNB admin UI through `https://192.168.251.5` URL, if the laptop/PC is connected with the same network via the fabric switch.
   For our convenience, we can add some forwarding rules into the iptable in the management node to get the Sercomm eNB admin UI outside. It is optional.

Troubleshooting
===============

Connectivity check
^^^^^^^^^^^^^^^^^^
In order to check the connectivity, we can use the Sercomm eNB admin UI.
Open the web browser and go to `https://192.168.251.5` and log in.
Then, click the `Manage` menu and go to the `IP Diagnose` tab.

.. image:: images/enb-ser-8.png
  :alt: Sercomm eNB UI IP Diagnose page

In this page, check the ping menu and write down the IP address `192.168.251.1` in the white box.
Then, click the `Run` button.

After a few seconds, we can see the ping results.
If there is no results, the connectivity between the eNB and the fabric switch has a problem.
Otherwise, the fabric switch is not up and running correctly.
