blob: 8c11c70a7e0a0876509a00220b57bd23d43a2cbf [file] [log] [blame]
Zack Williams16042b62020-03-29 22:03:16 -07001.. _lab_setup:
2
3Hardware Setup of a VOLTHA Test Pod
4===================================
5
6Overview
7--------
8
9In a testing setup rather than using a real RG or BNG emulated ones are
10deployed on a Linux development server:
11
12- The ``RG`` can be emulated by an ``lxc`` container (from now on ``client``)
13- The ``BNG`` can be emulated by a Linux server
Andrea Campanella882cfcc2021-02-04 10:53:57 +010014- The ``AggSwitch`` is mandatory if control of the OLT is done with ``in-band`` mode, while
15 optional if the OLT is controlled out of band, in this case the NNI port of the OLT will go directly
16 into the emulated BNG linux server NIC card.
Zack Williams16042b62020-03-29 22:03:16 -070017
18.. figure:: ../_static/voltha_lab_setup.png
19 :alt: VOLTHA Lab Setup
20
21 VOLTHA Lab Setup
22
23*The image above represents the data plane connections in a LAB setup.
Matteo Scandoloef5d6f42020-07-27 16:46:38 -070024It does not include the ``kubernetes`` cluster for simplicity, but the ``dev server``
25listed above can be one of your ``kubernetes`` nodes.*
Zack Williams16042b62020-03-29 22:03:16 -070026
27What you’ll need to emulate E2E traffic is:
28
29- 1 x86 server with Ubuntu 16.04 and at least the following interfaces:
30
31 - 1 1G Ethernet port
32 - 1 10G Ethernet port (this can be a second 1G interface as long as you have a media converter)
33
Matteo Scandoloef5d6f42020-07-27 16:46:38 -070034.. _setting-up-a-client:
35
Zack Williams16042b62020-03-29 22:03:16 -070036Setting up a client
37-------------------
38
39The first thing you need to do is to install ``lxd`` on your server. To do that
40you can follow `this guide
41<http://tutorials.ubuntu.com/tutorial/tutorial-setting-up-lxd-1604>`_
42
43Once ``lxd`` is successfully installed you need to initialize it with:
44
45.. code:: bash
46
47 lxd init
48
49we recommend to use all the provided default values.
50
51Once ``lxd`` is initialized you can create a container and assign a physical
52Ethernet interface to the container:
53
54.. code:: bash
55
56 lxc launch ubuntu:16.04 <name>
57 lxc config device add <name> eth1 nic name=eth1 parent=<physical-intf> nictype=physical
58
59Where:
60
61- ``name`` is the desired container name. The convention used to identify which
62 RG container is connected to an ONU is to use the ONU serial number as the
63 lxc container name.
64
65- ``physical-intf`` is the name of the interface on the server where the ONU
66 is physically connected
67
68Once the container is created you can check it's state with with ``lxc list``:
69
70.. code:: bash
71
72 +---------------+---------+--------------------+------+------------+-----------+
73 | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
74 +---------------+---------+--------------------+------+------------+-----------+
75 | voltha-client | RUNNING | 10.63.3.144 (eth0) | | PERSISTENT | 0 |
76 +---------------+---------+--------------------+------+------------+-----------+
77
78Please make sure the container has an assigned IP or we it won’t be able
79to login and install the ``wpasupplicant`` tool inside the RG.
80
81Once the container is running you need to enter it for configuration. To access
82the container run: ``lxc exec <name> /bin/bash``
83
84Once inside:
85
86.. code:: bash
87
88 # activate the interface
89 ip link set eth1 up
90 # install the wpasupplicant tool
91 apt update
92 apt install wpasupplicant
93
94..
95
96 NOTE: ``wpasupplicant`` is a Linux tool to perform 802.1X authentication.
97 `wpasupplicant documentation can be found here
98 <https://help.ubuntu.com/community/WifiDocs/WPAHowTo>`_.
99
100Create a configuration file for ``wpasupplicant`` in
101``/etc/wpa_supplicant/wpa_supplicant.conf`` with the content:
102
103.. code:: text
104
105 ctrl_interface=/var/run/wpa_supplicant
106 eapol_version=1
107 ap_scan=0
108 fast_reauth=1
109 network={
110 key_mgmt=WPA-EAP
111 eap=MD5
112 identity="user"
113 password="password"
114 ca_cert="/etc/cert/cacert.pem"
115 client_cert="/etc/cert/client.pem"
116 private_key="/etc/cert/client.key"
117 private_key_passwd="whatever"
118 eapol_flags=3
119 }
120
121..
122
123 NOTE: The configuration in this file is not really important if you are
124 using the ``freeradius`` server provided as part of the VOLTHA helm charts.
125 Do not worry if the certificates do not exist, they won’t affect
126 authentication as that is password based.
127
128At this point you’ll be able kickoff the authentication process (by
129sending ``EAPOL`` packets into the system) with the command:
130
131.. code:: bash
132
133 wpa_supplicant -i eth1 -Dwired -c /etc/wpa_supplicant/wpa_supplicant.conf
134
135If everything has been set up correctly, you should see output similar to this
136in the VOLTHA logs:
137
138.. code:: bash
139
140 cord@node1:~$ kubectl logs -f -n voltha vcore-0 | grep -E "packet_indication|packet-in" | grep 888e
141 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}
142
143Setting up an emulated BNG on Linux
144-----------------------------------
145
146The emulated BNG needs to perform only two operations: ``DHCP`` and
147``NAT``.
148
149To setup a NAT router on an Ubuntu 16.04 server you can look at this
150tutorial:
Andrea Campanella61fd6662020-07-27 16:56:55 +0200151http://nairabytes.net/linux/how-to-set-up-a-nat-router-on-ubuntu-server-16-04
Zack Williams16042b62020-03-29 22:03:16 -0700152
153To install a DHCP server you can follow this tutorial:
Andrea Campanella61fd6662020-07-27 16:56:55 +0200154http://nairabytes.net/linux/how-to-install-a-dhcp-server-in-ubuntu-server-16-04
Zack Williams16042b62020-03-29 22:03:16 -0700155
156Once the ``DHCP`` server is installed, you need to configure it.
157
158Create Q-in-Q interfaces
159~~~~~~~~~~~~~~~~~~~~~~~~
160
161On the interface that connects to the Agg Switch (upstream) you are
162going to receive double tagged traffic, so you’ll need to create
163interfaces to received it.
164
165Supposing that your subscriber is using ``s_tag=111``, ``c_tag=222`` and
166the upstream interface name is ``eth2`` you can use this commands to
167create it:
168
169.. code:: bash
170
171 ip link set eth2 up
172 ip link add link eth2 name eth2.111 type vlan id 111
173 ip link set eth2.111 up
174 ip link add link eth2.111 name eth2.111.222 type vlan id 222
175 ip link set eth2.111.222 up
176 ip addr add 10.11.2.254/24 dev eth2.111.222
177
178Then you’ll need to tell the ``dhcp`` server to listen on that
179interface, you can do that by editing the file
180``/etc/default/isc-dhcp-server`` so that it looks like:
181
182.. code:: bash
183
184 INTERFACES="eth2.111.222"
185
186..
187
188 NOTE that you can list multiple interfaces, separated by spaces, in
189 case you have multiple subscribers in your setup
190
191In the ``/etc/dhcp/dhcpd.conf`` config file, configure the IP address
192range to assign to the double tagged interface:
193
194.. code:: text
195
196 subnet 10.11.2.0 netmask 255.255.255.0 {
197 range 10.11.2.1 10.11.2.100;
198 option routers 10.11.2.254;
199 option domain-name-servers 8.8.8.8;
200 }
Andrea Campanella882cfcc2021-02-04 10:53:57 +0100201
202Configuration for in-band OLT control
203-------------------------------------
204
205If OLT is being used in in-band connectivity mode, the
206`document <https://docs.google.com/document/d/1OKDJCPEFVTEythAFUS_I7Piew4jHmhk25llK6UF04Wg>`_
207details the configuration aspects in ONOS and the aggregation switch to
208trunk/switch in-band packets from the OLT to BNG or Voltha.
209
210In-band OLT software upgrade
211-------------------------------------
212If OLT with openolt agent is being used in in-band connectivity mode we provide the capability
213to execute SW updates of the image present on the device, the
214`README <https://github.com/opencord/openolt/tree/master/olt-sw-upgrade>`_ provides the required details.