diff options
Diffstat (limited to 'INSTALL.rst')
-rw-r--r-- | INSTALL.rst | 872 |
1 files changed, 872 insertions, 0 deletions
diff --git a/INSTALL.rst b/INSTALL.rst new file mode 100644 index 000000000..2b7f9b174 --- /dev/null +++ b/INSTALL.rst @@ -0,0 +1,872 @@ +.. + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + + Convention for heading levels in Open vSwitch documentation: + + ======= Heading 0 (reserved for the title in a document) + ------- Heading 1 + ~~~~~~~ Heading 2 + +++++++ Heading 3 + ''''''' Heading 4 + + Avoid deeper levels because they do not render well. + +========================================= +Open vSwitch on Linux, FreeBSD and NetBSD +========================================= + +This document describes how to build and install Open vSwitch on a generic +Linux, FreeBSD, or NetBSD host. For specifics around installation on a specific +platform, refer to one of these installation guides: + +- `Debian <INSTALL.Debian.md>`__ +- `Fedora <INSTALL.Fedora.md>`__ +- `RHEL <INSTALL.RHEL.md>`__ +- `XenServer <INSTALL.XenServer.md>`__ +- `NetBSD <INSTALL.NetBSD.md>`__ +- `Windows <INSTALL.Windows.md>`__ +- `DPDK <INSTALL.DPDK.md>`__ + +.. _general-build-reqs: + +Build Requirements +------------------ + +To compile the userspace programs in the Open vSwitch distribution, you will +need the following software: + +- GNU make + +- A C compiler, such as: + + - GCC 4.x. + + - Clang. Clang 3.4 and later provide useful static semantic analysis and + thread-safety checks. For Ubuntu, there are nightly built packages + available on clang's website. + + - MSVC 2013. See the `Windows installation guide <INSTALL.Windows>`__ + for additional Windows build instructions. + + While OVS may be compatible with other compilers, optimal support for atomic + operations may be missing, making OVS very slow (see ``lib/ovs-atomic.h``). + +- libssl, from OpenSSL, is optional but recommended if you plan to connect the + Open vSwitch to an OpenFlow controller. libssl is required to establish + confidentiality and authenticity in the connections from an Open vSwitch to + an OpenFlow controller. If libssl is installed, then Open vSwitch will + automatically build with support for it. + +- libcap-ng, written by Steve Grubb, is optional but recommended. It is + required to run OVS daemons as a non-root user with dropped root privileges. + If libcap-ng is installed, then Open vSwitch will automatically build with + support for it. + +- Python 2.7. You must also have the Python ``six`` library. + +On Linux, you may choose to compile the kernel module that comes with the Open +vSwitch distribution or to use the kernel module built into the Linux kernel +(version 3.3 or later). See the `FAQ <FAQ.md>`__ question "What features +are not available in the Open vSwitch kernel datapath that ships as part of the +upstream Linux kernel?" for more information on this trade-off. You may also +use the userspace-only implementation, at some cost in features and performance +(see the `userspace installation guide <INSTALL.userspace.md>`__ for +details). + +To compile the kernel module on Linux, you must also install the +following: + +- A supported Linux kernel version. Refer to the `README <README.md>`__ + for a list of supported versions. + + For optional support of ingress policing, you must enable kernel + configuration options ``NET_CLS_BASIC``, ``NET_SCH_INGRESS``, and + ``NET_ACT_POLICE``, either built-in or as modules. ``NET_CLS_POLICE`` is + obsolete and not needed.) + + On kernels before 3.11, the ``ip_gre`` module, for GRE tunnels over IP + (``NET_IPGRE``), must not be loaded or compiled in. + + To configure HTB or HFSC quality of service with Open vSwitch, you must + enable the respective configuration options. + + To use Open vSwitch support for TAP devices, you must enable ``CONFIG_TUN``. + +- To build a kernel module, you need the same version of GCC that was used to + build that kernel. + +- A kernel build directory corresponding to the Linux kernel image the module + is to run on. Under Debian and Ubuntu, for example, each linux-image package + containing a kernel binary has a corresponding linux-headers package with + the required build infrastructure. + +If you are working from a Git tree or snapshot (instead of from a distribution +tarball), or if you modify the Open vSwitch build system or the database +schema, you will also need the following software: + +- Autoconf version 2.63 or later. + +- Automake version 1.10 or later. + +- libtool version 2.4 or later. (Older versions might work too.) + +To run the unit tests, you also need: + +- Perl. Version 5.10.1 is known to work. Earlier versions should also + work. + +The datapath tests for userspace and Linux datapaths also rely upon: + +- pyftpdlib. Version 1.2.0 is known to work. Earlier versions should + also work. + +- GNU wget. Version 1.16 is known to work. Earlier versions should also + work. + +The ovs-vswitchd.conf.db(5) manpage will include an E-R diagram, in formats +other than plain text, only if you have the following: + +- dot from graphviz (http://www.graphviz.org/). + +- Perl. Version 5.10.1 is known to work. Earlier versions should also + work. + +If you are going to extensively modify Open vSwitch, consider installing the +following to obtain better warnings: + +- "sparse" version 0.4.4 or later + (http://www.kernel.org/pub/software/devel/sparse/dist/). + +- GNU make. + +- clang, version 3.4 or later + +- flake8, version 2.X, along with the hacking flake8 plugin (for Python code). + The automatic flake8 check that runs against Python code has some warnings + enabled that come from the "hacking" flake8 plugin. If it's not installed, + the warnings just won't occur until it's run on a system with "hacking" + installed. Note that there are problems with flake8 3.0 and the "hacking" + plugin. To ensure you get flake8 2.X, you can use:: + + $ pip install 'flake8<3.0' + +You may find the ovs-dev script found in ``utilities/ovs-dev.py`` useful. + +.. _general-install-reqs: + +Installation Requirements +------------------------- + +The machine you build Open vSwitch on may not be the one you run it on. To +simply install and run Open vSwitch you require the following software: + +- libc compatible with the libc used for build. + +- libssl compatible with the libssl used for build, if OpenSSL was used + for the build. + +- On Linux, the same kernel version configured as part of the build. + +- For optional support of ingress policing on Linux, the "tc" program + from iproute2 (part of all major distributions and available at + http://www.linux-foundation.org/en/Net:Iproute2). + +- Python 2.7. You must also have the Python six library. + +On Linux you should ensure that ``/dev/urandom`` exists. To support TAP +devices, you must also ensure that ``/dev/net/tun`` exists. + +.. _general-bootstrapping: + +Bootstrapping +------------- + +This step is not needed if you have downloaded a released tarball. If +you pulled the sources directly from an Open vSwitch Git tree or got a +Git tree snapshot, then run boot.sh in the top source directory to build +the "configure" script:: + + $ ./boot.sh + +.. _general-configuring: + +Configuring +----------- + +Configure the package by running the configure script. You can usually +invoke configure without any arguments. For example:: + + $ ./configure + +By default all files are installed under ``/usr/local``. Open vSwitch also +expects to find its database in ``/usr/local/etc/openvswitch`` by default. If +you want to install all files into, e.g., ``/usr`` and ``/var`` instead of +``/usr/local`` and ``/usr/local/var`` and expect to use ``/etc/openvswitch`` as +the default database directory, add options as shown here:: + + $ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc + +.. note:: + + Open vSwitch installed with packages like .rpm (e.g. via ``yum install`` or + ``rpm -ivh``) and .deb (e.g. via ``apt-get install`` or ``dpkg -i``) use the + above configure options. + +By default, static libraries are built and linked against. If you want to use +shared libraries instead:: + + $ ./configure --enable-shared + +To use a specific C compiler for compiling Open vSwitch user programs, also +specify it on the configure command line, like so:: + + $ ./configure CC=gcc-4.2 + +To use 'clang' compiler:: + + $ ./configure CC=clang + +To supply special flags to the C compiler, specify them as ``CFLAGS`` on the +configure command line. If you want the default CFLAGS, which include ``-g`` to +build debug symbols and ``-O2`` to enable optimizations, you must include them +yourself. For example, to build with the default CFLAGS plus ``-mssse3``, you +might run configure as follows:: + + $ ./configure CFLAGS="-g -O2 -mssse3" + +For efficient hash computation special flags can be passed to leverage built-in +intrinsics. For example on X86_64 with SSE4.2 instruction set support, CRC32 +intrinsics can be used by passing ``-msse4.2``:: + + $ ./configure CFLAGS="-g -O2 -msse4.2"` + +If you are on a different processor and don't know what flags to choose, it is +recommended to use ``-march=native`` settings:: + + $ ./configure CFLAGS="-g -O2 -march=native" + +With this, GCC will detect the processor and automatically set appropriate +flags for it. This should not be used if you are compiling OVS outside the +target machine. + +.. note:: + CFLAGS are not applied when building the Linux kernel module. Custom CFLAGS + for the kernel module are supplied using the ``EXTRA_CFLAGS`` variable when + running make. For example:: + + $ make EXTRA_CFLAGS="-Wno-error=date-time" + +To build the Linux kernel module, so that you can run the kernel-based switch, +pass the location of the kernel build directory on ``--with-linux``. For +example, to build for a running instance of Linux:: + + $ ./configure --with-linux=/lib/modules/$(uname -r)/build + +.. note:: + If ``--with-linux`` requests building for an unsupported version of Linux, + then ``configure`` will fail with an error message. Refer to the `FAQ + <FAQ.md>`__ for advice in that case. + +If you wish to build the kernel module for an architecture other than the +architecture of the machine used for the build, you may specify the kernel +architecture string using the KARCH variable when invoking the configure +script. For example, to build for MIPS with Linux:: + + $ ./configure --with-linux=/path/to/linux KARCH=mips + +If you plan to do much Open vSwitch development, you might want to add +``--enable-Werror``, which adds the ``-Werror`` option to the compiler command +line, turning warnings into errors. That makes it impossible to miss warnings +generated by the build. For example:: + + $ ./configure --enable-Werror + +To build with gcov code coverage support, add ``--enable-coverage``:: + + $ ./configure --enable-coverage + +The configure script accepts a number of other options and honors additional +environment variables. For a full list, invoke configure with the ``--help`` +option:: + + $ ./configure --help + +You can also run configure from a separate build directory. This is helpful if +you want to build Open vSwitch in more than one way from a single source +directory, e.g. to try out both GCC and Clang builds, or to build kernel +modules for more than one Linux version. For example:: + + $ mkdir _gcc && (cd _gcc && ./configure CC=gcc) + $ mkdir _clang && (cd _clang && ./configure CC=clang) + +Under certains loads the ovsdb-server and other components perform better when +using the jemalloc memory allocator, instead of the glibc memory allocator. If +you wish to link with jemalloc add it to LIBS:: + + $ ./configure LIBS=-ljemalloc + +.. _general-building: + +Building +-------- + +1. Run GNU make in the build directory, e.g.:: + + $ make + + or if GNU make is installed as "gmake":: + + $ gmake + + If you used a separate build directory, run make or gmake from that + directory, e.g.:: + + $ make -C _gcc + $ make -C _clang + + For improved warnings if you installed ``sparse`` (see "Prerequisites"), add + ``C=1`` to the command line. + + .. note:: + Some versions of Clang and ccache are not completely compatible. If you + see unusual warnings when you use both together, consider disabling + ccache. + +2. Consider running the testsuite. Refer to **Testing** for instructions. + +3. Run ``make install`` to install the executables and manpages into the + running system, by default under ``/usr/local``:: + + $ make install + +5. If you built kernel modules, you may install them, e.g.:: + + $ make modules_install + + It is possible that you already had a Open vSwitch kernel module installed + on your machine that came from upstream Linux (in a different directory). To + make sure that you load the Open vSwitch kernel module you built from this + repository, you should create a ``depmod.d`` file that prefers your newly + installed kernel modules over the kernel modules from upstream Linux. The + following snippet of code achieves the same:: + + $ config_file="/etc/depmod.d/openvswitch.conf" + $ for module in datapath/linux/*.ko; do + modname="$(basename ${module})" + echo "override ${modname%.ko} * extra" >> "$config_file" + echo "override ${modname%.ko} * weak-updates" >> "$config_file" + done + $ depmod -a + + Finally, load the kernel modules that you need. e.g.:: + + $ /sbin/modprobe openvswitch + + To verify that the modules have been loaded, run ``/sbin/lsmod`` and check + that openvswitch is listed:: + + $ /sbin/lsmod | grep openvswitch + + .. note:: + If the ``modprobe`` operation fails, look at the last few kernel log + messages (e.g. with ``dmesg | tail``). Generally, issues like this occur + when Open vSwitch is built for a kernel different from the one into which + you are trying to load it. Run ``modinfo`` on ``openvswitch.ko`` and on a + module built for the running kernel, e.g.:: + + $ /sbin/modinfo openvswitch.ko + $ /sbin/modinfo /lib/modules/$(uname -r)/kernel/net/bridge/bridge.ko + + Compare the "vermagic" lines output by the two commands. If they differ, + then Open vSwitch was built for the wrong kernel. + + If you decide to report a bug or ask a question related to module loading, + include the output from the ``dmesg`` and ``modinfo`` commands mentioned + above. + +.. _general-starting: + +Starting +-------- + +Before starting ovs-vswitchd itself, you need to start its configuration +database, ovsdb-server. Each machine on which Open vSwitch is installed should +run its own copy of ovsdb-server. Before ovsdb-server itself can be started, +configure a database that it can use:: + + $ mkdir -p /usr/local/etc/openvswitch + $ ovsdb-tool create /usr/local/etc/openvswitch/conf.db \ + vswitchd/vswitch.ovsschema + +Configure ovsdb-server to use database created above, to listen on a Unix +domain socket, to connect to any managers specified in the database itself, and +to use the SSL configuration in the database:: + + $ mkdir -p /usr/local/var/run/openvswitch + $ ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \ + --remote=db:Open_vSwitch,Open_vSwitch,manager_options \ + --private-key=db:Open_vSwitch,SSL,private_key \ + --certificate=db:Open_vSwitch,SSL,certificate \ + --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \ + --pidfile --detach + +.. note:: + If you built Open vSwitch without SSL support, then omit ``--private-key``, + ``--certificate``, and ``--bootstrap-ca-cert``.) + +Initialize the database using ovs-vsctl. This is only necessary the first time +after you create the database with ovsdb-tool, though running it at any time is +harmless:: + + $ ovs-vsctl --no-wait init + +Start the main Open vSwitch daemon, telling it to connect to the same Unix +domain socket:: + + $ ovs-vswitchd --pidfile --detach + +Validating +---------- + +At this point you can use ovs-vsctl to set up bridges and other Open vSwitch +features. For example, to create a bridge named ``br0`` and add ports ``eth0`` +and ``vif1.0`` to it:: + + $ ovs-vsctl add-br br0 + $ ovs-vsctl add-port br0 eth0 + $ ovs-vsctl add-port br0 vif1.0 + +Refer to ovs-vsctl(8) for more details. + +Upgrading +--------- + +When you upgrade Open vSwitch from one version to another you should also +upgrade the database schema: + +1. Stop the Open vSwitch daemons, e.g.:: + + $ kill `cd /usr/local/var/run/openvswitch && cat ovsdb-server.pid ovs-vswitchd.pid` + +2. Install the new Open vSwitch release by using the same configure options as + was used for installing the previous version. If you do not use the same + configure options, you can end up with two different versions of Open + vSwitch executables installed in different locations. + +3. Upgrade the database, in one of the following two ways: + + - If there is no important data in your database, then you may delete the + database file and recreate it with ovsdb-tool, following the instructions + under "Building and Installing Open vSwitch for Linux, FreeBSD or NetBSD". + + - If you want to preserve the contents of your database, back it up first, + then use ``ovsdb-tool convert`` to upgrade it, e.g.:: + + $ ovsdb-tool convert /usr/local/etc/openvswitch/conf.db \ + vswitchd/vswitch.ovsschema + +4. Start the Open vSwitch daemons as described under **Starting** above. + +Hot Upgrading +------------- + +Upgrading Open vSwitch from one version to the next version with minimum +disruption of traffic going through the system that is using that Open vSwitch +needs some considerations: + +1. If the upgrade only involves upgrading the userspace utilities and daemons + of Open vSwitch, make sure that the new userspace version is compatible with + the previously loaded kernel module. + +2. An upgrade of userspace daemons means that they have to be restarted. + Restarting the daemons means that the OpenFlow flows in the ovs-vswitchd + daemon will be lost. One way to restore the flows is to let the controller + re-populate it. Another way is to save the previous flows using a utility + like ovs-ofctl and then re-add them after the restart. Restoring the old + flows is accurate only if the new Open vSwitch interfaces retain the old + 'ofport' values. + +3. When the new userspace daemons get restarted, they automatically flush the + old flows setup in the kernel. This can be expensive if there are hundreds + of new flows that are entering the kernel but userspace daemons are busy + setting up new userspace flows from either the controller or an utility like + ovs-ofctl. Open vSwitch database provides an option to solve this problem + through the ``other_config:flow-restore-wait`` column of the + ``Open_vSwitch`` table. Refer to the ovs-vswitchd.conf.db(5) manpage for + details. + +4. If the upgrade also involves upgrading the kernel module, the old kernel + module needs to be unloaded and the new kernel module should be loaded. This + means that the kernel network devices belonging to Open vSwitch is recreated + and the kernel flows are lost. The downtime of the traffic can be reduced if + the userspace daemons are restarted immediately and the userspace flows are + restored as soon as possible. + +The ovs-ctl utility's ``restart`` function only restarts the userspace daemons, +makes sure that the 'ofport' values remain consistent across restarts, restores +userspace flows using the ovs-ofctl utility and also uses the +``other_config:flow-restore-wait`` column to keep the traffic downtime to the +minimum. The ovs-ctl utility's ``force-reload-kmod`` function does all of the +above, but also replaces the old kernel module with the new one. Open vSwitch +startup scripts for Debian, XenServer and RHEL use ovs-ctl's functions and it +is recommended that these functions be used for other software platforms too. + +.. _general-testing: + +Testing +------- + +This section describe Open vSwitch's built-in support for various test +suites. You must bootstrap, configure and build Open vSwitch (steps are +in "Building and Installing Open vSwitch for Linux, FreeBSD or NetBSD" +above) before you run the tests described here. You do not need to +install Open vSwitch or to build or load the kernel module to run these +test suites. You do not need supervisor privilege to run these test +suites. + +Unit Tests +~~~~~~~~~~ + +Open vSwitch includes a suite of self-tests. Before you submit patches +upstream, we advise that you run the tests and ensure that they pass. If you +add new features to Open vSwitch, then adding tests for those features will +ensure your features don't break as developers modify other areas of Open +vSwitch. + +To run all the unit tests in Open vSwitch, one at a time, run:: + + $ make check + +This takes under 5 minutes on a modern desktop system. + +To run all the unit tests in Open vSwitch in parallel, run:: + + $ make check TESTSUITEFLAGS=-j8 + +You can run up to eight threads. This takes under a minute on a modern 4-core +desktop system. + +To see a list of all the available tests, run: + + $ make check TESTSUITEFLAGS=--list + +To run only a subset of tests, e.g. test 123 and tests 477 through 484, run:: + + $ make check TESTSUITEFLAGS='123 477-484' + +Tests do not have inter-dependencies, so you may run any subset. + +To run tests matching a keyword, e.g. ``ovsdb``, run:: + + $ make check TESTSUITEFLAGS='-k ovsdb' + +To see a complete list of test options, run:: + + $ make check TESTSUITEFLAGS=--help + +The results of a testing run are reported in ``tests/testsuite.log``. Report +report test failures as bugs and include the ``testsuite.log`` in your report. + +.. note:: + Sometimes a few tests may fail on some runs but not others. This is usually a + bug in the testsuite, not a bug in Open vSwitch itself. If you find that a + test fails intermittently, please report it, since the developers may not + have noticed. You can make the testsuite automatically rerun tests that fail, + by adding ``RECHECK=yes`` to the ``make`` command line, e.g.:: + + $ make check TESTSUITEFLAGS=-j8 RECHECK=yes + +Coverage +++++++++ + +If the build was configured with ``--enable-coverage`` and the ``lcov`` utility +is installed, you can run the testsuite and generate a code coverage report by +using the ``check-lcoc`` target:: + + $ make check-lcov + +All the same options are avaiable via TESTSUITEFLAGS. For example:: + + $ make check-lcov TESTSUITEFLAGS=-j8 -k ovn + +Valgrind +++++++++ + +If you have ``valgrind`` installed, you can run the testsuite under +valgrind by using the ``check-valgrind`` target:: + + $ make check-valgrind + +When you do this, the "valgrind" results for test ``<N>`` are reported in files +named ``tests/testsuite.dir/<N>/valgrind.*``. + +All the same options are available via TESTSUITEFLAGS. + +.. hint:: + You may find that the valgrind results are easier to interpret if you put + ``-q`` in ``~/.valgrindrc``, since that reduces the amount of output. + +.. _general-oftest: + +OFTest +~~~~~~ + +OFTest is an OpenFlow protocol testing suite. Open vSwitch includes a Makefile +target to run OFTest with Open vSwitch in "dummy mode". In this mode of +testing, no packets travel across physical or virtual networks. Instead, Unix +domain sockets stand in as simulated networks. This simulation is imperfect, +but it is much easier to set up, does not require extra physical or virtual +hardware, and does not require supervisor privileges. + +To run OFTest with Open vSwitch, first read and follow the instructions under +**Testing** above. Second, obtain a copy of OFTest and install its +prerequisites. You need a copy of OFTest that includes commit 406614846c5 (make +ovs-dummy platform work again). This commit was merged into the OFTest +repository on Feb 1, 2013, so any copy of OFTest more recent than that should +work. Testing OVS in dummy mode does not require root privilege, so you may +ignore that requirement. + +Optionally, add the top-level OFTest directory (containing the ``oft`` program) +to your ``$PATH``. This slightly simplifies running OFTest later. + +To run OFTest in dummy mode, run the following command from your Open vSwitch +build directory:: + + $ make check-oftest OFT=<oft-binary> + +where ``<oft-binary>`` is the absolute path to the ``oft`` program in OFTest. +If you added "oft" to your $PATH, you may omit the OFT variable +assignment + +By default, ``check-oftest`` passes ``oft`` just enough options to enable dummy +mode. You can use ``OFTFLAGS`` to pass additional options. For example, to run +just the ``basic.Echo`` test instead of all tests (the default) and enable +verbose logging, run:: + + $ make check-oftest OFT=<oft-binary> OFTFLAGS='--verbose -T basic.Echo' + +If you use OFTest that does not include commit 4d1f3eb2c792 (oft: change +default port to 6653), merged into the OFTest repository in October 2013, then +you need to add an option to use the IETF-assigned controller port:: + + $ make check-oftest OFT=<oft-binary> OFTFLAGS='--port=6653' + +Interpret OFTest results cautiously. Open vSwitch can fail a given test in +OFTest for many reasons, including bugs in Open vSwitch, bugs in OFTest, bugs +in the "dummy mode" integration, and differing interpretations of the OpenFlow +standard and other standards. + +.. note:: + Open vSwitch has not been validated against OFTest. Report test failures that + you believe to represent bugs in Open vSwitch. Include the precise versions + of Open vSwitch and OFTest in your bug report, plus any other information + needed to reproduce the problem. + +Ryu +~~~ + +Ryu is an OpenFlow controller written in Python that includes an extensive +OpenFlow testsuite. Open vSwitch includes a Makefile target to run Ryu in +"dummy mode". See **OFTest** above for an explanation of dummy mode. + +To run Ryu tests with Open vSwitch, first read and follow the instructions +under **Testing** above. Second, obtain a copy of Ryu, install its +prerequisites, and build it. You do not need to install Ryu (some of the tests +do not get installed, so it does not help). + +To run Ryu tests, run the following command from your Open vSwitch build +directory:: + + $ make check-ryu RYUDIR=<ryu-source-dir>`` + +where ``<ryu-source-dir>`` is the absolute path to the root of the Ryu source +distribution. The default ``<ryu-source-dir>`` is ``$srcdir/../ryu`` +where ``$srcdir`` is your Open vSwitch source directory. If this is correct, +omit ``RYUDIR`` + +.. note:: + Open vSwitch has not been validated against Ryu. Report test failures that + you believe to represent bugs in Open vSwitch. Include the precise versions + of Open vSwitch and Ryu in your bug report, plus any other information + needed to reproduce the problem. + +Datapath testing +~~~~~~~~~~~~~~~~ + +Open vSwitch includes a suite of tests specifically for datapath functionality, +which can be run against the userspace or kernel datapaths. If you are +developing datapath features, it is recommended that you use these tests and +build upon them to verify your implementation. + +The datapath tests make some assumptions about the environment. They must be +run under root privileges on a Linux system with support for network +namespaces. For ease of use, the OVS source tree includes a vagrant box to +invoke these tests. Running the tests inside Vagrant provides kernel isolation, +protecting your development host from kernel panics or configuration conflicts +in the testsuite. If you wish to run the tests without using the vagrant box, +there are further instructions below. + +Vagrant ++++++++ + +.. important:: + + Requires Vagrant (version 1.7.0 or later) and a compatible hypervisor + +.. note:: + You must **Bootstrap** and **Configure** the sources before you run the steps + described here. + +A Vagrantfile is provided allowing to compile and provision the source tree as +found locally in a virtual machine using the following command:: + + $ vagrant up + +This will bring up a Fedora 23 VM by default. If you wish to use a different +box or a vagrant backend not supported by the default box, the ``Vagrantfile`` +can be modified to use a different box as base. + +The VM can be reprovisioned at any time:: + + $ vagrant provision + +OVS out-of-tree compilation environment can be set up with:: + + $ ./boot.sh + $ vagrant provision --provision-with configure_ovs,build_ovs + +This will set up an out-of-tree build environment inside the VM in +``/root/build``. The source code can be found in ``/vagrant``. + +To recompile and reinstall OVS in the VM using RPM:: + + $ ./boot.sh + $ vagrant provision --provision-with configure_ovs,install_rpm + +Two provisioners are included to run system tests with the OVS kernel module or +with a userspace datapath. This tests are different from the self-tests +mentioned above. To run them:: + + $ ./boot.sh + $ vagrant provision --provision-with \ + configure_ovs,test_ovs_kmod,test_ovs_system_userspace + +The results of the testsuite reside in the VM root user's home directory:: + + $ vagrant ssh + $ sudo -s + $ cd /root/build + $ ls tests/system* + +Native +++++++ + +The datapath testsuite as invoked by Vagrant above may also be run manually on +a Linux system with root privileges. These tests may take several minutes to +complete, and cannot be run in parallel. + +Userspace datapath +''''''''''''''''''' + +To invoke the datapath testsuite with the userspace datapath, run:: + + $ make check-system-userspace + +The results of the testsuite are in ``tests/system-userspace-traffic.dir``. + +Kernel datapath +''''''''''''''' + +Make targets are also provided for testing the Linux kernel module. Note that +these tests operate by inserting modules into the running Linux kernel, so if +the tests are able to trigger a bug in the OVS kernel module or in the upstream +kernel then the kernel may panic. + +To run the testsuite against the kernel module which is currently installed on +your system, run:: + + $ make check-kernel + +To install the kernel module from the current build directory and run the +testsuite against that kernel module:: + + $ make check-kmod + +The results of the testsuite are in ``tests/system-kmod-traffic.dir``. + +Continuous Integration with Travis-CI +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A .travis.yml file is provided to automatically build Open vSwitch with various +build configurations and run the testsuite using travis-ci. Builds will be +performed with gcc, sparse and clang with the -Werror compiler flag included, +therefore the build will fail if a new warning has been introduced. + +The CI build is triggered via git push (regardless of the specific branch) or +pull request against any Open vSwitch GitHub repository that is linked to +travis-ci. + +Instructions to setup travis-ci for your GitHub repository: + +1. Go to http://travis-ci.org/ and sign in using your GitHub ID. +2. Go to the "Repositories" tab and enable the ovs repository. You may disable + builds for pushes or pull requests. +3. In order to avoid forks sending build failures to the upstream mailing list, + the notification email recipient is encrypted. If you want to receive email + notification for build failures, replace the the encrypted string: + + 1. Install the travis-ci CLI (Requires ruby >=2.0): gem install travis + 2. In your Open vSwitch repository: travis encrypt mylist@mydomain.org + 3. Add/replace the notifications section in .travis.yml and fill in the + secure string as returned by travis encrypt:: + + notifications: + email: + recipients: + - secure: "....." + + .. note:: + You may remove/omit the notifications section to fall back to default + notification behaviour which is to send an email directly to the author and + committer of the failing commit. Note that the email is only sent if the + author/committer have commit rights for the particular GitHub repository. + +4. Pushing a commit to the repository which breaks the build or the + testsuite will now trigger a email sent to mylist@mydomain.org + +Static Code Analysis +~~~~~~~~~~~~~~~~~~~~ + +Static Analysis is a method of debugging Software by examining code rather than +actually executing it. This can be done through 'scan-build' commandline +utility which internally uses clang (or) gcc to compile the code and also +invokes a static analyzer to do the code analysis. At the end of the build, the +reports are aggregated in to a common folder and can later be analyzed using +'scan-view'. + +Open vSwitch includes a Makefile target to trigger static code analysis:: + + $ ./boot.sh + $ ./configure CC=clang # clang + # or + $ ./configure CC=gcc CFLAGS="-std=gnu99" # gcc + $ make clang-analyze + +You should invoke scan-view to view analysis results. The last line of output +from ``clang-analyze`` will list the command (containing results directory) +that you should invoke to view the results on a browser. + +Bug Reporting +------------- + +Please report problems to bugs@openvswitch.org. |