blob: 73177bb0e43b6a110d62f87390b23af363ea39bb [file] [log] [blame]
.. |onos_version| replace:: 2.2.3
Installation Guide
******************
Building a Hardware Pod
=======================
See :doc:`Supported Hardware <supported-hardware>` for details.
Install Controller - ONOS
=========================
You could run Trellis with a `single instance of ONOS
<https://wiki.onosproject.org/display/ONOS/Local+workflow>`_. But it is
recommended to run ONOS as a cluster.
The idea is to have a "build machine", where you host and build ONOS source
code. But to launch it in operation you use other "target machines" (VMs,
containers or servers).
Typically we use `STC
<https://wiki.onosproject.org/pages/viewpage.action?pageId=12421025>`_ to
launch ONOS ins 3 target machines which form a ONOS cluster.
Download ONOS |onos_version|
----------------------------
Trellis currently is released as part of ONOS and therefore it follows ONOS
version number. This document is written based on ONOS |onos_version|.
You can find more information about how to setup build environment and fetch
ONOS source code from `Development Environment Setup
<https://wiki.onosproject.org/display/ONOS/Development+Environment+Setup>`_.
Prepare Your Target Machine
---------------------------
Please refer to `target machines requirements
<https://wiki.onosproject.org/x/twAQ>`_ for details (you only have to do this
once).
You do not need to follow the directions for the "Mininet Target Machine" if
you are using hardware switches.
Create a Cell File
--------------------
We need to compose a cell file in order to give the information about target
machines to the build machine. Please refer to `test cells
<https://wiki.onosproject.org/x/twAQ>`_ for details. For example:
.. code-block:: bash
export ONOS_CELL=menlo
export OC1=10.128.0.216
export OC2=10.128.0.217
export OC3=10.128.0.218
export ONOS_APPS=drivers,gui,hostprovider,lldpprovider,fpm,dhcprelay,routeradvertisement,hostprobingprovider,netcfghostprovider
export ONOS_USER=admin
export ONOS_GROUP=admin
export ONOS_USE_SSH=true
export ONOS_WEB_USER=onos
export ONOS_WEB_PASS=rocks
- ``OC1, OC2, OC3`` are the IP addresses of the 3 target machines where the
ONOS cluster will be deployed.
- ``ONOS_APPS`` are the apps you want to automatically deploy at launch.
- ``drivers`` includes drivers for various devices and pipelines. Always
required.
- ``gui`` enables graphic user interface. Highly recommended.
- ``hostprovider`` discovers hosts via ARP and NDP
- ``lldpprovider`` discovers links via LLDP
- ``fpm`` (Forwarding Plane Manager) exchanges forwarding information with
Quagga. Required if connecting to external router.
- ``dhcprelay`` relays DHCP packets between clients and servers. Required
if using DHCP to configure IP addresses for hosts
- ``routeradvertisement`` periodically sends IPv6 router advertisement
packets on configured interfaces. Required if using IPv6
- ``hostprobingprovider`` probes and verifies locations of dual-homed
hosts. Required if using dual-homing feature with paired switches
- ``netcfghostprovider`` reads hosts information from network config and add them to the host service.
Required if we want to statically configure some hosts.
- ``ONOS_USER`` is used to login to the target machines, and the password is
not required as you have setup the target machines for password-less access
over ssh.
Once that's done, you can use the ``cell`` command to load the cell file.
.. code-block:: console
$ source onos/tools/dev/bash_profile
$ cell menlo
Check Your Target Environment
-----------------------------
Check if your environment is OK with ``stc prerequisites`` (you only have to do this once).
.. code-block:: console
$ stc prerequisites
2017-02-07 12:10:23 Prerequisites started
2017-02-07 12:10:23 Check-Passwordless-Login-1 started -- ssh -n -o ConnectTimeout=3 -o PasswordAuthentication=no admin@10.128.0.216 date
2017-02-07 12:10:23 Check-ONOS-Bits started -- onos-check-bits
2017-02-07 12:10:23 Check-Passwordless-Login-3 started -- ssh -n -o ConnectTimeout=3 -o PasswordAuthentication=no admin@10.128.0.218 date
2017-02-07 12:10:23 Check-Passwordless-Login-2 started -- ssh -n -o ConnectTimeout=3 -o PasswordAuthentication=no admin@10.128.0.217 date
2017-02-07 12:10:23 Check-Environment started -- test -n /Users/sauravdas/onos -a -n 10.128.0.* -a -n 10.128.0.216
2017-02-07 12:10:23 Check-Environment completed
2017-02-07 12:10:23 Check-Passwordless-Login-1 completed
2017-02-07 12:10:23 Check-Passwordless-Login-2 completed
2017-02-07 12:10:23 Check-Passwordless-Login-3 completed
2017-02-07 12:10:25 Check-ONOS-Bits completed
2017-02-07 12:10:25 Prerequisites completed
0:01 Passed! 6 steps succeeded
Launch STC Command
------------------
Finally launch with ``stc setup`` once you have built ONOS. Here is what it looks like when I launch
.. code-block:: console
$ stc setup
2016-12-23 12:26:44 Setup started
2016-12-23 12:26:44 Uninstall-3 started -- onos-uninstall 10.128.0.218
2016-12-23 12:26:44 Uninstall-2 started -- onos-uninstall 10.128.0.217
2016-12-23 12:26:44 Uninstall-1 started -- onos-uninstall 10.128.0.216
2016-12-23 12:26:44 Push-Bits-2 started -- onos-push-bits 10.128.0.217
2016-12-23 12:26:44 Push-Bits-3 started -- onos-push-bits 10.128.0.218
2016-12-23 12:26:44 Push-Bits-1 started -- onos-push-bits 10.128.0.216
2016-12-23 12:26:45 Push-Bits-1 completed
2016-12-23 12:26:46 Push-Bits-2 completed
2016-12-23 12:26:46 Push-Bits-3 completed
2016-12-23 12:26:46 Uninstall-3 completed
2016-12-23 12:26:46 Kill-3 started -- onos-kill 10.128.0.218
2016-12-23 12:26:46 Uninstall-2 completed
2016-12-23 12:26:46 Kill-2 started -- onos-kill 10.128.0.217
2016-12-23 12:26:46 Uninstall-1 completed
2016-12-23 12:26:46 Kill-1 started -- onos-kill 10.128.0.216
2016-12-23 12:26:46 Kill-3 completed
2016-12-23 12:26:46 Install-3 started -- onos-install 10.128.0.218
2016-12-23 12:26:46 Kill-1 completed
2016-12-23 12:26:46 Install-1 started -- onos-install 10.128.0.216
2016-12-23 12:26:46 Kill-2 completed
2016-12-23 12:26:46 Install-2 started -- onos-install 10.128.0.217
2016-12-23 12:26:52 Install-2 completed
2016-12-23 12:26:52 Secure-SSH-2 started -- onos-secure-ssh -u onos -p rocks 10.128.0.217
2016-12-23 12:26:52 Install-1 completed
2016-12-23 12:26:52 Secure-SSH-1 started -- onos-secure-ssh -u onos -p rocks 10.128.0.216
2016-12-23 12:26:52 Install-3 completed
2016-12-23 12:26:52 Secure-SSH-3 started -- onos-secure-ssh -u onos -p rocks 10.128.0.218
2016-12-23 12:27:07 Secure-SSH-1 completed
2016-12-23 12:27:07 Wait-for-Start-1 started -- onos-wait-for-start 10.128.0.216
2016-12-23 12:27:09 Secure-SSH-3 completed
2016-12-23 12:27:09 Wait-for-Start-3 started -- onos-wait-for-start 10.128.0.218
2016-12-23 12:27:13 Secure-SSH-2 completed
2016-12-23 12:27:13 Wait-for-Start-2 started -- onos-wait-for-start 10.128.0.217
2016-12-23 12:27:14 Wait-for-Start-1 completed
2016-12-23 12:27:14 Check-Components-1 started -- onos-check-components 10.128.0.216
2016-12-23 12:27:14 Check-Nodes-1 started -- onos-check-nodes 10.128.0.216
2016-12-23 12:27:14 Wait-for-Start-3 completed
2016-12-23 12:27:14 Check-Nodes-3 started -- onos-check-nodes 10.128.0.218
2016-12-23 12:27:14 Check-Components-3 started -- onos-check-components 10.128.0.218
2016-12-23 12:27:16 Wait-for-Start-2 completed
2016-12-23 12:27:16 Check-Nodes-2 started -- onos-check-nodes 10.128.0.217
2016-12-23 12:27:16 Check-Components-2 started -- onos-check-components 10.128.0.217
2016-12-23 12:27:18 Check-Nodes-1 completed
2016-12-23 12:27:18 Check-Nodes-3 completed
2016-12-23 12:27:19 Check-Nodes-2 completed
2016-12-23 12:27:20 Check-Components-1 completed
2016-12-23 12:27:20 Check-Apps-1 started -- onos-check-apps 10.128.0.216 drivers,gui,openflow,segmentrouting,fpm,dhcprelay,routeradvertisement,t3,hostprobingprovider includes
2016-12-23 12:27:20 Check-Logs-1 started -- onos-check-logs 10.128.0.216
2016-12-23 12:27:20 Check-Components-3 completed
2016-12-23 12:27:20 Check-Apps-3 started -- onos-check-apps 10.128.0.218 drivers,gui,openflow,segmentrouting,fpm,dhcprelay,routeradvertisement,t3,hostprobingprovider includes
2016-12-23 12:27:20 Check-Logs-3 started -- onos-check-logs 10.128.0.218
2016-12-23 12:27:20 Check-Apps-1 completed
2016-12-23 12:27:20 Check-Apps-3 completed
2016-12-23 12:27:20 Check-Logs-1 completed
2016-12-23 12:27:20 Check-Logs-3 completed
2016-12-23 12:27:21 Check-Components-2 completed
2016-12-23 12:27:21 Check-Logs-2 started -- onos-check-logs 10.128.0.217
2016-12-23 12:27:21 Check-Apps-2 started -- onos-check-apps 10.128.0.217 drivers,gui,openflow,segmentrouting,fpm,dhcprelay,routeradvertisement,t3,hostprobingprovider includes
2016-12-23 12:27:21 Check-Apps-2 completed
2016-12-23 12:27:21 Check-Logs-2 completed
2016-12-23 12:27:21 Setup completed
0:36 Passed! 31 steps succeeded
Useful Utilities
----------------
- Push network configuration to one particular instance of ONOS (all instances
will automatically get the same configuration)
.. code-block:: console
$ onos-netcfg $OC1 network-cfg.json
- Remotely log in to CLI of one particular ONOS instance
.. code-block:: console
$ onos $OC1
- Remotely access the log of one particular ONOS instance
.. code-block:: console
$ onos-log $OC1
Install Trellis apps
====================
Starting from ONOS 2.5, Trellis apps have been extracted from ONOS repo.
Therefore, those apps needs to be installed and activated additionally.
trellis-control
---------------
``segmentrouting`` forwards the traffic in the fabric. **Mandatory**.
For details, check the README at `trellis-control repo
<https://github.com/opennetworkinglab/trellis-control>`_.
trellis-t3
----------
``t3`` (Trellis Troubleshooting Tool) is very useful for debugging. **Optional** but highly recommended.
For details, check the README at `trellis-t3 repo
<https://github.com/opennetworkinglab/trellis-t3>`_.
Install switch-specific apps
============================
There are a few switch-specific apps that need to be installed and activated additionally
based on the type of switch you are using.
It is possible to support a hybrid deployment in which you have different switch types.
In that case, simply enable the apps required by each type of switches.
OF-DPA and OVS
--------------
.. code-block:: console
app activate org.onosproject.openflow
BMV2 with Stratum
-----------------
.. code-block:: console
app activate org.onosproject.drivers.bmv2
app activate org.onosproject.pipelines.fabric
Tofino with Stratum
-------------------
.. code-block:: console
app activate org.onosproject.drivers.barefoot
In addition, we need to build, install and activate ``fabric-tofino`` app, which is hosted in a separate repo.
For details, check the README at `fabric-tofino repo
<https://github.com/opencord/fabric-tofino>`_.
Install Switch OS - ONL
=======================
The switches listed in the :doc:`Supported Hardware <supported-hardware>` are
shipped with Open Networking Install Environment (ONIE) boot loader.
After booting up, we should see the ONIE prompt from console.
Here we assume that the management port on the switch already has Internet
access. (via DHCP)
Enter ONIE
----------
Has no ONL or Has ONL 1.x previously installed
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The way to install ONL 2.x is the same as ONL 1.x.
However, if you have no ONL installed or have older version of ONL, you might
find it tricky to (re)install a newer version.
Here's the instruction:
1. Plug in the console cable and reboot the switch
2. (If your boot loader is grub) When you see the boot menu, select **ONIE
-> ONIE: Rescue**
3. (If your boot loader is uboot) When you see **Hit any key to stop
autoboot** instead of the boot menu, press any key and then enter
``run onie_rescue`` to enter ONIE rescue mode.
Has ONL 2.x previously installed
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
It would be much more easier to reboot into ONIE if you have a previously
installed ONL 2. Simply run:
.. code-block:: console
# onl-onie-boot-mode rescue
# reboot
Available ONIE modes are: *install, rescue, uninstall, update, embed, diag, none*.
This can be helpful when you are in a normal ONL and want to upgrade your system.
Install ONL
-----------
At the ONIE prompt, we need to download and install ONL. To be able to
download ONL the management interface needs to have an IP. ONIE will try to
obtain IP address from DHCP. In the case where DHCP service is not available,
please configure it manually:
.. code-block:: console
ip addr add <IP>/<Netmask> dev <interface>
route add default gw <Gateway>
echo "nameserver 8.8.8.8" > /etc/resolv.conf
To fetch and install the latest compatible ONL, run:
.. code-block:: console
ONIE:/ # wget https://github.com/opencord/OpenNetworkLinux/releases/download/2017-10-19.2200-1211610/ONL-2.0.0_ONL-OS_2017-10-19.2200-1211610_AMD64_INSTALLED_INSTALLER
ONIE:/ # sh ONL-2.0.0_ONL-OS_2017-10-19.2200-1211610_AMD64_INSTALLED_INSTALLER
**Checksum**: *sha256:2db316ea83f5dc761b9b11cc8542f153f092f3b49d82ffc0a36a2c41290f5421*
The switch will automatically reboot into ONL after installation. Default login
credential of ONL is: ``root/onl``
We might want to configure a fixed IP address for the management interface in
ONL.
First edit ``/etc/network/interfaces`` and configure ``ma1``, which is the
management interface.
.. code-block:: text
auto ma1
iface ma1 inet static
address 10.128.10.128
netmask 255.255.0.0
gateway 10.128.0.1
dns-nameservers 192.168.1.1 8.8.8.8
Install Switch Agent - OF-DPA
=============================
.. note::
**Community vs. Premium Version**
The OF-DPA image we distribute for free with Trellis is a community version.
This documentation is also written based on the community version.
The **community version** has most of the features available and therefore
it is **good for small scale deployments** such as lab trials.
However, we highly recommend you to get the **premium version** from
Broadcom if you are aiming for **production deployments at scale**.
Install OF-DPA
--------------
We need to use different OF-DPA images depending on the switch model you are
using.
Please find the installer URL corresponding to each switch model in the `Vendor
Specific Information`_ section.
Copy the image to the switch and start the installation process by running:
.. code-block:: console
$ scp ${OFDPA_DEB} ${SWITCH_IP}:/root
$ dpkg -i --force-overwrite /root/${OFDPA_DEB}
For example, assuming the OF-DPA image is
``ofdpa_3.0.5.5+accton1.7-1_amd64.deb`` and the switch management IP is
``10.128.0.201``, you should run:
.. code-block:: console
$ scp ofdpa_3.0.5.5+accton1.7-1_amd64.deb 10.128.0.201:/root
$ dpkg -i --force-overwrite /root/ofdpa_3.0.5.5+accton1.7-1_amd64.deb
Connect Switch to Controller
============================
.. caution::
We are going to describe two different ways to start OF-DPA and OpenFlow
agent in this section.
Some vendors use ``ofagentd`` service while others use old ``launcher`` app
to start the agent.
Please check the `Vendor Specific Information`_ to understand which method
you should use before continuing this section.
Use ofagentd service
--------------------
Launch with ofagentd
^^^^^^^^^^^^^^^^^^^^
The OFDPA software and the Indigo agent are now a single process launched by
Linux service. First of all, we need to configure
**/etc/ofagent/ofagent.conf**. Uncomment and edit the following line. Make
sure all other lines stay commented.
.. code-block:: bash
OPT_ARGS="-t <controller_ip_1> -t <controller_ip_2> -t <controller_ip_3> -i <dpid>"
We can choose to run OF-DPA in **debug mode**
.. code-block:: bash
OPT_ARGS="-d 2 -c 2 -c 4 -t <controller_ip_1> -t <controller_ip_2> -t <controller_ip_3> -i <dpid>"
- To **start** the ofagent, run ``service ofagentd start``
- To **stop** the agent, run ``service ofagentd stop``
- More ``ofagentapp`` options can be found by running ``ofagentapp --help``
Launch in listen mode with ofagentd
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
An optional ``-l`` parameter can be added for switch to listen on specific
**IP:port**.
This allows us to use tools like **ovs-ofctl** or **dpctl** to connect and
control the switch.
.. code-block:: bash
OPT_ARGS="-t <controller_ip_1> -t <controller_ip_2> -t <controller_ip_3> -i <dpid> -l <ip>:<port>"
Please refer to `Connect to Switch in Listen Mode`_ to learn more about how to
access switches in listen mode.
Use launcher app
----------------
Launch with launcher
^^^^^^^^^^^^^^^^^^^^
- To **start** OF-DPA and OpenFlow agent, run:
.. code-block:: console
# ./launcher ofagentapp -t <controller_ip_1> -t <controller_ip_2> -t <controller_ip_3> -i <dpid>
- We can choose to run OF-DPA in **debug mode**
.. code-block:: console
# ./launcher ofagentapp -d 2 -c 2 -c 4 -t <controller_ip_1> -t <controller_ip_2> -t <controller_ip_3> -i <dpid>
- To **stop** OF-DPA and OpenFlow agent, run:
.. code-block:: console
# killall ofagentapp
Launch in listen mode with launcher
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
An optional ``-l`` parameter can be added for switch to listen on specific
**IP:port**.
This allows us to use tools like **ovs-ofctl** or **dpctl** to connect and
control the switch.
.. code-block:: console
# ./launcher ofagentapp <controller_ip_1> -t <controller_ip_2> -t <controller_ip_3> -i <dpid> -l <ip>:<port>
Please refer to `Connect to Switch in Listen Mode`_ to learn more about how to
access switches in listen mode.
Vendor Specific Information
===========================
Edgecore
--------
- **OF-DPA Image**
- `EdgeCore 5712-54X / 5812-54X / 6712-32X / 7712-32X
<https://raw.githubusercontent.com/onfsdn/atrium-docs/master/16A/ONOS/builds/ofdpa_3.0.5.5%2Baccton1.7-1_amd64.deb>`_
**Checksum**: *sha256:db228b6e79fb15f77497b59689235606b60abc157e72fc3356071bcc8dc4c01f*
- **Start OF-DPA and OpenFlow agent**
- Please refer to `Use ofagentd service`_
- **Configure Port Speed and Breakout**
- By default all the switch ports are running at maximum speed. The port
speed can be modified in **/etc/accton/ofdpa.conf**
.. code-block:: text
port_speed_1=1000 # configure front port 1 to run at 1G
- We can also configure the same file to use break out cables on certain ports.
.. code-block:: text
port_mode_1=4x10g # configure front port 1 to break out from 40G to 4x10G
OF-DPA service needs to be restarted after modifying this configuration.
QCT
---
- OF-DPA Image
- `QuantaMesh T3048-LY8
<https://raw.githubusercontent.com/onfsdn/atrium-docs/master/16A/ONOS/builds/ofdpa-ag7648_0.3.0.5.6_amd64.deb>`_
**Checksum**: *sha256:f8201530b1452145c1a0956ea1d3c0402c3568d090553d0d7b3c91a79137da9e*
- `QuantaMesh T7032-IX1 / IX1B
<https://raw.githubusercontent.com/onfsdn/atrium-docs/master/16A/ONOS/builds/ofdpa-ix1_0.3.0.5.0-EA5-qct-01.00_amd64.deb>`_
**Checksum**: *sha256:278b8ffed8a8fc705a1b60d16f8e70377e78342a27a11568a1d80b1efd706a46*
- **Start OF-DPA and OpenFlow agent**
- Please refer to `Use launcher app`_
- Configure Port Speed and Breakout
The command ``client_drivshell`` can be used to configure the port speed.
Use the parameter ``ps`` to list all ports or ``ps <port number>`` to list
one specific port.
.. code-block:: console
# client_drivshell ps 1
Calling ofdpaBcmCommand rpc with command = "ps 1 ".
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
xe0( 1) down 10G FD SW No Forward Untag F SFI 9412
Returned from ofdpaBcmCommand rpc with rc = 0.
Then use the parameter ``port <port number> sp=<port speed>`` to change the
port speed.
.. code-block:: console
# client_drivshell port xe0 sp=1000
Calling ofdpaBcmCommand rpc with command = "port xe0 sp=1000 ".
Returned from ofdpaBcmCommand rpc with rc = 0.
# client_drivshell ps 1
Calling ofdpaBcmCommand rpc with command = "ps 1 ".
ena/ speed/ link auto STP lrn inter max loop
port link duplex scan neg? state pause discrd ops face frame back
xe0( 1) down 1G FD SW No Forward Untag F GMII 9412
Returned from ofdpaBcmCommand rpc with rc = 0.
Delta
-----
- OF-DPA Image
- `Delta AG7648
<https://raw.githubusercontent.com/onfsdn/atrium-docs/master/16A/ONOS/builds/ofdpa-ly8_0.3.0.5.0-EA5-qct-01.01_amd64.deb>`_
**Checksum**: *sha256:ddfc13cb98ca47291dce5e6938b1d65f0b99bbe77f0585e36ac0007017397f23*
- **Start OF-DPA and OpenFlow agent**
- Please refer to `Use launcher app`_
- Special instructions to install ONL
Make sure ``/etc/machine.conf`` looks like the following in ONIE before
running ONL installation script:
.. code-block:: text
onie_platform=x86_64-delta_<platform name>-r0
onie_machine=delta_<platform name>
After the installation of ONL, if you don't see '/usr/bin' in your PATH
variable, please run the following command:
.. code-block:: console
# export PATH=$PATH:/usr/bin
Useful Information
==================
OF-DPA Commands
---------------
There are some useful OF-DPA commands under ``/usr/bin/``
.. code-block:: text
client_cfg_purge
client_debugcomp
client_drivshell
client_flowtable_dump
client_meter_dump
client_port_table_dump
client_tunnel_dump
client_classcolortable_dump
client_debuglvl
client_event
client_grouptable_dump
client_oam_dump
client_queue_config
ONL Boot Mode
-------------
OFDPA offers two boot mode: **INSTALLED** and **SWI**.
- In **INSTALLED** mode, ONL mounts the root filesystem from ``/dev/sdb7``
which is a flash drive that persists everything even during a power cycle.
- In **SWI** mode, ONL will load the root filesystem from a read-only image
(``*.swi``) and put the modified files in an copy-on-write overlay filesystem.
The change will not be persisted during a power cycle.
The pros and cons are obvious. INSTALLED mode is more convenient while SWI
mode is more error-safe.
The boot mode will be determined by which image we used install ONL. We use the
**INSTALLED** mode in this instruction for simplicity. But we can still change
it after the installation. Here's the instruction:
.. code-block:: console
# mount /mnt/onl/boot -o remount,rw
# sed -i 's/BOOTMODE=INSTALLED/BOOTMODE=SWI/g' /mnt/onl/boot/boot-config
# reboot
Persistence Mechanism
---------------------
INSTALLED mode already persists everything for you. This section is mainly for
SWI mode.
The mechanism to persist files on the switch is different from ONL 1.x to ONL
2.x. Following are the steps required to persist a file (e.g. OFDPA package)
in ONL 2.x.
- Files put in **/mnt/onl/data** will be persisted automatically.
- To install a deb package during start-up, put the deb file under
**/mnt/onl/data/install-debs** folder and create a plain text file
**/mnt/onl/data/install-debs/list** with all the filename of the deb (e.g.
``ofdpa_3.0.5.5+accton1.7-1_amd64.deb``)
- To execute some command during start-up, put the command in
**/mnt/onl/data/rc.boot**
.. code-block:: bash
# set static ip and route (dhcp by default)
echo 'ip addr add 10.128.0.203/16 dev ma1' >> /mnt/onl/data/rc.boot
echo 'ip route add default via 10.128.0.1' >> /mnt/onl/data/rc.boot
# grant executable permission
chmod a+x /mnt/onl/data/rc.boot
See `PersistWorkflow.md
<https://github.com/opencomputeproject/OpenNetworkLinux/blob/master/docs/PersistWorkflow.md>`_
for more detail.
Build a Customized ONL Image
----------------------------
Sometimes we need to build our own ONL image from source to include some extra
files. (The most common case is a modified /etc/network/interfaces).
The instruction of build process has already been well-documented in ONL repo
`Building.md
<https://github.com/opencomputeproject/OpenNetworkLinux/blob/master/docs/Building.md>`_.
But you might find it a little bit tricky to inject some extra files.
To do that, you need to put the files under
**$ONL_ROOT/builds/any/rootfs/jessie/common/overlay/** and then run the make
command again.
Recovery from a Faulty ONL Install
----------------------------------
If, for some reason, the ONL install process fails, you may be brought to the
grub rescue prompt upon reboot.
You may or may not find system files, or even basic grub rescue commands (i.e.
'help').
There are two options for returning to a (known working) ONIE prompt.
1. **Reinstaller** - You should be able to acquire an ISO image for resetting
the firmware to factory default from your switch vendor. Once you have the
ISO, you can either use PXE or a live USB to boot the switch into the image.
2. **Manually boot to ONIE** - If the files are there, you can manually
configure GRUB to load the necessary modules to boot back into ONIE.
.. code-block:: console
# This should be the partition on the ONIE partition on the AS6712.
# It might be hd1 or hd0. Change appropriately.
grub rescue> ls (hd0,gpt2)/
./ ../ lost+found/ onie/ grub/ grubenv
# These instructions will load the kernel and ONIE initrd.
grub rescue> set prefix=(hd0,gpt2)/grub
grub rescue> set root=(hd0,gpt2)
grub rescue> insmod normal
grub rescue> insmod linux
grub rescue> ls /onie
./ ../ vmlinuz-3.2.35-onie initrd.img-3.2.35-onie tools/ grub/ grub.d/ config/
# if the ",115200n8" is omitted, baud rate defaults to 9600.
grub rescue> linux /onie/vmlinuz-3.2.35-onie console=tty0 console=ttyS1,115200n8
grub rescue> initrd /onie/initrd.img-3.2.35-onie
# The system will not boot into ONIE and you can recover or re-install from there.
grub rescue> boot
Once back at the ONIE prompt, you can try to install ONL by following the same
steps again.
Connect to Switch in Listen Mode
--------------------------------
To connect to the switch in Listen Mode using **ovs-ofctl**, you can use
commands such as:
.. code-block:: console
$ ovs-ofctl -O OpenFlow13 show tcp:<ip>:<port>
$ ovs-ofctl -O OpenFlow13 dump-flows tcp:<ip>:<port>
$ ovs-ofctl -O OpenFlow13 dump-groups tcp:<ip>:<port>
$ ovs-ofctl -O OpenFlow13 add-flow tcp:<ip>:<port> table=60,priority=40000,eth_type=0x0800,ip_dst=55.55.55.55,actions=controller
For more command, please see ``ovs-ofctl --help`` or the post `OpenvSwitch
ovs-ofctl and OF-DPA
<https://blog.pichuang.com.tw/20170106-ovs-ofctl-and-ofdpa/>`_.
Reference
---------
- `ONL/OF-DPA installation guide by Edgecore Networks
<https://www.youtube.com/watch?v=mCUtkIc_hVI>`_
- `ONL/OF-DPA cheat sheet by Phil Huang
<https://blog.pichuang.com.tw/20170104-ofdpa-with-onl-cheat-sheet/>`_