[VOL-2875] Documentation update
- Updated the main landing page and overview documentation
- Added the lab setup (copied from CORD docs)
- Use forked sphinx-multiversion to publish docs, which allows versions
to be listed at bottom of sidebar
- Updated logo and favicon, fixed CSS to make logo legible
- Use VERSION file to set the version in the sidebar
- Add more words to dictionary
- removed reload functionality that is nonworking in Sphinx 2.x
- Fixed lint/linkcheck issues
Change-Id: I032e67d76393778fc697944a6d5df9c8cdacbbc4
diff --git a/overview/contribute.rst b/overview/contribute.rst
deleted file mode 100644
index 0d4c382..0000000
--- a/overview/contribute.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-How to contribute
-=================
-
-Hello and welcome!
-
-If you want to contribute to VOLTHA, please don't hesitate to contact us!
-The best ways to do so are:
-
-- `Slack <https://slackin.opencord.org>`_
-- `Mailing List <https://groups.google.com/a/opencord.org/forum/#!forum/voltha-discuss>`_
-
-Ongoing Brigades
-----------------
-
-- `BBSim and Scale <https://jira.opencord.org/secure/Dashboard.jspa?selectPageId=10902>`_
-- `Stabilization <https://jira.opencord.org/secure/Dashboard.jspa?selectPageId=10801>`_
-- `BAL 3.x <https://jira.opencord.org/secure/Dashboard.jspa?selectPageId=10700>`_
-- `Multicast and Multi-TCONT <https://jira.opencord.org/secure/Dashboard.jspa?selectPageId=10800>`_
-- `POD Management <https://jira.opencord.org/secure/Dashboard.jspa?selectPageId=10901>`_
-- `ONOS FCAPS <https://jira.opencord.org/secure/Dashboard.jspa?selectPageId=10903>`_
-- `Test Automation <https://jira.opencord.org/secure/Dashboard.jspa?selectPageId=11400>`_
diff --git a/overview/deploy_virtual.rst b/overview/dev_virtual.rst
similarity index 61%
rename from overview/deploy_virtual.rst
rename to overview/dev_virtual.rst
index 6e4445f..41fd0a3 100644
--- a/overview/deploy_virtual.rst
+++ b/overview/dev_virtual.rst
@@ -1,8 +1,13 @@
-Deploy a virtual VOLTHA POD
-===========================
+.. _dev_virtual:
+
+Developing code with a virtual VOLTHA POD
+=========================================
A guide to install a virtual POD. This is generally used to gain familiarity with the
-environment or to do development.
+environment or for development purposes.
+
+Most of the `helm` and `voltctl` commands found in the :ref:`pod_physical` also
+apply in the virtual environment.
Quickstart
----------
@@ -16,12 +21,6 @@
TYPE=minimal WITH_RADIUS=y CONFIG_SADIS=y ONLY_ONE=y WITH_BBSIM=y ./voltha up
-TLDR;
------
-
-Below are the complete steps to install a physical cluster.
-Most of the steps are the same as :ref:`deploy_physical`.
-
Create Kubernetes Cluster
-------------------------
@@ -84,3 +83,54 @@
.. code:: bash
voltctl device enable $(voltctl device list --filter Type~openolt -q)
+
+
+Developing changes on a virtual pod
+-----------------------------------
+
+We assume you already have downloaded the git repository you want to modify and
+your IDE is correctly set up.
+
+In this tutorial we are going to use ``voltha-go`` as an example.
+
+Make the required changes in the ``voltha-go`` repository (the process
+is the same for all the VOLTHA repositories) to the code and build the
+docker images and push them on your private dockerhub account:
+
+.. code:: bash
+
+ $ DOCKER_REGISTRY="matteoscandolo/" DOCKER_TAG="dev" make docker-build
+
+Then push them to your docker hub account:
+
+.. code:: bash
+
+ $ DOCKER_REGISTRY="matteoscandolo/" DOCKER_TAG="dev" make docker-push
+
+Deploy your changes on kind-voltha
+----------------------------------
+
+Create a copy of the `minimal-values.yaml` file:
+
+.. code:: bash
+
+ $ cp minimal-values.yaml dev-values.yaml
+
+And edit that file so that it contains the appropriate values for the images you want to try,
+for example uncomment and change these two lines (mind the indentation):
+
+.. code:: yaml
+
+ images:
+ ro_core:
+ repository: matteoscandolo/voltha-ro-core
+ tag: dev
+ rw_core:
+ repository: matteoscandolo/voltha-rw-core
+ tag: dev
+
+Then redeploy `kind-voltha` using that the edited value file:
+
+.. code:: bash
+
+ $ DEPLOY_K8S=no ./voltha down && DEPLOY_K8S=no EXTRA_HELM_FLAGS="-f dev-values.yaml" ./voltha up
diff --git a/overview/development_loop.rst b/overview/development_loop.rst
deleted file mode 100644
index 34ab2d7..0000000
--- a/overview/development_loop.rst
+++ /dev/null
@@ -1,54 +0,0 @@
-Development Loop
-================
-
-Start with `kind-voltha <https://github.com/ciena/kind-voltha>`_. installed.
-
-Make changes
-------------
-
-We assume you already have downloaded the repository you want to modify and your IDE is correctly set up.
-
-In this tutorial we are going to use ``voltha-go`` as an example.
-
-Make the required changes in the ``voltha-go`` repository (the process
-is the same for all the VOLTHA repositories) to the code and build the
-docker images and push them on your private dockerhub account:
-
-.. code:: bash
-
- $ DOCKER_REGISTRY="matteoscandolo/" DOCKER_TAG="dev" make docker-build
-
-Then push them to your docker hub account:
-
-.. code:: bash
-
- $ DOCKER_REGISTRY="matteoscandolo/" DOCKER_TAG="dev" make docker-push
-
-Deploy your changes on kind-voltha
-----------------------------------
-
-Create a copy of the `minimal-values.yaml` file:
-
-.. code:: bash
-
- $ cp minimal-values.yaml dev-values.yaml
-
-And edit that file so that it contains the appropriate values for the images you want to try,
-for example uncomment and change these two lines (mind the indentation):
-
-.. code:: yaml
-
- images:
- ro_core:
- repository: matteoscandolo/voltha-ro-core
- tag: dev
- rw_core:
- repository: matteoscandolo/voltha-rw-core
- tag: dev
-
-Then redeploy `kind-voltha` using that value file:
-
-.. code:: bash
-
- $ DEPLOY_K8S=no ./voltha down && DEPLOY_K8S=no EXTRA_HELM_FLAGS="-f dev-values.yaml" ./voltha up
-
diff --git a/overview/lab_setup.rst b/overview/lab_setup.rst
new file mode 100644
index 0000000..5ec8054
--- /dev/null
+++ b/overview/lab_setup.rst
@@ -0,0 +1,195 @@
+.. _lab_setup:
+
+Hardware Setup of a VOLTHA Test Pod
+===================================
+
+Overview
+--------
+
+In a testing setup rather than using a real RG or BNG emulated ones are
+deployed on a Linux development server:
+
+- The ``RG`` can be emulated by an ``lxc`` container (from now on ``client``)
+- The ``BNG`` can be emulated by a Linux server
+- The ``AggSwitch`` is optional in a VOLTHA deployment.
+
+.. figure:: ../_static/voltha_lab_setup.png
+ :alt: VOLTHA Lab Setup
+
+ VOLTHA Lab Setup
+
+*The image above represents the data plane connections in a LAB setup.
+It does not include the kubernetes cluster for simplicity.*
+
+What you’ll need to emulate E2E traffic is:
+
+- 1 x86 server with Ubuntu 16.04 and at least the following interfaces:
+
+ - 1 1G Ethernet port
+ - 1 10G Ethernet port (this can be a second 1G interface as long as you have a media converter)
+
+Setting up a client
+-------------------
+
+The first thing you need to do is to install ``lxd`` on your server. To do that
+you can follow `this guide
+<http://tutorials.ubuntu.com/tutorial/tutorial-setting-up-lxd-1604>`_
+
+Once ``lxd`` is successfully installed you need to initialize it with:
+
+.. code:: bash
+
+ lxd init
+
+we recommend to use all the provided default values.
+
+Once ``lxd`` is initialized you can create a container and assign a physical
+Ethernet interface to the container:
+
+.. code:: bash
+
+ lxc launch ubuntu:16.04 <name>
+ lxc config device add <name> eth1 nic name=eth1 parent=<physical-intf> nictype=physical
+
+Where:
+
+- ``name`` is the desired container name. The convention used to identify which
+ RG container is connected to an ONU is to use the ONU serial number as the
+ lxc container name.
+
+- ``physical-intf`` is the name of the interface on the server where the ONU
+ is physically connected
+
+Once the container is created you can check it's state with with ``lxc list``:
+
+.. code:: bash
+
+ +---------------+---------+--------------------+------+------------+-----------+
+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+ +---------------+---------+--------------------+------+------------+-----------+
+ | voltha-client | RUNNING | 10.63.3.144 (eth0) | | PERSISTENT | 0 |
+ +---------------+---------+--------------------+------+------------+-----------+
+
+Please make sure the container has an assigned IP or we it won’t be able
+to login and install the ``wpasupplicant`` tool inside the RG.
+
+Once the container is running you need to enter it for configuration. To access
+the container run: ``lxc exec <name> /bin/bash``
+
+Once inside:
+
+.. code:: bash
+
+ # activate the interface
+ ip link set eth1 up
+ # install the wpasupplicant tool
+ apt update
+ apt install wpasupplicant
+
+..
+
+ NOTE: ``wpasupplicant`` is a Linux tool to perform 802.1X authentication.
+ `wpasupplicant documentation can be found here
+ <https://help.ubuntu.com/community/WifiDocs/WPAHowTo>`_.
+
+Create a configuration file for ``wpasupplicant`` in
+``/etc/wpa_supplicant/wpa_supplicant.conf`` with the content:
+
+.. code:: text
+
+ ctrl_interface=/var/run/wpa_supplicant
+ eapol_version=1
+ ap_scan=0
+ fast_reauth=1
+ network={
+ key_mgmt=WPA-EAP
+ eap=MD5
+ identity="user"
+ password="password"
+ ca_cert="/etc/cert/cacert.pem"
+ client_cert="/etc/cert/client.pem"
+ private_key="/etc/cert/client.key"
+ private_key_passwd="whatever"
+ eapol_flags=3
+ }
+
+..
+
+ NOTE: The configuration in this file is not really important if you are
+ using the ``freeradius`` server provided as part of the VOLTHA helm charts.
+ Do not worry if the certificates do not exist, they won’t affect
+ authentication as that is password based.
+
+At this point you’ll be able kickoff the authentication process (by
+sending ``EAPOL`` packets into the system) with the command:
+
+.. code:: bash
+
+ wpa_supplicant -i eth1 -Dwired -c /etc/wpa_supplicant/wpa_supplicant.conf
+
+If everything has been set up correctly, you should see output similar to this
+in the VOLTHA logs:
+
+.. code:: bash
+
+ cord@node1:~$ kubectl logs -f -n voltha vcore-0 | grep -E "packet_indication|packet-in" | grep 888e
+ 20180912T003237.453 DEBUG MainThread adapter_agent.send_packet_in {adapter_name: openolt, logical_port_no: 16, logical_device_id: 000100000a5a0097, packet: 0180c200000390e2ba82fa8281000ffb888e01000009020100090175736572000000000000000000000000000000000000000000000000000000000000000000, event: send-packet-in, instance_id: compose_voltha_1_1536712228, vcore_id: 0001}
+
+Setting up an emulated BNG on Linux
+-----------------------------------
+
+The emulated BNG needs to perform only two operations: ``DHCP`` and
+``NAT``.
+
+To setup a NAT router on an Ubuntu 16.04 server you can look at this
+tutorial:
+https://www.nairabytes.net/81-linux/418-how-to-set-up-a-nat-router-on-ubuntu-server-16-04
+
+To install a DHCP server you can follow this tutorial:
+http://nairabytes.net/81-linux/415-how-to-install-a-dhcp-server-in-ubuntu-server-16-04
+
+Once the ``DHCP`` server is installed, you need to configure it.
+
+Create Q-in-Q interfaces
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+On the interface that connects to the Agg Switch (upstream) you are
+going to receive double tagged traffic, so you’ll need to create
+interfaces to received it.
+
+Supposing that your subscriber is using ``s_tag=111``, ``c_tag=222`` and
+the upstream interface name is ``eth2`` you can use this commands to
+create it:
+
+.. code:: bash
+
+ ip link set eth2 up
+ ip link add link eth2 name eth2.111 type vlan id 111
+ ip link set eth2.111 up
+ ip link add link eth2.111 name eth2.111.222 type vlan id 222
+ ip link set eth2.111.222 up
+ ip addr add 10.11.2.254/24 dev eth2.111.222
+
+Then you’ll need to tell the ``dhcp`` server to listen on that
+interface, you can do that by editing the file
+``/etc/default/isc-dhcp-server`` so that it looks like:
+
+.. code:: bash
+
+ INTERFACES="eth2.111.222"
+
+..
+
+ NOTE that you can list multiple interfaces, separated by spaces, in
+ case you have multiple subscribers in your setup
+
+In the ``/etc/dhcp/dhcpd.conf`` config file, configure the IP address
+range to assign to the double tagged interface:
+
+.. code:: text
+
+ subnet 10.11.2.0 netmask 255.255.255.0 {
+ range 10.11.2.1 10.11.2.100;
+ option routers 10.11.2.254;
+ option domain-name-servers 8.8.8.8;
+ }
diff --git a/overview/physical_layout.rst b/overview/physical_layout.rst
deleted file mode 100644
index 850a64a..0000000
--- a/overview/physical_layout.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. _Physical_Layout:
-
-Build a physical POD
-====================
-
-Coming Soon.
-
-For the time being you can refer to the `SEBA LAB Setup guide
-<https://guide.opencord.org/profiles/seba/lab-setup.html#configuring-a-lab-setup>`_,
-just remember that the ``AggSwitch`` is optional in a VOLTHA deployment.
-
diff --git a/overview/deploy_physical.rst b/overview/pod_physical.rst
similarity index 99%
rename from overview/deploy_physical.rst
rename to overview/pod_physical.rst
index 1758f03..b05b4c3 100644
--- a/overview/deploy_physical.rst
+++ b/overview/pod_physical.rst
@@ -1,4 +1,4 @@
-.. _deploy_physical:
+.. _pod_physical:
Deploy a physical VOLTHA POD
============================
@@ -7,7 +7,7 @@
----------
The quickstart assumes you POD is already correctly cabled, if not you can
-refer to :ref:`Physical_Layout`
+refer to :ref:`lab_setup`
Requires:
diff --git a/overview/ubuntu_dev_env.rst b/overview/ubuntu_dev_env.rst
new file mode 100644
index 0000000..36b9901
--- /dev/null
+++ b/overview/ubuntu_dev_env.rst
@@ -0,0 +1,510 @@
+Setting up an Ubuntu Development Environment
+============================================
+
+These notes describe the checking out and building from the multiple
+gerrit repositories needed to run a VOLTHA 2.x environment with
+docker-compose. Starting point is a basic Ubuntu 16.04 or 18.04
+installation with internet access.
+
+These notes are intended for iterative development only. The testing
+environments and production environments will run a Kubernetes and Helm
+based deployment.
+
+Install prerequisites
+---------------------
+
+Patch and updated
+
+.. code:: sh
+
+ sudo apt update
+ sudo apt dist-upgrade
+
+Add ``docker-ce`` apt repo and install docker and build tools
+
+.. code:: sh
+
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
+ sudo apt update
+ sudo apt install build-essential docker-ce git
+
+Install current ``docker-compose``. Older versions may cause docker
+build problems:
+https://github.com/docker/docker-credential-helpers/issues/103
+
+.. code:: sh
+
+ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
+ sudo chmod 755 /usr/local/bin/docker-compose
+
+Install the Golang ppa apt repository and install **golang 1.13**.
+
+.. code:: sh
+
+ sudo add-apt-repository ppa:longsleep/golang-backports
+ sudo apt update
+ sudo apt install golang-1.13
+
+Setup environment
+~~~~~~~~~~~~~~~~~
+
+Setup a local Golang and docker-compose environment, verifying the
+golang-1.13 binaries are in your path. Also add your local ``GOPATH``
+bin folder to ``PATH`` Add export statements to your ``~/.profile`` to
+persist.
+
+.. code:: sh
+
+ mkdir $HOME/source
+ mkdir $HOME/go
+ export GO111MODULE=on
+ export GOPATH=$HOME/go
+ export DOCKER_TAG=latest
+ export PATH=$PATH:/usr/lib/go-1.13/bin:$GOPATH/bin
+ go version
+
+Allow your current non-root user ``$USER`` docker system access
+
+.. code:: sh
+
+ sudo usermod -a -G docker $USER
+
+Logout/Login to assume new group membership needed for running docker as
+non-root user and verify any environment variables set in
+``~/.profile``.
+
+Checkout source and build images
+--------------------------------
+
+VOLTHA 2.x Core Containers
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Checkout needed source from gerrit. Build the ``voltha-rw-core`` docker
+image.
+
+.. code:: sh
+
+ cd ~/source/
+ git clone https://gerrit.opencord.org/voltha-go.git
+ cd ~/source/voltha-go
+ make build
+
+For more details regarding building and debugging the 2.x core outside
+of Docker refer to voltha-go BUILD.md.
+
+https://github.com/opencord/voltha-go/blob/master/BUILD.md
+
+VOLTHA 2.x OpenOLT Container
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Checkout needed source from gerrit. Build the ``voltha-openolt-adapter``
+docker image.
+
+.. code:: sh
+
+ cd ~/source/
+ git clone https://gerrit.opencord.org/voltha-openolt-adapter.git
+ cd ~/source/voltha-openolt-adapter/
+ make build
+
+VOLTHA 2.x OpenONU Container
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Checkout needed source from gerrit. Build the ``voltha-openonu-adapter``
+docker image.
+
+.. code:: sh
+
+ cd ~/source/
+ git clone https://gerrit.opencord.org/voltha-openonu-adapter.git
+ cd ~/source/voltha-openonu-adapter/
+ make build
+
+VOLTHA 2.x OFAgent
+~~~~~~~~~~~~~~~~~~
+
+Checkout needed source from gerrit. Build the ``voltha-ofagent`` docker
+image.
+
+.. code:: sh
+
+ cd ~/source/
+ git clone https://gerrit.opencord.org/ofagent-go.git
+ cd ~/source/ofagent-go/
+ make docker-build
+
+ONOS Container with VOLTHA Compatible Apps
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+By default the standard ONOS docker image does not contain nor start any
+apps needed by VOLTHA. If you use the standard image then you need to
+use the ONOS restful API to load needed apps separately.
+
+For development convenience there is an ONOS docker image build that
+adds in the current compatible VOLTHA apps. Checkout and build the ONOS
+image with added ONOS apps (olt, aaa, sadis, dhcpl2relay, and kafka).
+
+.. code:: sh
+
+ cd ~/source/
+ git clone https://gerrit.opencord.org/voltha-onos.git
+ cd ~/source/voltha-onos
+ make build
+
+Install voltctl VOLTHA Command Line Management Tool
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+A working Golang build environment is required as ``voltctl`` is build
+and run directly from the host. Build the ``voltctl`` executable and
+install in ~/go/bin which should already be in your $PATH
+
+.. code:: sh
+
+ cd ~/source/
+ git clone https://gerrit.opencord.org/voltctl.git
+ cd ~/source/voltctl
+ make build
+ make install
+
+Configure the ``voltctl`` environment configuration files
+``~/.volt/config`` and ``~/.volt/command_options`` to point at the local
+``voltha-rw-core`` instance that will be running.
+
+.. code:: sh
+
+ mkdir ~/.volt/
+
+ cat << EOF > ~/.volt/config
+ apiVersion: v2
+ server: localhost:50057
+ tls:
+ useTls: false
+ caCert: ""
+ cert: ""
+ key: ""
+ verify: ""
+ grpc:
+ timeout: 10s
+ EOF
+
+ cat << EOF > ~/.volt/command_options
+ device-list:
+ format: table{{.Id}}\t{{.Type}}\t{{.Root}}\t{{.ParentId}}\t{{.SerialNumber}}\t{{.Address}}\t{{.AdminState}}\t{{.OperStatus}}\t{{.ConnectStatus}}\t{{.Reason}}
+ order: -Root,SerialNumber
+
+ device-ports:
+ order: PortNo
+
+ device-flows:
+ order: Priority,EthType
+
+ logical-device-list:
+ order: RootDeviceId,DataPathId
+
+ logical-device-ports:
+ order: Id
+
+ logical-device-flows:
+ order: Priority,EthType
+
+ adapter-list:
+ order: Id
+
+ component-list:
+ order: Component,Name,Id
+
+ loglevel-get:
+ order: ComponentName,PackageName,Level
+
+ loglevel-list:
+ order: ComponentName,PackageName,Level
+ EOF
+
+
+Install VOLTHA bbsim olt/onu Simulator (Optional)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you do not have physical OLT/ONU hardware you can build a simulator.
+
+.. code:: sh
+
+ cd ~/source/
+ git clone https://gerrit.opencord.org/bbsim.git
+ cd ~/source/bbsim
+ make docker-build
+
+Test
+----
+
+Startup
+~~~~~~~
+
+Run the combined docker-compose yaml configuration file that starts the
+core, its dependent systems (etcd, zookeeper, and kafka) and the openonu
+and openolt adapters. Export the ``DOCKER_HOST_IP`` environment variable
+to your non-localhost IP address needed for inter-container
+communication. This can be the IP assigned to ``eth0`` or the
+``docker0`` bridge (typically 172.17.0.1)
+
+For convenience you can also export ``DOCKER_TAG`` to signify the docker
+images tag you would like to use. Though for typical development you may
+have to edit ``compose/system-test.yml`` to override the specific docker
+image ``DOCKER_TAG`` needed. The ``DOCKER_REGISTRY`` and
+``DOCKER_REPOSITORY`` variables are not needed unless you wish to
+override the docker image path. See the ``system-test.yml`` file for
+details on the docker image path creation string.
+
+.. code:: sh
+
+ export DOCKER_HOST_IP=172.17.0.1
+ export DOCKER_TAG=latest
+
+ cd ~/source/voltha-go
+ docker-compose -f compose/system-test.yml up -d
+
+
+ WARNING: The DOCKER_REGISTRY variable is not set. Defaulting to a blank string.
+ WARNING: The DOCKER_REPOSITORY variable is not set. Defaulting to a blank string.
+ Creating network "compose_default" with driver "bridge"
+ Pulling zookeeper (wurstmeister/zookeeper:latest)...
+ latest: Pulling from wurstmeister/zookeeper
+ a3ed95caeb02: Pull complete
+ ef38b711a50f: Pull complete
+ e057c74597c7: Pull complete
+ 666c214f6385: Pull complete
+ c3d6a96f1ffc: Pull complete
+ 3fe26a83e0ca: Pull complete
+ 3d3a7dd3a3b1: Pull complete
+ f8cc938abe5f: Pull complete
+ 9978b75f7a58: Pull complete
+ 4d4dbcc8f8cc: Pull complete
+ 8b130a9baa49: Pull complete
+ 6b9611650a73: Pull complete
+ 5df5aac51927: Pull complete
+ 76eea4448d9b: Pull complete
+ 8b66990876c6: Pull complete
+ f0dd38204b6f: Pull complete
+ Digest: sha256:7a7fd44a72104bfbd24a77844bad5fabc86485b036f988ea927d1780782a6680
+ Status: Downloaded newer image for wurstmeister/zookeeper:latest
+ Pulling kafka (wurstmeister/kafka:2.11-2.0.1)...
+ 2.11-2.0.1: Pulling from wurstmeister/kafka
+ 4fe2ade4980c: Pull complete
+ 6fc58a8d4ae4: Pull complete
+ 819f4a45746c: Pull complete
+ a3133bc2e3e5: Pull complete
+ 72f0dc369677: Pull complete
+ 1e1130fc942d: Pull complete
+ Digest: sha256:20d08a6849383b124bccbe58bc9c48ec202eefb373d05e0a11e186459b84f2a0
+ Status: Downloaded newer image for wurstmeister/kafka:2.11-2.0.1
+ Pulling etcd (quay.io/coreos/etcd:v3.2.9)...
+ v3.2.9: Pulling from coreos/etcd
+ 88286f41530e: Pull complete
+ 2fa4a2c3ffb5: Pull complete
+ 539b8e6ccce1: Pull complete
+ 79e70e608afa: Pull complete
+ f1bf8f503bff: Pull complete
+ c4abfc27d146: Pull complete
+ Digest: sha256:1913dd980d55490fa50640bbef0f4540d124e5c66d6db271b0b4456e9370a272
+ Status: Downloaded newer image for quay.io/coreos/etcd:v3.2.9
+ Creating compose_kafka_1 ... done
+ Creating compose_cli_1 ... done
+ Creating compose_adapter_openolt_1 ... done
+ Creating compose_rw_core_1 ... done
+ Creating compose_adapter_openonu_1 ... done
+ Creating compose_etcd_1 ... done
+ Creating compose_onos_1 ... done
+ Creating compose_ofagent_1 ... done
+ Creating compose_zookeeper_1 ... done
+
+Verify containers have continuous uptime and no restarts
+
+.. code:: sh
+
+ $ docker-compose -f compose/system-test.yml ps
+ WARNING: The DOCKER_REGISTRY variable is not set. Defaulting to a blank string.
+ WARNING: The DOCKER_REPOSITORY variable is not set. Defaulting to a blank string.
+ Name Command State Ports
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------
+ compose_adapter_openolt_1 /app/openolt --kafka_adapt ... Up 0.0.0.0:50062->50062/tcp
+ compose_adapter_openonu_1 /voltha/adapters/brcm_open ... Up
+ compose_etcd_1 etcd --name=etcd0 --advert ... Up 0.0.0.0:2379->2379/tcp, 0.0.0.0:32929->2380/tcp, 0.0.0.0:32928->4001/tcp
+ compose_kafka_1 start-kafka.sh Up 0.0.0.0:9092->9092/tcp
+ compose_ofagent_1 /app/ofagent --controller= ... Up
+ compose_onos_1 ./bin/onos-service server Up 6640/tcp, 0.0.0.0:6653->6653/tcp, 0.0.0.0:8101->8101/tcp, 0.0.0.0:8181->8181/tcp, 9876/tcp
+ compose_rw_core_1 /app/rw_core -kv_store_typ ... Up 0.0.0.0:50057->50057/tcp
+ compose_zookeeper_1 /bin/sh -c /usr/sbin/sshd ... Up 0.0.0.0:2181->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
+
+.. code:: sh
+
+ $ docker ps
+ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+ 08a0e7a1ee5c voltha-openolt-adapter:latest "/app/openolt --kafk…" 31 seconds ago Up 27 seconds 0.0.0.0:50062->50062/tcp compose_adapter_openolt_1
+ 1f364cf7912d wurstmeister/zookeeper:latest "/bin/sh -c '/usr/sb…" 31 seconds ago Up 27 seconds 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp compose_zookeeper_1
+ ab1822baed41 wurstmeister/kafka:2.11-2.0.1 "start-kafka.sh" 31 seconds ago Up 24 seconds 0.0.0.0:9092->9092/tcp compose_kafka_1
+ 22a4fe4b2eb4 voltha-ofagent-go:latest "/app/ofagent --cont…" 31 seconds ago Up 23 seconds compose_ofagent_1
+ d34e1c976db5 voltha-rw-core:latest "/app/rw_core -kv_st…" 31 seconds ago Up 26 seconds 0.0.0.0:50057->50057/tcp compose_rw_core_1
+ f6ef52975dc0 voltha-openonu-adapter:latest "/voltha/adapters/br…" 31 seconds ago Up 29 seconds compose_adapter_openonu_1
+ 7ce8bcf7436c voltha-onos:latest "./bin/onos-service …" 31 seconds ago Up 25 seconds 0.0.0.0:6653->6653/tcp, 0.0.0.0:8101->8101/tcp, 6640/tcp, 9876/tcp, 0.0.0.0:8181->8181/tcp compose_onos_1
+ 60ac172726f5 quay.io/coreos/etcd:v3.4.1 "etcd --name=etcd0 -…" 31 seconds ago Up 28 seconds 0.0.0.0:2379->2379/tcp, 0.0.0.0:32931->2380/tcp, 0.0.0.0:32930->4001/tcp compose_etcd_1
+
+Verify Cluster Communication
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Use ``voltctl`` commands to verify core and adapters are running.
+
+.. code:: sh
+
+ voltctl adapter list
+ ID VENDOR VERSION SINCELASTCOMMUNICATION
+ brcm_openomci_onu VOLTHA OpenONU 2.3.2-dev UNKNOWN
+ openolt VOLTHA OpenOLT 2.3.5-dev UNKNOWN
+
+List “devices” to verify no devices exist.
+
+.. code:: sh
+
+ voltctl device list
+ ID TYPE ROOT PARENTID SERIALNUMBER ADDRESS ADMINSTATE OPERSTATUS CONNECTSTATUS REASON
+
+At this point create/preprovision and enable an olt device and add flows
+via onos and ofagent.
+
+Physical OLT/ONU Testing with Passing Traffic
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Start a physical OLT and ONU. Tested with Edgecore OLT, Broadcom based
+ONU, and RG capable of EAPoL. Create/Preprovision the OLT and enable.
+The create command returns the device ID needed for enable and
+subsequent commands.
+
+**Add device to VOLTHA**
+
+.. code:: sh
+
+ $ voltctl device create -t openolt -H 10.64.1.206:9191
+ db87c4b48843bb99567d3d94
+
+ $ voltctl device enable db87c4b48843bb99567d3d94
+ db87c4b48843bb99567d3d94
+
+**Verify device state**
+
+.. code:: sh
+
+ $ voltctl device list
+ ID TYPE ROOT PARENTID SERIALNUMBER ADDRESS ADMINSTATE OPERSTATUS CONNECTSTATUS REASON
+ db87c4b48843bb99567d3d94 openolt true a82bb53678ae EC1721000221 10.64.1.206:9191 ENABLED ACTIVE REACHABLE
+ 082d7c2e628325ccc3336275 brcm_openomci_onu false db87c4b48843bb99567d3d94 ALPHe3d1cf57 unknown ENABLED ACTIVE REACHABLE omci-flows-pushed
+
+.. code:: sh
+
+ $ voltctl device port list db87c4b48843bb99567d3d94
+ PORTNO LABEL TYPE ADMINSTATE OPERSTATUS DEVICEID PEERS
+ 1048576 nni-1048576 ETHERNET_NNI ENABLED ACTIVE []
+ 536870912 pon-536870912 PON_OLT ENABLED ACTIVE [{082d7c2e628325ccc3336275 536870912}]
+ 536870913 pon-536870913 PON_OLT ENABLED ACTIVE []
+ 536870914 pon-536870914 PON_OLT ENABLED ACTIVE []
+ 536870915 pon-536870915 PON_OLT ENABLED ACTIVE []
+ 536870916 pon-536870916 PON_OLT ENABLED ACTIVE []
+ 536870917 pon-536870917 PON_OLT ENABLED ACTIVE []
+ 536870918 pon-536870918 PON_OLT ENABLED ACTIVE []
+ 536870919 pon-536870919 PON_OLT ENABLED ACTIVE []
+ 536870920 pon-536870920 PON_OLT ENABLED ACTIVE []
+ 536870921 pon-536870921 PON_OLT ENABLED ACTIVE []
+ 536870922 pon-536870922 PON_OLT ENABLED ACTIVE []
+ 536870923 pon-536870923 PON_OLT ENABLED ACTIVE []
+ 536870924 pon-536870924 PON_OLT ENABLED ACTIVE []
+ 536870925 pon-536870925 PON_OLT ENABLED ACTIVE []
+ 536870926 pon-536870926 PON_OLT ENABLED ACTIVE []
+ 536870927 pon-536870927 PON_OLT ENABLED ACTIVE []
+
+.. code:: sh
+
+ $ voltctl device port list 082d7c2e628325ccc3336275
+ PORTNO LABEL TYPE ADMINSTATE OPERSTATUS DEVICEID PEERS
+ 16 uni-16 ETHERNET_UNI ENABLED ACTIVE []
+ 17 uni-17 ETHERNET_UNI ENABLED DISCOVERED []
+ 18 uni-18 ETHERNET_UNI ENABLED DISCOVERED []
+ 19 uni-19 ETHERNET_UNI ENABLED DISCOVERED []
+ 20 uni-20 ETHERNET_UNI ENABLED DISCOVERED []
+ 536870912 PON port PON_ONU ENABLED ACTIVE [{db87c4b48843bb99567d3d94 536870912}]
+
+Verify ONOS device state and eventual EAPoL authentication. ONOS default
+Username is ``karaf``, Password is ``karaf``
+
+.. code:: sh
+
+ ssh -p 8101 karaf@localhost
+
+Display the device and ports discovered
+
+.. code:: sh
+
+ karaf@root > ports
+
+ id=of:0000a82bb53678ae, available=true, local-status=connected 4m27s ago, role=MASTER, type=SWITCH, mfr=VOLTHA Project, hw=open_pon, sw=open_pon, serial=EC1721000221, chassis=a82bb53678ae, driver=voltha, channelId=172.27.0.1:59124, managementAddress=172.27.0.1, protocol=OF_13
+ port=16, state=enabled, type=fiber, speed=0 , adminState=enabled, portMac=08:00:00:00:00:10, portName=ALPHe3d1cf57-1
+ port=17, state=disabled, type=fiber, speed=0 , adminState=enabled, portMac=08:00:00:00:00:11, portName=ALPHe3d1cf57-2
+ port=18, state=disabled, type=fiber, speed=0 , adminState=enabled, portMac=08:00:00:00:00:12, portName=ALPHe3d1cf57-3
+ port=19, state=disabled, type=fiber, speed=0 , adminState=enabled, portMac=08:00:00:00:00:13, portName=ALPHe3d1cf57-4
+ port=20, state=disabled, type=fiber, speed=0 , adminState=enabled, portMac=08:00:00:00:00:14, portName=ALPHe3d1cf57-5
+ port=1048576, state=enabled, type=fiber, speed=0 , adminState=enabled, portMac=a8:2b:b5:36:78:ae, portName=nni-1048576
+
+EAPoL may take up to 30 seconds to complete.
+
+.. code:: sh
+
+ karaf@root > aaa-users
+
+ of:0000a82bb53678ae/16: AUTHORIZED_STATE, last-changed=4m22s ago, mac=94:CC:B9:DA:AB:D1, subid=PON 1/1/3/1:2.1.1, username=94:CC:B9:DA:AB:D1
+
+**Provision subscriber flows**
+
+.. code:: sh
+
+ karaf@root > volt-add-subscriber-access of:0000a82bb53678ae 16
+
+ karaf@root > volt-programmed-subscribers
+
+ location=of:0000a82bb53678ae/16 tagInformation=UniTagInformation{uniTagMatch=0, ponCTag=20, ponSTag=11, usPonCTagPriority=-1, usPonSTagPriority=-1, dsPonCTagPriority=-1, dsPonSTagPriority=-1, technologyProfileId=64, enableMacLearning=false, upstreamBandwidthProfile='Default', downstreamBandwidthProfile='Default', serviceName='', configuredMacAddress='A4:23:05:00:00:00', isDhcpRequired=true, isIgmpRequired=false}
+
+After about 30 seconds the RG should attempt DHCP which should be
+visible in onos. At this point the RG should be able to pass database
+traffic via the ONU/OLT.
+
+.. code:: sh
+
+ karaf@root > dhcpl2relay-allocations
+
+ SubscriberId=ALPHe3d1cf57-1,ConnectPoint=of:0000a82bb53678ae/16,State=DHCPREQUEST,MAC=94:CC:B9:DA:AB:D1,CircuitId=PON 1/1/3/1:2.1.1,IP Allocated=29.29.206.20,Allocation Timestamp=2020-02-17T15:34:31.572746Z
+
+BBSIM Simulated OLT/ONU Testing Control Plane Traffic
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you do not have physical OLT/ONU hardware you can start VOLTHA
+containers and the bbsim olt/onu hardware simulator using a different
+docker-compose yaml file. Verify containers are running as above with
+the addition of the bbsim and radius server containers.
+
+.. code:: sh
+
+ export DOCKER_HOST_IP=172.17.0.1
+ export DOCKER_TAG=latest
+
+ cd ~/source/voltha-go
+ docker-compose -f compose/system-test-bbsim.yml up -d
+
+Create/Preprovision and enable similarly to the physical OLT above,
+providing the local bbsim IP and listening port
+
+.. code:: sh
+
+ voltctl device create -t openolt -H 172.17.0.1:50060
+ ece94c86e93c6e06dd0a544b
+
+ voltctl device enable ece94c86e93c6e06dd0a544b
+ ece94c86e93c6e06dd0a544b
+
+Proceed with the verification and ONOS provisioning commands similar to
+the physical OLT described above.