]>
Commit | Line | Data |
---|---|---|
542cc9bb TG |
1 | How to Install Open vSwitch on Linux, FreeBSD and NetBSD |
2 | ======================================================== | |
4b11d5e8 BP |
3 | |
4 | This document describes how to build and install Open vSwitch on a | |
76d5beb9 YT |
5 | generic Linux, FreeBSD, or NetBSD host. For specifics around installation |
6 | on a specific platform, please see one of these files: | |
4b11d5e8 | 7 | |
9feb1017 TG |
8 | - [INSTALL.Debian.md] |
9 | - [INSTALL.Fedora.md] | |
10 | - [INSTALL.RHEL.md] | |
11 | - [INSTALL.XenServer.md] | |
12 | - [INSTALL.NetBSD.md] | |
620b1762 | 13 | - [INSTALL.Windows.md] |
9feb1017 | 14 | - [INSTALL.DPDK.md] |
4b11d5e8 BP |
15 | |
16 | Build Requirements | |
17 | ------------------ | |
18 | ||
19 | To compile the userspace programs in the Open vSwitch distribution, | |
20 | you will need the following software: | |
21 | ||
542cc9bb | 22 | - GNU make. |
4b11d5e8 | 23 | |
542cc9bb | 24 | - A C compiler, such as: |
8a6de510 | 25 | |
542cc9bb | 26 | * GCC 4.x. |
8a6de510 | 27 | |
542cc9bb TG |
28 | * Clang. Clang 3.4 and later provide useful static semantic |
29 | analysis and thread-safety checks. For Ubuntu, there are | |
30 | nightly built packages available on clang's website. | |
4b11d5e8 | 31 | |
620b1762 BP |
32 | * MSVC 2013. See [INSTALL.Windows] for additional Windows build |
33 | instructions. | |
34 | ||
542cc9bb TG |
35 | While OVS may be compatible with other compilers, optimal |
36 | support for atomic operations may be missing, making OVS very | |
37 | slow (see lib/ovs-atomic.h). | |
29d204ef | 38 | |
542cc9bb TG |
39 | - libssl, from OpenSSL, is optional but recommended if you plan to |
40 | connect the Open vSwitch to an OpenFlow controller. libssl is | |
41 | required to establish confidentiality and authenticity in the | |
42 | connections from an Open vSwitch to an OpenFlow controller. If | |
43 | libssl is installed, then Open vSwitch will automatically build | |
44 | with support for it. | |
4b11d5e8 | 45 | |
1bbebfb7 AZ |
46 | - libcap-ng, written by Steve Grubb, is optional but recommended. It |
47 | is required to run OVS daemons as a non-root user with dropped root | |
48 | privileges. If libcap-ng is installed, then Open vSwitch will | |
49 | automatically build with support for it. | |
50 | ||
73eb682e | 51 | - Python 2.7. You must also have the Python six library. |
deb64473 | 52 | |
c6435221 BP |
53 | On Linux, you may choose to compile the kernel module that comes with |
54 | the Open vSwitch distribution or to use the kernel module built into | |
9feb1017 TG |
55 | the Linux kernel (version 3.3 or later). See the [FAQ.md] question |
56 | "What features are not available in the Open vSwitch kernel datapath that | |
c6435221 BP |
57 | ships as part of the upstream Linux kernel?" for more information on |
58 | this trade-off. You may also use the userspace-only implementation, | |
9feb1017 TG |
59 | at some cost in features and performance (see [INSTALL.userspace.md] |
60 | for details). To compile the kernel module on Linux, you must also | |
c6435221 | 61 | install the following: |
4b11d5e8 | 62 | |
9feb1017 | 63 | - A supported Linux kernel version. Please refer to [README.md] for a |
542cc9bb | 64 | list of supported versions. |
4b11d5e8 | 65 | |
542cc9bb TG |
66 | For optional support of ingress policing, you must enable kernel |
67 | configuration options NET_CLS_BASIC, NET_SCH_INGRESS, and | |
68 | NET_ACT_POLICE, either built-in or as modules. (NET_CLS_POLICE is | |
69 | obsolete and not needed.) | |
4b11d5e8 | 70 | |
8063e095 PS |
71 | On kernels before 3.11, the ip_gre module, for GRE tunnels over IP |
72 | (NET_IPGRE), must not be loaded or compiled in. | |
6f470982 | 73 | |
542cc9bb TG |
74 | To configure HTB or HFSC quality of service with Open vSwitch, |
75 | you must enable the respective configuration options. | |
c9d3af4e | 76 | |
542cc9bb TG |
77 | To use Open vSwitch support for TAP devices, you must enable |
78 | CONFIG_TUN. | |
26bb189d | 79 | |
542cc9bb TG |
80 | - To build a kernel module, you need the same version of GCC that |
81 | was used to build that kernel. | |
4b11d5e8 | 82 | |
542cc9bb TG |
83 | - A kernel build directory corresponding to the Linux kernel image |
84 | the module is to run on. Under Debian and Ubuntu, for example, | |
85 | each linux-image package containing a kernel binary has a | |
86 | corresponding linux-headers package with the required build | |
87 | infrastructure. | |
4b11d5e8 BP |
88 | |
89 | If you are working from a Git tree or snapshot (instead of from a | |
c9d3af4e BP |
90 | distribution tarball), or if you modify the Open vSwitch build system |
91 | or the database schema, you will also need the following software: | |
4b11d5e8 | 92 | |
542cc9bb | 93 | - Autoconf version 2.63 or later. |
4b11d5e8 | 94 | |
542cc9bb | 95 | - Automake version 1.10 or later. |
4b11d5e8 | 96 | |
542cc9bb | 97 | - libtool version 2.4 or later. (Older versions might work too.) |
195b5c35 | 98 | |
c9d3af4e BP |
99 | To run the unit tests, you also need: |
100 | ||
542cc9bb TG |
101 | - Perl. Version 5.10.1 is known to work. Earlier versions should |
102 | also work. | |
c9d3af4e | 103 | |
6da51546 JS |
104 | The datapath tests for userspace and Linux datapaths also rely upon: |
105 | ||
106 | - pyftpdlib. Version 1.2.0 is known to work. Earlier versions should | |
107 | also work. | |
108 | ||
109 | - GNU wget. Version 1.16 is known to work. Earlier versions should | |
110 | also work. | |
111 | ||
a5ae88ff AA |
112 | The ovs-vswitchd.conf.db(5) manpage will include an E-R diagram, in |
113 | formats other than plain text, only if you have the following: | |
f8d739a9 | 114 | |
542cc9bb | 115 | - "dot" from graphviz (http://www.graphviz.org/). |
f8d739a9 | 116 | |
542cc9bb TG |
117 | - Perl. Version 5.10.1 is known to work. Earlier versions should |
118 | also work. | |
c9d3af4e | 119 | |
f8f26e98 BP |
120 | If you are going to extensively modify Open vSwitch, please consider |
121 | installing the following to obtain better warnings: | |
122 | ||
542cc9bb TG |
123 | - "sparse" version 0.4.4 or later |
124 | (http://www.kernel.org/pub/software/devel/sparse/dist/). | |
f8f26e98 | 125 | |
542cc9bb | 126 | - GNU make. |
f8f26e98 | 127 | |
542cc9bb | 128 | - clang, version 3.4 or later |
97be1538 | 129 | |
ac1432a4 RB |
130 | - “flake8”, version 2.X, along with the “hacking” flake8 plugin (for Python |
131 | code). The automatic flake8 check that runs against Python code has some | |
132 | warnings enabled that come from the "hacking" flake8 plugin. If it's not | |
133 | installed, the warnings just won't occur until it's run on a system with | |
134 | "hacking" installed. Note that there are problems with flake8 3.0 and the | |
135 | “hacking” plugin. To ensure you get flake8 2.X, you can use | |
136 | “pip install ‘flake8<3.0’”. | |
115d8719 | 137 | |
fef5244f EJ |
138 | Also, you may find the ovs-dev script found in utilities/ovs-dev.py useful. |
139 | ||
4b11d5e8 BP |
140 | Installation Requirements |
141 | ------------------------- | |
142 | ||
143 | The machine on which Open vSwitch is to be installed must have the | |
144 | following software: | |
145 | ||
542cc9bb | 146 | - libc compatible with the libc used for build. |
4b11d5e8 | 147 | |
542cc9bb TG |
148 | - libssl compatible with the libssl used for build, if OpenSSL was |
149 | used for the build. | |
4b11d5e8 | 150 | |
542cc9bb | 151 | - On Linux, the same kernel version configured as part of the build. |
4b11d5e8 | 152 | |
542cc9bb TG |
153 | - For optional support of ingress policing on Linux, the "tc" program |
154 | from iproute2 (part of all major distributions and available at | |
155 | http://www.linux-foundation.org/en/Net:Iproute2). | |
4b11d5e8 | 156 | |
73eb682e RB |
157 | - Python 2.7. You must also have the Python six library. |
158 | ||
f6eb6b20 GL |
159 | On Linux you should ensure that /dev/urandom exists. To support TAP |
160 | devices, you must also ensure that /dev/net/tun exists. | |
6e8e271c | 161 | |
76d5beb9 YT |
162 | Building and Installing Open vSwitch for Linux, FreeBSD or NetBSD |
163 | ================================================================= | |
4b11d5e8 | 164 | |
e9e85443 FL |
165 | Once you have installed all the prerequisites listed above in the |
166 | Base Prerequisites section, follow the procedures below to bootstrap, | |
167 | to configure and to build the code. | |
4b11d5e8 | 168 | |
e9e85443 FL |
169 | Bootstrapping the Sources |
170 | ------------------------- | |
171 | ||
172 | This step is not needed if you have downloaded a released tarball. | |
173 | If you pulled the sources directly from an Open vSwitch Git tree or | |
174 | got a Git tree snapshot, then run boot.sh in the top source directory | |
175 | to build the "configure" script. | |
30746a1b | 176 | |
542cc9bb | 177 | `% ./boot.sh` |
30746a1b | 178 | |
e9e85443 FL |
179 | |
180 | Configuring the Sources | |
181 | ----------------------- | |
182 | ||
183 | Configure the package by running the configure script. You can | |
184 | usually invoke configure without any arguments. For example: | |
4b11d5e8 | 185 | |
542cc9bb | 186 | `% ./configure` |
4b11d5e8 | 187 | |
109c01b1 GS |
188 | By default all files are installed under /usr/local. Open vSwitch also |
189 | expects to find its database in /usr/local/etc/openvswitch by default. | |
190 | If you want to install all files into, e.g., /usr and /var instead of | |
191 | /usr/local and /usr/local/var and expect to use /etc/openvswitch as the default | |
192 | database directory, add options as shown here: | |
4b11d5e8 | 193 | |
109c01b1 GS |
194 | `% ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc` |
195 | ||
196 | Note that the Open vSwitch installed with packages like .rpm (e.g. via 'yum | |
197 | install' or 'rpm -ivh') and .deb (e.g. via 'apt-get install' or 'dpkg -i') use | |
198 | the above configure options. | |
4b11d5e8 | 199 | |
e9e85443 FL |
200 | By default, static libraries are built and linked against. If you |
201 | want to use shared libraries instead: | |
7748423a | 202 | |
e0512257 | 203 | `% ./configure --enable-shared` |
7748423a | 204 | |
e9e85443 FL |
205 | To use a specific C compiler for compiling Open vSwitch user |
206 | programs, also specify it on the configure command line, like so: | |
4b11d5e8 | 207 | |
542cc9bb | 208 | `% ./configure CC=gcc-4.2` |
4b11d5e8 | 209 | |
e9e85443 | 210 | To use 'clang' compiler: |
97be1538 | 211 | |
542cc9bb | 212 | `% ./configure CC=clang` |
97be1538 | 213 | |
73c33892 BP |
214 | To supply special flags to the C compiler, specify them as CFLAGS on |
215 | the configure command line. If you want the default CFLAGS, which | |
216 | include "-g" to build debug symbols and "-O2" to enable optimizations, | |
217 | you must include them yourself. For example, to build with the | |
218 | default CFLAGS plus "-mssse3", you might run configure as follows: | |
219 | ||
220 | `% ./configure CFLAGS="-g -O2 -mssse3"` | |
221 | ||
7adc92ac BB |
222 | For efficient hash computation special flags can be passed to leverage |
223 | built-in intrinsics. For example on X86_64 with SSE4.2 instruction set | |
224 | support, CRC32 intrinsics can be used by passing '-msse4.2'. | |
225 | ||
226 | `% ./configure CFLAGS="-g -O2 -msse4.2"` | |
227 | ||
228 | If you are on a different processor and don't know what flags to choose, it | |
229 | is recommended to use '-march=native' settings. | |
230 | ||
231 | `% ./configure CFLAGS="-g -O2 -march=native"` | |
232 | ||
233 | With this, GCC will detect the processor and automatically set appropriate | |
234 | flags for it. This should not be used if you are compiling OVS outside the | |
235 | target machine. | |
236 | ||
4f7e5c27 RB |
237 | Note that these CFLAGS are not applied when building the Linux |
238 | kernel module. Custom CFLAGS for the kernel module are supplied | |
239 | using the EXTRA_CFLAGS variable when running make. So, for example: | |
240 | ||
e0512257 | 241 | `% make EXTRA_CFLAGS="-Wno-error=date-time"` |
4f7e5c27 | 242 | |
e9e85443 FL |
243 | To build the Linux kernel module, so that you can run the |
244 | kernel-based switch, pass the location of the kernel build | |
245 | directory on --with-linux. For example, to build for a running | |
246 | instance of Linux: | |
4b11d5e8 | 247 | |
542cc9bb | 248 | `% ./configure --with-linux=/lib/modules/`uname -r`/build` |
4b11d5e8 | 249 | |
e9e85443 FL |
250 | If --with-linux requests building for an unsupported version of |
251 | Linux, then "configure" will fail with an error message. Please | |
252 | refer to the [FAQ.md] for advice in that case. | |
a7ae9380 | 253 | |
e9e85443 FL |
254 | If you wish to build the kernel module for an architecture other |
255 | than the architecture of the machine used for the build, you may | |
256 | specify the kernel architecture string using the KARCH variable | |
257 | when invoking the configure script. For example, to build for MIPS | |
258 | with Linux: | |
4b11d5e8 | 259 | |
542cc9bb | 260 | `% ./configure --with-linux=/path/to/linux KARCH=mips` |
4b11d5e8 | 261 | |
e9e85443 FL |
262 | If you plan to do much Open vSwitch development, you might want to |
263 | add --enable-Werror, which adds the -Werror option to the compiler | |
264 | command line, turning warnings into errors. That makes it | |
265 | impossible to miss warnings generated by the build. | |
ad367b28 | 266 | |
e9e85443 FL |
267 | To build with gcov code coverage support, add --enable-coverage, |
268 | e.g.: | |
e3c7ed29 | 269 | |
542cc9bb | 270 | `% ./configure --enable-coverage` |
e3c7ed29 | 271 | |
e9e85443 FL |
272 | The configure script accepts a number of other options and honors |
273 | additional environment variables. For a full list, invoke | |
274 | configure with the --help option. | |
4b11d5e8 | 275 | |
e9e85443 FL |
276 | You can also run configure from a separate build directory. This |
277 | is helpful if you want to build Open vSwitch in more than one way | |
278 | from a single source directory, e.g. to try out both GCC and Clang | |
279 | builds, or to build kernel modules for more than one Linux version. | |
280 | Here is an example: | |
ef7889b4 | 281 | |
e0512257 | 282 | `% mkdir _gcc && (cd _gcc && ../configure CC=gcc)` |
542cc9bb | 283 | `% mkdir _clang && (cd _clang && ../configure CC=clang)` |
ef7889b4 | 284 | |
48d3d488 RBE |
285 | Under certains loads the ovsdb-server and other components perform |
286 | better when using the jemalloc memory allocator, instead of the glibc | |
287 | memory allocator. | |
288 | ||
289 | If you wish to link with jemalloc add it to LIBS: | |
290 | ||
291 | `% ./configure LIBS=-ljemalloc` | |
e9e85443 FL |
292 | |
293 | Building the Sources | |
294 | -------------------- | |
295 | ||
296 | 1. Run GNU make in the build directory, e.g.: | |
4b11d5e8 | 297 | |
542cc9bb | 298 | `% make` |
4b11d5e8 | 299 | |
380b39f7 BP |
300 | or if GNU make is installed as "gmake": |
301 | ||
542cc9bb | 302 | `% gmake` |
f6eb6b20 | 303 | |
ef7889b4 BP |
304 | If you used a separate build directory, run make or gmake from that |
305 | directory, e.g.: | |
306 | ||
e0512257 | 307 | `% make -C _gcc` |
542cc9bb | 308 | `% make -C _clang` |
ef7889b4 | 309 | |
e9e85443 FL |
310 | For improved warnings if you installed "sparse" (see "Prerequisites"), |
311 | add C=1 to the command line. | |
f8f26e98 | 312 | |
86b3f7e1 BP |
313 | Some versions of Clang and ccache are not completely compatible. |
314 | If you see unusual warnings when you use both together, consider | |
315 | disabling ccache for use with Clang. | |
316 | ||
e9e85443 | 317 | 2. Consider running the testsuite. Refer to "Running the Testsuite" |
875ef81b | 318 | below, for instructions. |
4b11d5e8 | 319 | |
e9e85443 | 320 | 3. Become root by running "su" or another program. |
875ef81b | 321 | |
e9e85443 | 322 | 4. Run "make install" to install the executables and manpages into the |
4b11d5e8 BP |
323 | running system, by default under /usr/local. |
324 | ||
e9e85443 | 325 | 5. If you built kernel modules, you may install and load them, e.g.: |
4b11d5e8 | 326 | |
e0512257 | 327 | `% make modules_install` |
542cc9bb | 328 | `% /sbin/modprobe openvswitch` |
4b11d5e8 | 329 | |
4b11d5e8 | 330 | To verify that the modules have been loaded, run "/sbin/lsmod" and |
9b80f761 | 331 | check that openvswitch is listed. |
4b11d5e8 | 332 | |
542cc9bb TG |
333 | If the `modprobe` operation fails, look at the last few kernel log |
334 | messages (e.g. with `dmesg | tail`): | |
dd2d79ce | 335 | |
dd2d79ce BP |
336 | - Otherwise, the most likely problem is that Open vSwitch was |
337 | built for a kernel different from the one into which you are | |
542cc9bb | 338 | trying to load it. Run `modinfo` on openvswitch.ko and on |
dd2d79ce BP |
339 | a module built for the running kernel, e.g.: |
340 | ||
542cc9bb | 341 | ``` |
9b80f761 | 342 | % /sbin/modinfo openvswitch.ko |
dd2d79ce | 343 | % /sbin/modinfo /lib/modules/`uname -r`/kernel/net/bridge/bridge.ko |
542cc9bb | 344 | ``` |
dd2d79ce BP |
345 | |
346 | Compare the "vermagic" lines output by the two commands. If | |
347 | they differ, then Open vSwitch was built for the wrong kernel. | |
348 | ||
349 | - If you decide to report a bug or ask a question related to | |
542cc9bb TG |
350 | module loading, please include the output from the `dmesg` and |
351 | `modinfo` commands mentioned above. | |
dd2d79ce | 352 | |
e9e85443 | 353 | 6. Initialize the configuration database using ovsdb-tool, e.g.: |
4b11d5e8 | 354 | |
e0512257 | 355 | `% mkdir -p /usr/local/etc/openvswitch` |
542cc9bb | 356 | `% ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema` |
4b11d5e8 | 357 | |
3b12adda BP |
358 | Startup |
359 | ======= | |
4b11d5e8 | 360 | |
3b12adda | 361 | Before starting ovs-vswitchd itself, you need to start its |
cb8141b2 BP |
362 | configuration database, ovsdb-server. Each machine on which Open |
363 | vSwitch is installed should run its own copy of ovsdb-server. | |
566b8c8d BP |
364 | Configure it to use the database you created during installation (as |
365 | explained above), to listen on a Unix domain socket, to connect to any | |
366 | managers specified in the database itself, and to use the SSL | |
8084a280 BP |
367 | configuration in the database: |
368 | ||
e0512257 | 369 | ``` |
29701194 | 370 | % ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \ |
6faab099 JP |
371 | --remote=db:Open_vSwitch,Open_vSwitch,manager_options \ |
372 | --private-key=db:Open_vSwitch,SSL,private_key \ | |
373 | --certificate=db:Open_vSwitch,SSL,certificate \ | |
374 | --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \ | |
29701194 | 375 | --pidfile --detach |
e0512257 | 376 | ``` |
3b12adda | 377 | |
d3e3fb58 BP |
378 | (If you built Open vSwitch without SSL support, then omit |
379 | --private-key, --certificate, and --bootstrap-ca-cert.) | |
380 | ||
de4f3c10 | 381 | Then initialize the database using ovs-vsctl. This is only |
332b4e09 BP |
382 | necessary the first time after you create the database with |
383 | ovsdb-tool (but running it at any time is harmless): | |
384 | ||
e0512257 | 385 | `% ovs-vsctl --no-wait init` |
332b4e09 | 386 | |
3b12adda BP |
387 | Then start the main Open vSwitch daemon, telling it to connect to the |
388 | same Unix domain socket: | |
389 | ||
e0512257 | 390 | `% ovs-vswitchd --pidfile --detach` |
3b12adda BP |
391 | |
392 | Now you may use ovs-vsctl to set up bridges and other Open vSwitch | |
393 | features. For example, to create a bridge named br0 and add ports | |
394 | eth0 and vif1.0 to it: | |
395 | ||
e0512257 JR |
396 | `% ovs-vsctl add-br br0` |
397 | `% ovs-vsctl add-port br0 eth0` | |
398 | `% ovs-vsctl add-port br0 vif1.0` | |
3b12adda BP |
399 | |
400 | Please refer to ovs-vsctl(8) for more details. | |
4b11d5e8 | 401 | |
8b055d92 BP |
402 | Upgrading |
403 | ========= | |
404 | ||
405 | When you upgrade Open vSwitch from one version to another, you should | |
406 | also upgrade the database schema: | |
407 | ||
408 | 1. Stop the Open vSwitch daemons, e.g.: | |
409 | ||
542cc9bb | 410 | ``` |
012f5c4b | 411 | % kill `cd /usr/local/var/run/openvswitch && cat ovsdb-server.pid ovs-vswitchd.pid` |
542cc9bb | 412 | ``` |
8b055d92 | 413 | |
109c01b1 GS |
414 | 2. Install the new Open vSwitch release by using the same configure options as |
415 | was used for installing the previous version. If you do not use the same | |
416 | configure options, you can end up with two different versions of Open vSwitch | |
417 | executables installed in different locations. | |
8b055d92 BP |
418 | |
419 | 3. Upgrade the database, in one of the following two ways: | |
420 | ||
421 | - If there is no important data in your database, then you may | |
422 | delete the database file and recreate it with ovsdb-tool, | |
423 | following the instructions under "Building and Installing Open | |
76d5beb9 | 424 | vSwitch for Linux, FreeBSD or NetBSD". |
8b055d92 BP |
425 | |
426 | - If you want to preserve the contents of your database, back it | |
427 | up first, then use "ovsdb-tool convert" to upgrade it, e.g.: | |
428 | ||
542cc9bb | 429 | `% ovsdb-tool convert /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema` |
8b055d92 BP |
430 | |
431 | 4. Start the Open vSwitch daemons as described under "Building and | |
76d5beb9 | 432 | Installing Open vSwitch for Linux, FreeBSD or NetBSD" above. |
8b055d92 | 433 | |
4e375050 GS |
434 | Hot Upgrading |
435 | ============= | |
436 | Upgrading Open vSwitch from one version to the next version with minimum | |
437 | disruption of traffic going through the system that is using that Open vSwitch | |
438 | needs some considerations: | |
439 | ||
440 | 1. If the upgrade only involves upgrading the userspace utilities and daemons | |
441 | of Open vSwitch, make sure that the new userspace version is compatible with | |
442 | the previously loaded kernel module. | |
443 | ||
444 | 2. An upgrade of userspace daemons means that they have to be restarted. | |
ea274df9 | 445 | Restarting the daemons means that the OpenFlow flows in the ovs-vswitchd daemon |
4e375050 GS |
446 | will be lost. One way to restore the flows is to let the controller |
447 | re-populate it. Another way is to save the previous flows using a utility | |
448 | like ovs-ofctl and then re-add them after the restart. Restoring the old flows | |
449 | is accurate only if the new Open vSwitch interfaces retain the old 'ofport' | |
450 | values. | |
451 | ||
452 | 3. When the new userspace daemons get restarted, they automatically flush | |
453 | the old flows setup in the kernel. This can be expensive if there are hundreds | |
454 | of new flows that are entering the kernel but userspace daemons are busy | |
455 | setting up new userspace flows from either the controller or an utility like | |
456 | ovs-ofctl. Open vSwitch database provides an option to solve this problem | |
457 | through the other_config:flow-restore-wait column of the Open_vSwitch table. | |
458 | Refer to the ovs-vswitchd.conf.db(5) manpage for details. | |
459 | ||
460 | 4. If the upgrade also involves upgrading the kernel module, the old kernel | |
461 | module needs to be unloaded and the new kernel module should be loaded. This | |
462 | means that the kernel network devices belonging to Open vSwitch is recreated | |
463 | and the kernel flows are lost. The downtime of the traffic can be reduced | |
464 | if the userspace daemons are restarted immediately and the userspace flows | |
465 | are restored as soon as possible. | |
466 | ||
467 | The ovs-ctl utility's "restart" function only restarts the userspace daemons, | |
468 | makes sure that the 'ofport' values remain consistent across restarts, restores | |
469 | userspace flows using the ovs-ofctl utility and also uses the | |
470 | other_config:flow-restore-wait column to keep the traffic downtime to the | |
471 | minimum. The ovs-ctl utility's "force-reload-kmod" function does all of the | |
472 | above, but also replaces the old kernel module with the new one. Open vSwitch | |
473 | startup scripts for Debian, XenServer and RHEL use ovs-ctl's functions and it | |
474 | is recommended that these functions be used for other software platforms too. | |
475 | ||
e3c7ed29 BP |
476 | Testsuites |
477 | ========== | |
478 | ||
479 | This section describe Open vSwitch's built-in support for various test | |
e9e85443 | 480 | suites. You must bootstrap, configure and build Open vSwitch (steps are |
e3c7ed29 BP |
481 | in "Building and Installing Open vSwitch for Linux, FreeBSD or NetBSD" |
482 | above) before you run the tests described here. You do not need to | |
483 | install Open vSwitch or to build or load the kernel module to run | |
484 | these test suites. You do not need supervisor privilege to run these | |
485 | test suites. | |
875ef81b | 486 | |
e3c7ed29 BP |
487 | Self-Tests |
488 | ---------- | |
489 | ||
490 | Open vSwitch includes a suite of self-tests. Before you submit patches | |
875ef81b KM |
491 | upstream, we advise that you run the tests and ensure that they pass. |
492 | If you add new features to Open vSwitch, then adding tests for those | |
493 | features will ensure your features don't break as developers modify | |
494 | other areas of Open vSwitch. | |
495 | ||
e3c7ed29 | 496 | Refer to "Testsuites" above for prerequisites. |
875ef81b KM |
497 | |
498 | To run all the unit tests in Open vSwitch, one at a time: | |
542cc9bb | 499 | `make check` |
875ef81b KM |
500 | This takes under 5 minutes on a modern desktop system. |
501 | ||
502 | To run all the unit tests in Open vSwitch, up to 8 in parallel: | |
542cc9bb | 503 | `make check TESTSUITEFLAGS=-j8` |
875ef81b KM |
504 | This takes under a minute on a modern 4-core desktop system. |
505 | ||
506 | To see a list of all the available tests, run: | |
542cc9bb | 507 | `make check TESTSUITEFLAGS=--list` |
875ef81b KM |
508 | |
509 | To run only a subset of tests, e.g. test 123 and tests 477 through 484: | |
542cc9bb | 510 | `make check TESTSUITEFLAGS='123 477-484'` |
875ef81b KM |
511 | (Tests do not have inter-dependencies, so you may run any subset.) |
512 | ||
513 | To run tests matching a keyword, e.g. "ovsdb": | |
542cc9bb | 514 | `make check TESTSUITEFLAGS='-k ovsdb'` |
875ef81b KM |
515 | |
516 | To see a complete list of test options: | |
542cc9bb | 517 | `make check TESTSUITEFLAGS=--help` |
875ef81b KM |
518 | |
519 | The results of a testing run are reported in tests/testsuite.log. | |
520 | Please report test failures as bugs and include the testsuite.log in | |
521 | your report. | |
522 | ||
27de40d0 LR |
523 | If the build was configured with "--enable-coverage" and the "lcov" |
524 | utility is installed, you can run the testsuite and generate a code | |
525 | coverage report by using "make check-lcov". All of the options for | |
526 | TESTSUITEFLAGS are available, so you can e.g.: | |
527 | `make check-lcov TESTSUITEFLAGS=-j8 -k ovn` | |
528 | ||
875ef81b KM |
529 | If you have "valgrind" installed, then you can also run the testsuite |
530 | under valgrind by using "make check-valgrind" in place of "make | |
531 | check". All the same options are available via TESTSUITEFLAGS. When | |
542cc9bb TG |
532 | you do this, the "valgrind" results for test `<N>` are reported in files |
533 | named `tests/testsuite.dir/<N>/valgrind.*`. You may find that the | |
875ef81b | 534 | valgrind results are easier to interpret if you put "-q" in |
447fe5cf | 535 | ~/.valgrindrc, since that reduces the amount of output. |
875ef81b KM |
536 | |
537 | Sometimes a few tests may fail on some runs but not others. This is | |
538 | usually a bug in the testsuite, not a bug in Open vSwitch itself. If | |
539 | you find that a test fails intermittently, please report it, since the | |
0d3f2152 BP |
540 | developers may not have noticed. You can make the testsuite |
541 | automatically rerun tests that fail, by adding RECHECK=yes to the | |
542 | "make" command line, e.g.: | |
543 | `make check TESTSUITEFLAGS=-j8 RECHECK=yes` | |
875ef81b | 544 | |
e3c7ed29 BP |
545 | OFTest |
546 | ------ | |
547 | ||
548 | OFTest is an OpenFlow protocol testing suite. Open vSwitch includes a | |
549 | Makefile target to run OFTest with Open vSwitch in "dummy mode". In | |
550 | this mode of testing, no packets travel across physical or virtual | |
551 | networks. Instead, Unix domain sockets stand in as simulated | |
552 | networks. This simulation is imperfect, but it is much easier to set | |
553 | up, does not require extra physical or virtual hardware, and does not | |
554 | require supervisor privileges. | |
555 | ||
556 | To run OFTest with Open vSwitch, first read and follow the | |
557 | instructions under "Testsuites" above. Second, obtain a copy of | |
558 | OFTest and install its prerequisites. You need a copy of OFTest that | |
559 | includes commit 406614846c5 (make ovs-dummy platform work again). | |
560 | This commit was merged into the OFTest repository on Feb 1, 2013, so | |
561 | any copy of OFTest more recent than that should work. Testing OVS in | |
562 | dummy mode does not require root privilege, so you may ignore that | |
563 | requirement. | |
564 | ||
565 | Optionally, add the top-level OFTest directory (containing the "oft" | |
566 | program) to your $PATH. This slightly simplifies running OFTest later. | |
567 | ||
568 | To run OFTest in dummy mode, run the following command from your Open | |
569 | vSwitch build directory: | |
542cc9bb TG |
570 | `make check-oftest OFT=<oft-binary>` |
571 | where `<oft-binary>` is the absolute path to the "oft" program in | |
e3c7ed29 BP |
572 | OFTest. |
573 | ||
574 | If you added "oft" to your $PATH, you may omit the OFT variable | |
575 | assignment: | |
542cc9bb | 576 | `make check-oftest` |
e3c7ed29 BP |
577 | By default, "check-oftest" passes "oft" just enough options to enable |
578 | dummy mode. You can use OFTFLAGS to pass additional options. For | |
579 | example, to run just the basic.Echo test instead of all tests (the | |
580 | default) and enable verbose logging: | |
542cc9bb | 581 | `make check-oftest OFT=<oft-binary> OFTFLAGS='--verbose -T basic.Echo'` |
e3c7ed29 BP |
582 | |
583 | If you use OFTest that does not include commit 4d1f3eb2c792 (oft: | |
584 | change default port to 6653), merged into the OFTest repository in | |
585 | October 2013, then you need to add an option to use the IETF-assigned | |
586 | controller port: | |
542cc9bb | 587 | `make check-oftest OFT=<oft-binary> OFTFLAGS='--port=6653'` |
e3c7ed29 BP |
588 | |
589 | Please interpret OFTest results cautiously. Open vSwitch can fail a | |
590 | given test in OFTest for many reasons, including bugs in Open vSwitch, | |
591 | bugs in OFTest, bugs in the "dummy mode" integration, and differing | |
592 | interpretations of the OpenFlow standard and other standards. | |
593 | ||
594 | Open vSwitch has not been validated against OFTest. Please do report | |
595 | test failures that you believe to represent bugs in Open vSwitch. | |
596 | Include the precise versions of Open vSwitch and OFTest in your bug | |
597 | report, plus any other information needed to reproduce the problem. | |
598 | ||
599 | Ryu | |
600 | --- | |
601 | ||
602 | Ryu is an OpenFlow controller written in Python that includes an | |
603 | extensive OpenFlow testsuite. Open vSwitch includes a Makefile target | |
604 | to run Ryu in "dummy mode". See "OFTest" above for an explanation of | |
605 | dummy mode. | |
606 | ||
607 | To run Ryu tests with Open vSwitch, first read and follow the | |
608 | instructions under "Testsuites" above. Second, obtain a copy of Ryu, | |
609 | install its prerequisites, and build it. You do not need to install | |
610 | Ryu (some of the tests do not get installed, so it does not help). | |
611 | ||
612 | To run Ryu tests, run the following command from your Open vSwitch | |
613 | build directory: | |
542cc9bb TG |
614 | `make check-ryu RYUDIR=<ryu-source-dir>` |
615 | where `<ryu-source-dir>` is the absolute path to the root of the Ryu | |
616 | source distribution. The default `<ryu-source-dir>` is `$srcdir/../ryu` | |
e3c7ed29 | 617 | where $srcdir is your Open vSwitch source directory, so if this |
542cc9bb | 618 | default is correct then you make simply run `make check-ryu`. |
e3c7ed29 BP |
619 | |
620 | Open vSwitch has not been validated against Ryu. Please do report | |
621 | test failures that you believe to represent bugs in Open vSwitch. | |
622 | Include the precise versions of Open vSwitch and Ryu in your bug | |
623 | report, plus any other information needed to reproduce the problem. | |
624 | ||
6da51546 JS |
625 | Datapath testing |
626 | ---------------- | |
627 | ||
628 | Open vSwitch also includes a suite of tests specifically for datapath | |
629 | functionality, which can be run against the userspace or kernel datapaths. | |
630 | If you are developing datapath features, it is recommended that you use | |
631 | these tests and build upon them to verify your implementation. | |
1ce96d2a | 632 | |
6da51546 JS |
633 | The datapath tests make some assumptions about the environment. They |
634 | must be run under root privileges on a Linux system with support for | |
635 | network namespaces. For ease of use, the OVS source tree includes a | |
636 | vagrant box to invoke these tests. Running the tests inside Vagrant | |
637 | provides kernel isolation, protecting your development host from kernel | |
638 | panics or configuration conflicts in the testsuite. If you wish to run | |
639 | the tests without using the vagrant box, there are further instructions | |
640 | below. | |
641 | ||
642 | ### Vagrant | |
643 | ||
644 | *Requires Vagrant (version 1.7.0 or later) and a compatible hypervisor* | |
1ce96d2a | 645 | |
e9e85443 FL |
646 | You must bootstrap and configure the sources (steps are in "Building |
647 | and Installing Open vSwitch for Linux, FreeBSD or NetBSD" above) before | |
648 | you run the steps described here. | |
649 | ||
1ce96d2a | 650 | A Vagrantfile is provided allowing to compile and provision the source |
6da51546 | 651 | tree as found locally in a virtual machine using the following command: |
1ce96d2a TG |
652 | |
653 | vagrant up | |
1ce96d2a | 654 | |
6da51546 JS |
655 | This will bring up a Fedora 23 VM by default. If you wish to use a |
656 | different box or a vagrant backend not supported by the default box, | |
657 | the `Vagrantfile` can be modified to use a different box as base. | |
658 | ||
659 | The VM can be reprovisioned at any time: | |
1ce96d2a TG |
660 | |
661 | vagrant provision | |
662 | ||
b56b2566 AZ |
663 | OVS out-of-tree compilation environment can be set up with: |
664 | ||
665 | ./boot.sh | |
666 | vagrant provision --provision-with configure_ovs,build_ovs | |
667 | ||
6da51546 JS |
668 | This will set up an out-of-tree build environment inside the VM in |
669 | /root/build. The source code can be found in /vagrant. | |
b56b2566 | 670 | |
6da51546 | 671 | To recompile and reinstall OVS in the VM using RPM: |
b56b2566 AZ |
672 | |
673 | ./boot.sh | |
674 | vagrant provision --provision-with configure_ovs,install_rpm | |
675 | ||
548f9fe7 DDP |
676 | Two provisioners are included to run system tests with the OVS kernel |
677 | module or with a userspace datapath. This tests are different from | |
678 | the self-tests mentioned above. To run them: | |
679 | ||
680 | ./boot.sh | |
681 | vagrant provision --provision-with configure_ovs,test_ovs_kmod,test_ovs_system_userspace | |
682 | ||
6da51546 JS |
683 | The results of the testsuite reside in the VM root user's home directory: |
684 | ||
685 | vagrant ssh | |
686 | sudo -s | |
687 | cd /root/build | |
688 | ls tests/system* | |
689 | ||
690 | ### Native | |
691 | ||
692 | The datapath testsuite as invoked by Vagrant above may also be run | |
693 | manually on a Linux system with root privileges. These tests may take | |
694 | several minutes to complete, and cannot be run in parallel. | |
695 | ||
696 | #### Userspace datapath | |
697 | ||
698 | To invoke the datapath testsuite with the userspace datapath: | |
699 | ||
700 | make check-system-userspace | |
701 | ||
702 | The results of the testsuite are in tests/system-userspace-traffic.dir/. | |
703 | ||
704 | #### Kernel datapath | |
705 | ||
706 | Make targets are also provided for testing the Linux kernel module. | |
707 | Note that these tests operate by inserting modules into the running | |
708 | Linux kernel, so if the tests are able to trigger a bug in the OVS | |
709 | kernel module or in the upstream kernel then the kernel may panic. | |
710 | ||
711 | To run the testsuite against the kernel module which is currently | |
712 | installed on your system: | |
713 | ||
714 | make check-kernel | |
715 | ||
716 | To install the kernel module from the current build directory and | |
717 | run the testsuite against that kernel module: | |
718 | ||
719 | make check-kmod | |
720 | ||
721 | The results of the testsuite are in tests/system-kmod-traffic.dir/. | |
722 | ||
8187f55b TG |
723 | Continuous Integration with Travis-CI |
724 | ------------------------------------- | |
725 | ||
726 | A .travis.yml file is provided to automatically build Open vSwitch with | |
727 | various build configurations and run the testsuite using travis-ci. | |
728 | Builds will be performed with gcc, sparse and clang with the -Werror | |
729 | compiler flag included, therefore the build will fail if a new warning | |
730 | has been introduced. | |
731 | ||
732 | The CI build is triggered via git push (regardless of the specific | |
733 | branch) or pull request against any Open vSwitch GitHub repository that | |
734 | is linked to travis-ci. | |
735 | ||
736 | Instructions to setup travis-ci for your GitHub repository: | |
737 | ||
35ab726f | 738 | 1. Go to http://travis-ci.org/ and sign in using your GitHub ID. |
8187f55b TG |
739 | 2. Go to the "Repositories" tab and enable the ovs repository. You |
740 | may disable builds for pushes or pull requests. | |
741 | 3. In order to avoid forks sending build failures to the upstream | |
742 | mailing list, the notification email recipient is encrypted. If you | |
743 | want to receive email notification for build failures, replace the | |
744 | the encrypted string: | |
745 | 3.1) Install the travis-ci CLI (Requires ruby >=2.0): | |
746 | gem install travis | |
747 | 3.2) In your Open vSwitch repository: | |
748 | travis encrypt mylist@mydomain.org | |
749 | 3.3) Add/replace the notifications section in .travis.yml and fill | |
750 | in the secure string as returned by travis encrypt: | |
751 | ||
752 | notifications: | |
753 | email: | |
754 | recipients: | |
755 | - secure: "....." | |
756 | ||
757 | (You may remove/omit the notifications section to fall back to | |
758 | default notification behaviour which is to send an email directly | |
759 | to the author and committer of the failing commit. Note that the | |
760 | email is only sent if the author/committer have commit rights for | |
761 | the particular GitHub repository). | |
762 | ||
763 | 4. Pushing a commit to the repository which breaks the build or the | |
764 | testsuite will now trigger a email sent to mylist@mydomain.org | |
765 | ||
30b79363 BB |
766 | Static Code Analysis |
767 | -------------------- | |
768 | ||
769 | Static Analysis is a method of debugging Software by examining code rather | |
770 | than actually executing it. This can be done through 'scan-build' commandline | |
771 | utility which internally uses clang (or) gcc to compile the code and also | |
772 | invokes a static analyzer to do the code analysis. At the end of the build, the | |
773 | reports are aggregated in to a common folder and can later be analyzed using | |
774 | 'scan-view'. | |
775 | ||
776 | Open vSwitch includes a Makefile target to trigger static code Analysis and | |
777 | the instructions are below. | |
778 | ||
779 | 1. ./boot.sh | |
780 | 2. ./configure CC=clang (when using clang compiler) | |
781 | ./configure CC=gcc CFLAGS="-std=gnu99" (when using GCC) | |
782 | 3. make clang-analyze | |
783 | ||
784 | You should invoke scan-view to view analysis results. The last line of output | |
785 | from 'make clang-analyze' shall list the command (containing results directory) | |
786 | that you should invoke to view the results on a browser. | |
787 | ||
4b11d5e8 | 788 | Bug Reporting |
e3c7ed29 | 789 | ============= |
4b11d5e8 | 790 | |
37ea6436 | 791 | Please report problems to bugs@openvswitch.org. |
9feb1017 TG |
792 | |
793 | [README.md]:README.md | |
794 | [INSTALL.Debian.md]:INSTALL.Debian.md | |
795 | [INSTALL.Fedora.md]:INSTALL.Fedora.md | |
796 | [INSTALL.RHEL.md]:INSTALL.RHEL.md | |
797 | [INSTALL.XenServer.md]:INSTALL.XenServer.md | |
798 | [INSTALL.NetBSD.md]:INSTALL.NetBSD.md | |
7c7f2d77 | 799 | [INSTALL.Windows.md]:INSTALL.Windows.md |
9feb1017 TG |
800 | [INSTALL.DPDK.md]:INSTALL.DPDK.md |
801 | [INSTALL.userspace.md]:INSTALL.userspace.md | |
802 | [FAQ.md]:FAQ.md |