74 | | ==== Installing the !OpenFlow Reference System (old) ==== |
75 | | While presented, it is not recommended to install from tarball. |
76 | | The detailed instructions may be found here: http://www.openflowswitch.org/wp/getstarted/ |
77 | | |
78 | | 1. Download software and required packages. If using git: |
79 | | {{{ |
80 | | sudo apt-get install git-core automake m4 pkg-config libtool |
81 | | git clone http://openflowswitch.org/openflow |
82 | | cd openflow |
83 | | ./boot.sh |
84 | | }}} |
85 | | if installing from tarball: |
86 | | {{{ |
87 | | mkdir openflow |
88 | | cd openflow |
89 | | wget http://openflowswitch.org/downloads/openflow-0.9.0.tar.gz |
90 | | tar xzf openflow-0.9.0.tar.gz |
91 | | cd openflow-0.9.0 |
92 | | sudo apt-get install gcc linux-headers-`uname -r` |
93 | | }}} |
94 | | 2. Make and install. |
95 | | {{{ |
96 | | ./configure --with-l26=/lib/modules/`uname -r`/build |
97 | | make |
98 | | make install |
99 | | }}} |
100 | | |
101 | | === Installing NOX === |
102 | | It is not only recommended but also much simpler to use git to install NOX. Therefore the following instructions assume you are using git. The full instructions are found at noxrepo.org: http://noxrepo.org/manual/installation.html [[BR]] |
103 | | |
104 | | ''' Dependencies ''' [[BR]] |
105 | | NOX requires the following packages to be installed on the Console: |
106 | | * GNU Libtool (libtool) |
107 | | * Boost C++ libraries (libboost1.35-dev) |
108 | | * Apache HTTP Server (apache2) |
109 | | * Xerces C++ parser (libxerces-c28) |
110 | | * Xerces development files (libxerces-c2-dev) |
111 | | * SSL development libraries (libssl-dev) |
112 | | * SQLite 3 development files (libsqlite3-dev) |
113 | | * Simple JSON for Python (python-simplejson) |
114 | | Note, this is with respect to the Console, not the node - you may need to install additional packages before NOX can be installed properly. |
115 | | |
116 | | If all dependencies are taken care of, NOX will install with the following steps. |
117 | | {{{ |
118 | | git clone git://noxrepo.org/noxcore |
119 | | cd noxcore/ |
120 | | ./boot.sh |
121 | | mkdir build/ |
122 | | cd build/ |
123 | | ../configure --with-python=yes |
124 | | make |
125 | | make check |
126 | | }}} |
127 | | |
128 | | |
129 | | === Controllers on the Console === |
130 | | |
131 | | A sub-set of these instructions can be used to install a "custom" controller in userspace on the console. Most of the requisite libraries should already be installed. Use the following commands to install the Reference system in your userspace: |
132 | | |
133 | | '''for the !OpenFlow Reference System :'''[[BR]] |
134 | | {{{ |
135 | | cd |
136 | | git clone http://openflowswitch.org/openflow |
137 | | cd openflow |
138 | | ./boot.sh |
139 | | ./configure --with-l26=/lib/modules/`uname -r`/build |
140 | | make |
141 | | make install |
142 | | }}} |
143 | | |
144 | | '''for NOX :'''[[BR]] |
145 | | {{{ |
146 | | cd |
147 | | git clone git://noxrepo.org/noxcore |
148 | | cd noxcore/ |
149 | | ./boot.sh |
150 | | mkdir build/ |
151 | | cd build/ |
152 | | ../configure --with-python=yes |
153 | | make |
154 | | make check |
155 | | }}} |
156 | | |
157 | | |
158 | | === Starting the controller === |
159 | | Both commands start the controller and establish a connection with the !OpenFlow switch. The -v is for verbose. -h for both will give you the help files for the controllers. In the reference system, the controller is found under .../openflow/controller/ |
160 | | {{{ |
161 | | ./controller -v ptcp:6633 |
162 | | }}} |
163 | | and in NOX, it is found under .../noxcore/build/src/ |
164 | | {{{ |
165 | | ./nox-core -v -i ptcp:6633 |
166 | | }}} |
167 | | `ptcp:6633` refers to a passive connection to TCP 6633, the default !OpenFlow port. An active connection method using standard TCP exists, however this does not work on this setup. In the !OpenFlow reference system, a log of the verbose output can be saved by appending `--log-file [filename]`. |
168 | | |
169 | | [[BR]] |
170 | | [[BR]] |
171 | | |
172 | | ---- |
173 | | === Available Tools === |
174 | | |
175 | | Some of these tools require root privileges and will thus require a custom installation on a node. Others can be run from the console directly in an unprivileged mode. |
176 | | |
177 | | ==== the Wireshark plugin ==== |
178 | | The !OpenFlow Reference system comes with an !OpenFlow wireshark dissector. |
179 | | |
180 | | '''Permissions:''' [[BR]] |
181 | | You must be root in order to use Wireshark; Therefore you must install it on a node. [[BR]] |
182 | | |
183 | | '''Prerequisites:''' [[BR]] |
184 | | glib (and of course, wireshark) is required for the plugin to work: |
185 | | {{{ |
186 | | apt-get install wireshark libgtk2.0-dev |
187 | | }}} |
188 | | |
189 | | '''Installation:'''[[BR]] |
190 | | The patch is located under the utilities directory: |
191 | | {{{ |
192 | | cd utilities/wireshark_dissectors/openflow |
193 | | make |
194 | | sudo make install |
195 | | }}} |
196 | | |
197 | | '''Usage:'''[[BR]] |
198 | | To use wireshark, you need to do some X11 tunneling. To do this, add the -X option when using SSH to access the Console and the nodes. |
199 | | |
200 | | tcpdump pcap files can also be opened using wireshark - once the plugin has been installed, !OpenFlow packets can be interpreted from these files as well. |
201 | | |
202 | | ==== Iperf ==== |
203 | | For performance testing, you may want to run some bandwidth tests. iperf is a tool that measures maximum network performance using TCP for throughput and UDP for jitter and datagram loss. The standard image used for the Sandbox nodes when booted with command `omf tell on` comes with iperf. To take measurements, you need at least two nodes. One node becomes the server, the other(s), clients. |
204 | | |
205 | | '''Permissions:''' [[BR]] |
206 | | Iperf does not require root access. |
207 | | |
208 | | '''Usage:'''[[BR]] |
209 | | Initially, eth0 (the !OpenFlow interface for the nodes) will be disabled. Additionally, there is no DHCP service on that VLAN - you need to enable the interface and statically set the IP address (i.e. using ifconfig). 192.168.x.y is the block associated with the !OpenFlow VLAN. |
210 | | |
211 | | To start the server: |
212 | | {{{ |
213 | | iperf -s |
214 | | }}} |
215 | | and on the client: |
216 | | {{{ |
217 | | iperf -c 192.168.x.y |
218 | | }}} |
219 | | |
220 | | Where 192.168.x.y is the IP address of the iperf server. A caveat is that iperf cannot take real-time bandwidth measurements. Real-time bandwidth use can be monitored using BWM-ng. |
221 | | |
222 | | '''On the Console'''[[BR]] |
223 | | Iperf is also installed on the Console. The interfaces available on the Console are the following: |
224 | | * eth1 - 192.168.100.28 |
225 | | * eth1.27 / Control - 10.19.0.10 |
226 | | * eth1.28 / OF virtual switch - 192.168.1.28 |
227 | | * eth1.100 / OFP interface - 172.16.100.1 |
228 | | |
229 | | ==== BWM-ng ==== |
230 | | BWM-ng is a tool capable of taking real-time throughput measurements of different interfaces of a host. |
231 | | |
232 | | '''Permissions:''' [[BR]] |
233 | | BWM-ng does not require root access, and is installed on the Console. |
234 | | |
235 | | '''Usage:'''[[BR]] |
236 | | By default, the tool will monitor all interfaces on the Console. To monitor just the !OpenFlow interface, you must specify `eth1.100`. To output this to a csv, use the following command: |
237 | | {{{ |
238 | | bwm-ng -I eth1.100 -o csv -t 1000 -F <file-name> |
239 | | }}} |
240 | | * -I : interface |
241 | | * -o : output, either in csv or html |
242 | | * -t : specifies sampling rate in msec. Here, it is 1000 msec, or 1 sample/sec |
243 | | * -F : Filename of output |
244 | | |
245 | | '''Installation on a node'''[[BR]] |
246 | | The following command will install BWM-ng: |
247 | | {{{ |
248 | | apt-get install bwm-ng |
249 | | }}} |
250 | | |
251 | | ---- |
252 | | ==== Development ==== |
253 | | The files defining !OpenFlow Protocol can be found in the following locations: |
254 | | * !OpenFlow reference system: openflow/include/openflow/openflow.h |
255 | | * NOX: noxcore/src/include/openflow.hh |
256 | | |
257 | | In addition, NOX provides a [http://noxrepo.org/manual/app.html Web API] that allows you to do development in C++ or Python. |