blob: 47e89218aeac9a195ea7154621589f4e55397ced [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
Andrea Campanella458163b2022-04-11 14:19:25 +020090
91..
92
93If you want to setup the container for the DT workflow please add a tagged interface to be used to send out traffic.
94
95.. code:: bash
96
97 # setup tagged client interface
98 ip link add link eth1 name eth1.7 type vlan id 7
99 ip link set eth1.7 up
100
101..
102
103The container also requires some tools for testing
104
105.. code:: bash
106
Andrea Campanella3c4e5262021-05-18 11:47:57 +0200107 # install the required tools for testing
Zack Williams16042b62020-03-29 22:03:16 -0700108 apt update
Andrea Campanella3c4e5262021-05-18 11:47:57 +0200109 apt install -y wpasupplicant jq netsniff-ng build-essential tcpdump
Zack Williams16042b62020-03-29 22:03:16 -0700110
111..
112
Andrea Campanella3c4e5262021-05-18 11:47:57 +0200113In the lxc container you also need to install iperf3. Iperf3 needs to be installed from source to have some
114options used in VOLTHA tests.
115
116.. code:: bash
117
118 git clone https://github.com/esnet/iperf.git -b 3.9
119 cd iperf
120 ./configure && make && sudo make install
121 ldconfig
122
123..
124
125 NOTE:
126
127 - ``wpasupplicant`` is a Linux tool to perform 802.1X authentication. `wpasupplicant documentation can be found here <https://help.ubuntu.com/community/WifiDocs/WPAHowTo>`_.
128 - ``jq`` is a linux tool to perform json parsing. `More information on jq <https://stedolan.github.io/jq/>`_
129 - ``netsniff-ng`` installs maushezan, a linux tool to perform traffic generations. `More informations on mz <https://man7.org/linux/man-pages/man8/mausezahn.8.html>`_
130 - ``iperf3`` is a linux tool to perform speed tests. `More information on iperf3 <https://iperf.fr/>`_
131
132
Zack Williams16042b62020-03-29 22:03:16 -0700133
134Create a configuration file for ``wpasupplicant`` in
135``/etc/wpa_supplicant/wpa_supplicant.conf`` with the content:
136
137.. code:: text
138
139 ctrl_interface=/var/run/wpa_supplicant
140 eapol_version=1
141 ap_scan=0
142 fast_reauth=1
143 network={
144 key_mgmt=WPA-EAP
145 eap=MD5
146 identity="user"
147 password="password"
148 ca_cert="/etc/cert/cacert.pem"
149 client_cert="/etc/cert/client.pem"
150 private_key="/etc/cert/client.key"
151 private_key_passwd="whatever"
152 eapol_flags=3
153 }
154
155..
156
157 NOTE: The configuration in this file is not really important if you are
158 using the ``freeradius`` server provided as part of the VOLTHA helm charts.
159 Do not worry if the certificates do not exist, they won’t affect
160 authentication as that is password based.
161
162At this point you’ll be able kickoff the authentication process (by
163sending ``EAPOL`` packets into the system) with the command:
164
165.. code:: bash
166
167 wpa_supplicant -i eth1 -Dwired -c /etc/wpa_supplicant/wpa_supplicant.conf
168
169If everything has been set up correctly, you should see output similar to this
170in the VOLTHA logs:
171
172.. code:: bash
173
174 cord@node1:~$ kubectl logs -f -n voltha vcore-0 | grep -E "packet_indication|packet-in" | grep 888e
175 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}
176
177Setting up an emulated BNG on Linux
178-----------------------------------
179
180The emulated BNG needs to perform only two operations: ``DHCP`` and
181``NAT``.
182
183To setup a NAT router on an Ubuntu 16.04 server you can look at this
184tutorial:
Andrea Campanella61fd6662020-07-27 16:56:55 +0200185http://nairabytes.net/linux/how-to-set-up-a-nat-router-on-ubuntu-server-16-04
Zack Williams16042b62020-03-29 22:03:16 -0700186
187To install a DHCP server you can follow this tutorial:
Andrea Campanella61fd6662020-07-27 16:56:55 +0200188http://nairabytes.net/linux/how-to-install-a-dhcp-server-in-ubuntu-server-16-04
Zack Williams16042b62020-03-29 22:03:16 -0700189
190Once the ``DHCP`` server is installed, you need to configure it.
191
192Create Q-in-Q interfaces
193~~~~~~~~~~~~~~~~~~~~~~~~
194
195On the interface that connects to the Agg Switch (upstream) you are
196going to receive double tagged traffic, so you’ll need to create
197interfaces to received it.
198
199Supposing that your subscriber is using ``s_tag=111``, ``c_tag=222`` and
200the upstream interface name is ``eth2`` you can use this commands to
201create it:
202
203.. code:: bash
204
205 ip link set eth2 up
206 ip link add link eth2 name eth2.111 type vlan id 111
207 ip link set eth2.111 up
208 ip link add link eth2.111 name eth2.111.222 type vlan id 222
209 ip link set eth2.111.222 up
210 ip addr add 10.11.2.254/24 dev eth2.111.222
211
212Then you’ll need to tell the ``dhcp`` server to listen on that
213interface, you can do that by editing the file
214``/etc/default/isc-dhcp-server`` so that it looks like:
215
216.. code:: bash
217
218 INTERFACES="eth2.111.222"
219
220..
221
222 NOTE that you can list multiple interfaces, separated by spaces, in
223 case you have multiple subscribers in your setup
224
225In the ``/etc/dhcp/dhcpd.conf`` config file, configure the IP address
226range to assign to the double tagged interface:
227
228.. code:: text
229
230 subnet 10.11.2.0 netmask 255.255.255.0 {
231 range 10.11.2.1 10.11.2.100;
232 option routers 10.11.2.254;
233 option domain-name-servers 8.8.8.8;
234 }
Andrea Campanella882cfcc2021-02-04 10:53:57 +0100235
Andrea Campanella3c4e5262021-05-18 11:47:57 +0200236Other BNG required tools
237~~~~~~~~~~~~~~~~~~~~~~~~
238
239Some tools are required to perform data plane tests present in voltha-system-tests.
240The following commands install them:
241
242.. code:: bash
243
244 sudo apt update
245 sudo apt-get install -y jq netsniff-ng build-essential tcpdump
246
247..
248
249In the BNG you also need to install ``iperf3``. ``Iperf3`` needs to be installed from source to have some
250options used in the tests.
251
252.. code:: bash
253
254 #remove existing installation if any
255 sudo service iperf3 stop
256 sudo apt-get remove --purge iperf3
257 #Clone and install from source
258 git clone https://github.com/esnet/iperf.git -b 3.9
259 cd iperf
260 ./configure && make && sudo make install
261 sudo ldconfig
262
263..
264
265After installing ``iperf3`` on the BNG node it needs to be configured.
266Create the ``iperf3.service`` file:
267
268.. code:: bash
269
270 sudo vi /etc/systemd/system/iperf3.service
271
272..
273
274Include this content in the newly created file:
275
276.. code:: text
277
278 [Unit]
279 Description=iperf3
280 [Service]
281 ExecStart=/usr/local/bin/iperf3 --server
282 [Install]
283 WantedBy=multi-user.target
284
285..
286
287Start the ``iperf3`` service
288
289.. code:: bash
290
291 sudo service iperf3 start
292
293..
294
295Finally, check the ``iperf3`` service
296
297.. code:: bash
298
299 sudo service iperf3 status
300
301..
302
Andrea Campanella882cfcc2021-02-04 10:53:57 +0100303Configuration for in-band OLT control
304-------------------------------------
305
Joey Armstronged6cedd2022-08-31 12:39:33 -0400306If OLT is being used in in-band connectivity mode, this
Andrea Campanella882cfcc2021-02-04 10:53:57 +0100307`document <https://docs.google.com/document/d/1OKDJCPEFVTEythAFUS_I7Piew4jHmhk25llK6UF04Wg>`_
308details the configuration aspects in ONOS and the aggregation switch to
Joey Armstronged6cedd2022-08-31 12:39:33 -0400309trunk/switch in-band packets from the OLT to BNG or VOLTHA.
Andrea Campanella882cfcc2021-02-04 10:53:57 +0100310
311In-band OLT software upgrade
312-------------------------------------
313If OLT with openolt agent is being used in in-band connectivity mode we provide the capability
314to execute SW updates of the image present on the device, the
315`README <https://github.com/opencord/openolt/tree/master/olt-sw-upgrade>`_ provides the required details.