rename myslice => example_slice
[sliver-openvswitch.git] / FAQ
diff --git a/FAQ b/FAQ
index 15fb694..1a2c4f8 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -133,10 +133,10 @@ Q: What Linux kernel versions does each Open vSwitch release work with?
 A: The following table lists the Linux kernel versions against which the
    given versions of the Open vSwitch kernel module will successfully
    build.  The Linux kernel versions are upstream kernel versions, so
-   modified Linux kernels modified from the upstream sources may not
-   build in some cases even if they are based on a supported version.
-   This is most notably true of Red Hat Enterprise Linux (RHEL) kernels,
-   which are extensively modified from upstream.
+   Linux kernels modified from the upstream sources may not build in
+   some cases even if they are based on a supported version.  This is
+   most notably true of Red Hat Enterprise Linux (RHEL) kernels, which
+   are extensively modified from upstream.
 
    Open vSwitch   Linux kernel
    ------------   -------------
@@ -145,7 +145,7 @@ A: The following table lists the Linux kernel versions against which the
        1.6.x      2.6.18 to 3.2
        1.7.x      2.6.18 to 3.3
        1.8.x      2.6.18 to 3.4
-       1.9.x      2.6.18 to 3.6
+       1.9.x      2.6.18 to 3.8
 
    Open vSwitch userspace should also work with the Linux kernel module
    built into Linux 3.3 and later.
@@ -154,41 +154,37 @@ A: The following table lists the Linux kernel versions against which the
    It should build against almost any kernel, certainly against 2.6.18
    and later.
 
+Q: Should userspace or kernel be upgraded first to minimize downtime?
+
+   In general, the Open vSwitch userspace should be used with the
+   kernel version included in the same release or with the version
+   from upstream Linux.  However, when upgrading between two releases
+   of Open vSwitch it is best to migrate userspace first to reduce
+   the possbility of incompatibilities.
+
 Q: What features are not available in the Open vSwitch kernel datapath
    that ships as part of the upstream Linux kernel?
 
 A: The kernel module in upstream Linux 3.3 and later does not include
-   the following features:
-
-       - Bridge compatibility, that is, support for the ovs-brcompatd
-         daemon that (if you enable it) lets "brctl" and other Linux
-         bridge tools transparently work with Open vSwitch instead.
-
-         We do not expect bridge compatibility to ever be available in
-         upstream Linux.  If you need bridge compatibility, use the
-         kernel module from the Open vSwitch distribution instead of the
-         upstream Linux kernel module.
-
-       - Tunnel virtual ports, that is, interfaces with type "gre",
-         "ipsec_gre", "capwap".  It is possible to create tunnels in
-         Linux and attach them to Open vSwitch as system devices.
-         However, they cannot be dynamically created through the OVSDB
-         protocol or set the tunnel ids as a flow action.
-
-         Work is in progress in adding these features to the upstream
-         Linux version of the Open vSwitch kernel module.  For now, if
-         you need these features, use the kernel module from the Open
-         vSwitch distribution instead of the upstream Linux kernel
-         module.
-
-       - Patch virtual ports, that is, interfaces with type "patch".
-         You can use Linux "veth" devices as a substitute.
-
-         We don't have any plans to add patch ports upstream.
+   tunnel virtual ports, that is, interfaces with type "gre",
+   "ipsec_gre", "gre64", "ipsec_gre64", "vxlan", or "capwap".  It is
+   possible to create tunnels in Linux and attach them to Open vSwitch
+   as system devices.  However, they cannot be dynamically created
+   through the OVSDB protocol or set the tunnel ids as a flow action.
+
+   Work is in progress in adding tunnel virtual ports to the upstream
+   Linux version of the Open vSwitch kernel module.  For now, if you
+   need these features, use the kernel module from the Open vSwitch
+   distribution instead of the upstream Linux kernel module.
+
+   The upstream kernel module does not include patch ports, but this
+   only matters for Open vSwitch 1.9 and earlier, because Open vSwitch
+   1.10 and later implement patch ports without using this kernel
+   feature.
 
 Q: What features are not available when using the userspace datapath?
 
-A: Tunnel and patch virtual ports are not supported, as described in the
+A: Tunnel virtual ports are not supported, as described in the
    previous answer.  It is also not possible to use queue-related
    actions.  On Linux kernels before 2.6.39, maximum-sized VLAN packets
    may not be transmitted.
@@ -464,6 +460,110 @@ A: In version 1.9.0, OVS switched to using a single datapath that is
    commands provide similar functionality that is scoped by the bridge.
 
 
+Quality of Service (QoS)
+------------------------
+
+Q: How do I configure Quality of Service (QoS)?
+
+A: Suppose that you want to set up bridge br0 connected to physical
+   Ethernet port eth0 (a 1 Gbps device) and virtual machine interfaces
+   vif1.0 and vif2.0, and that you want to limit traffic from vif1.0
+   to eth0 to 10 Mbps and from vif2.0 to eth0 to 20 Mbps.  Then, you
+   could configure the bridge this way:
+
+       ovs-vsctl -- \
+           add-br br0 -- \
+          add-port br0 eth0 -- \
+          add-port br0 vif1.0 -- set interface vif1.0 ofport_request=5 -- \
+          add-port br0 vif2.0 -- set interface vif2.0 ofport_request=6 -- \
+          set port eth0 qos=@newqos -- \
+          --id=@newqos create qos type=linux-htb \
+               other-config:max-rate=1000000000 \
+              queues:123=@vif10queue \
+              queues:234=@vif20queue -- \
+           --id=@vif10queue create queue other-config:max-rate=10000000 -- \
+           --id=@vif20queue create queue other-config:max-rate=20000000
+
+   At this point, bridge br0 is configured with the ports and eth0 is
+   configured with the queues that you need for QoS, but nothing is
+   actually directing packets from vif1.0 or vif2.0 to the queues that
+   we have set up for them.  That means that all of the packets to
+   eth0 are going to the "default queue", which is not what we want.
+
+   We use OpenFlow to direct packets from vif1.0 and vif2.0 to the
+   queues reserved for them:
+
+       ovs-ofctl add-flow br0 in_port=5,actions=set_queue:123,normal
+       ovs-ofctl add-flow br0 in_port=6,actions=set_queue:234,normal
+
+   Each of the above flows matches on the input port, sets up the
+   appropriate queue (123 for vif1.0, 234 for vif2.0), and then
+   executes the "normal" action, which performs the same switching
+   that Open vSwitch would have done without any OpenFlow flows being
+   present.  (We know that vif1.0 and vif2.0 have OpenFlow port
+   numbers 5 and 6, respectively, because we set their ofport_request
+   columns above.  If we had not done that, then we would have needed
+   to find out their port numbers before setting up these flows.)
+
+   Now traffic going from vif1.0 or vif2.0 to eth0 should be
+   rate-limited.
+
+   By the way, if you delete the bridge created by the above commands,
+   with:
+
+       ovs-vsctl del-br br0
+
+   then that will leave one unreferenced QoS record and two
+   unreferenced Queue records in the Open vSwich database.  One way to
+   clear them out, assuming you don't have other QoS or Queue records
+   that you want to keep, is:
+
+       ovs-vsctl -- --all destroy QoS -- --all destroy Queue
+
+Q: I configured Quality of Service (QoS) in my OpenFlow network by
+   adding records to the QoS and Queue table, but the results aren't
+   what I expect.
+
+A: Did you install OpenFlow flows that use your queues?  This is the
+   primary way to tell Open vSwitch which queues you want to use.  If
+   you don't do this, then the default queue will be used, which will
+   probably not have the effect you want.
+
+   Refer to the previous question for an example.
+
+Q: I configured QoS, correctly, but my measurements show that it isn't
+   working as well as I expect.
+
+A: With the Linux kernel, the Open vSwitch implementation of QoS has
+   two aspects:
+
+       - Open vSwitch configures a subset of Linux kernel QoS
+         features, according to what is in OVSDB.  It is possible that
+         this code has bugs.  If you believe that this is so, then you
+         can configure the Linux traffic control (QoS) stack directly
+         with the "tc" program.  If you get better results that way,
+         you can send a detailed bug report to bugs@openvswitch.org.
+
+         It is certain that Open vSwitch cannot configure every Linux
+         kernel QoS feature.  If you need some feature that OVS cannot
+         configure, then you can also use "tc" directly (or add that
+         feature to OVS).
+
+       - The Open vSwitch implementation of OpenFlow allows flows to
+         be directed to particular queues.  This is pretty simple and
+         unlikely to have serious bugs at this point.
+
+   However, most problems with QoS on Linux are not bugs in Open
+   vSwitch at all.  They tend to be either configuration errors
+   (please see the earlier questions in this section) or issues with
+   the traffic control (QoS) stack in Linux.  The Open vSwitch
+   developers are not experts on Linux traffic control.  We suggest
+   that, if you believe you are encountering a problem with Linux
+   traffic control, that you consult the tc manpages (e.g. tc(8),
+   tc-htb(8), tc-hfsc(8)), web resources (e.g. http://lartc.org/), or
+   mailing lists (e.g. http://vger.kernel.org/vger-lists.html#netdev).
+
+
 VLANs
 -----
 
@@ -670,12 +770,24 @@ Controllers
 
 Q: What versions of OpenFlow does Open vSwitch support?
 
-A: Open vSwitch supports OpenFlow 1.0.  It also includes a number of
-   extensions that bring many of the features from later versions of
-   OpenFlow.  Work is underway to provide support for later versions and
-   can be tracked here:
+A: Open vSwitch 1.9 and earlier support only OpenFlow 1.0 (plus
+   extensions that bring in many of the features from later versions
+   of OpenFlow).
+
+   Open vSwitch versions 1.10 and later will have experimental support
+   for OpenFlow 1.2 and 1.3.  On these versions of Open vSwitch, the
+   following command enables OpenFlow 1.0, 1.2, and 1.3 on bridge br0:
+
+       ovs-vsctl set bridge br0 protocols=openflow10,openflow12,openflow13
+
+   Support for OpenFlow 1.1 is incomplete enough that it cannot yet be
+   enabled, even experimentally.
 
-       http://openvswitch.org/development/openflow-1-x-plan/
+   Support for OpenFlow 1.2 and 1.3 is still incomplete.  Work to be
+   done is tracked in OPENFLOW-1.1+ in the Open vSwitch source tree
+   (also via http://openvswitch.org/development/openflow-1-x-plan/).
+   When support for a given OpenFlow version is solidly implemented,
+   Open vSwitch will enable that version by default.
 
 Q: I'm getting "error type 45250 code 0".  What's that?