FAQ: Change stray triple-blank line to double-blank line for consistency.
[sliver-openvswitch.git] / FAQ
1                  Open vSwitch <http://openvswitch.org>
2
3 Frequently Asked Questions
4 ==========================
5
6 General
7 -------
8
9 Q: What is Open vSwitch?
10
11 A: Open vSwitch is a production quality open source software switch
12    designed to be used as a vswitch in virtualized server environments.  A
13    vswitch forwards traffic between different VMs on the same physical host
14    and also forwards traffic between VMs and the physical network.  Open
15    vSwitch supports standard management interfaces (e.g. sFlow, NetFlow,
16    RSPAN, CLI), and is open to programmatic extension and control using
17    OpenFlow and the OVSDB management protocol.
18
19    Open vSwitch as designed to be compatible with modern switching
20    chipsets.  This means that it can be ported to existing high-fanout
21    switches allowing the same flexible control of the physical
22    infrastructure as the virtual infrastructure.  It also means that
23    Open vSwitch will be able to take advantage of on-NIC switching
24    chipsets as their functionality matures.
25
26 Q: What virtualization platforms can use Open vSwitch?
27
28 A: Open vSwitch can currently run on any Linux-based virtualization
29    platform (kernel 2.6.18 and newer), including: KVM, VirtualBox, Xen,
30    Xen Cloud Platform, XenServer. As of Linux 3.3 it is part of the
31    mainline kernel.  The bulk of the code is written in platform-
32    independent C and is easily ported to other environments.  We welcome
33    inquires about integrating Open vSwitch with other virtualization
34    platforms.
35
36 Q: How can I try Open vSwitch?
37
38 A: The Open vSwitch source code can be built on a Linux system.  You can
39    build and experiment with Open vSwitch on any Linux machine.
40    Packages for various Linux distributions are available on many
41    platforms, including: Debian, Ubuntu, Fedora.
42
43    You may also download and run a virtualization platform that already
44    has Open vSwitch integrated.  For example, download a recent ISO for
45    XenServer or Xen Cloud Platform.  Be aware that the version
46    integrated with a particular platform may not be the most recent Open
47    vSwitch release.
48
49 Q: Does Open vSwitch only work on Linux?
50
51 A: No, Open vSwitch has been ported to a number of different operating
52    systems and hardware platforms.  Most of the development work occurs
53    on Linux, but the code should be portable to any POSIX system.  We've
54    seen Open vSwitch ported to a number of different platforms,
55    including FreeBSD, Windows, and even non-POSIX embedded systems.
56
57    By definition, the Open vSwitch Linux kernel module only works on
58    Linux and will provide the highest performance.  However, a userspace
59    datapath is available that should be very portable.
60
61 Q: What's involved with porting Open vSwitch to a new platform or
62    switching ASIC?
63
64 A: The PORTING document describes how one would go about porting Open
65    vSwitch to a new operating system or hardware platform.
66
67 Q: Why would I use Open vSwitch instead of the Linux bridge?
68
69 A: Open vSwitch is specially designed to make it easier to manage VM
70    network configuration and monitor state spread across many physical
71    hosts in dynamic virtualized environments.  Please see WHY-OVS for a
72    more detailed description of how Open vSwitch relates to the Linux
73    Bridge.
74
75 Q: How is Open vSwitch related to distributed virtual switches like the
76    VMware vNetwork distributed switch or the Cisco Nexus 1000V?
77
78 A: Distributed vswitch applications (e.g., VMware vNetwork distributed
79    switch, Cisco Nexus 1000V) provide a centralized way to configure and
80    monitor the network state of VMs that are spread across many physical
81    hosts.  Open vSwitch is not a distributed vswitch itself, rather it
82    runs on each physical host and supports remote management in a way
83    that makes it easier for developers of virtualization/cloud
84    management platforms to offer distributed vswitch capabilities.
85
86    To aid in distribution, Open vSwitch provides two open protocols that
87    are specially designed for remote management in virtualized network
88    environments: OpenFlow, which exposes flow-based forwarding state,
89    and the OVSDB management protocol, which exposes switch port state.
90    In addition to the switch implementation itself, Open vSwitch
91    includes tools (ovs-controller, ovs-ofctl, ovs-vsctl) that developers
92    can script and extend to provide distributed vswitch capabilities
93    that are closely integrated with their virtualization management
94    platform.
95
96 Q: Why doesn't Open vSwitch support distribution?
97
98 A: Open vSwitch is intended to be a useful component for building
99    flexible network infrastructure. There are many different approaches
100    to distribution which balance trade-offs between simplicity,
101    scalability, hardware compatibility, convergence times, logical
102    forwarding model, etc. The goal of Open vSwitch is to be able to
103    support all as a primitive building block rather than choose a
104    particular point in the distributed design space.
105
106 Q: How can I contribute to the Open vSwitch Community?
107
108 A: You can start by joining the mailing lists and helping to answer
109    questions.  You can also suggest improvements to documentation.  If
110    you have a feature or bug you would like to work on, send a mail to
111    one of the mailing lists:
112
113        http://openvswitch.org/mlists/
114
115
116 Releases
117 --------
118
119 Q: What does it mean for an Open vSwitch release to be LTS (long-term
120    support)?
121
122 A: All official releases have been through a comprehensive testing
123    process and are suitable for production use.  Planned releases will
124    occur several times a year.  If a significant bug is identified in an
125    LTS release, we will provide an updated release that includes the
126    fix.  Releases that are not LTS may not be fixed and may just be
127    supplanted by the next major release.  The current LTS release is
128    1.4.x.
129
130 Q: What Linux kernel versions does each Open vSwitch release work with?
131
132 A: The following table lists the Linux kernel versions against which the
133    given versions of the Open vSwitch kernel module will successfully
134    build.  The Linux kernel versions are upstream kernel versions, so
135    Linux kernels modified from the upstream sources may not build in
136    some cases even if they are based on a supported version.  This is
137    most notably true of Red Hat Enterprise Linux (RHEL) kernels, which
138    are extensively modified from upstream.
139
140    Open vSwitch   Linux kernel
141    ------------   -------------
142        1.4.x      2.6.18 to 3.2
143        1.5.x      2.6.18 to 3.2
144        1.6.x      2.6.18 to 3.2
145        1.7.x      2.6.18 to 3.3
146        1.8.x      2.6.18 to 3.4
147        1.9.x      2.6.18 to 3.8
148
149    Open vSwitch userspace should also work with the Linux kernel module
150    built into Linux 3.3 and later.
151
152    Open vSwitch userspace is not sensitive to the Linux kernel version.
153    It should build against almost any kernel, certainly against 2.6.18
154    and later.
155
156 Q: Should userspace or kernel be upgraded first to minimize downtime?
157
158    In general, the Open vSwitch userspace should be used with the
159    kernel version included in the same release or with the version
160    from upstream Linux.  However, when upgrading between two releases
161    of Open vSwitch it is best to migrate userspace first to reduce
162    the possbility of incompatibilities.
163
164 Q: What features are not available in the Open vSwitch kernel datapath
165    that ships as part of the upstream Linux kernel?
166
167 A: The kernel module in upstream Linux 3.3 and later does not include
168    tunnel virtual ports, that is, interfaces with type "gre",
169    "ipsec_gre", "gre64", "ipsec_gre64", "vxlan", or "lisp".  It is
170    possible to create tunnels in Linux and attach them to Open vSwitch
171    as system devices.  However, they cannot be dynamically created
172    through the OVSDB protocol or set the tunnel ids as a flow action.
173
174    Work is in progress in adding tunnel virtual ports to the upstream
175    Linux version of the Open vSwitch kernel module.  For now, if you
176    need these features, use the kernel module from the Open vSwitch
177    distribution instead of the upstream Linux kernel module.
178
179    The upstream kernel module does not include patch ports, but this
180    only matters for Open vSwitch 1.9 and earlier, because Open vSwitch
181    1.10 and later implement patch ports without using this kernel
182    feature.
183
184 Q: What features are not available when using the userspace datapath?
185
186 A: Tunnel virtual ports are not supported, as described in the
187    previous answer.  It is also not possible to use queue-related
188    actions.  On Linux kernels before 2.6.39, maximum-sized VLAN packets
189    may not be transmitted.
190
191
192 Terminology
193 -----------
194
195 Q: I thought Open vSwitch was a virtual Ethernet switch, but the
196    documentation keeps talking about bridges.  What's a bridge?
197
198 A: In networking, the terms "bridge" and "switch" are synonyms.  Open
199    vSwitch implements an Ethernet switch, which means that it is also
200    an Ethernet bridge.
201
202 Q: What's a VLAN?
203
204 A: See the "VLAN" section below.
205
206
207 Basic Configuration
208 -------------------
209
210 Q: How do I configure a port as an access port?
211
212 A: Add "tag=VLAN" to your "ovs-vsctl add-port" command.  For example,
213    the following commands configure br0 with eth0 as a trunk port (the
214    default) and tap0 as an access port for VLAN 9:
215
216        ovs-vsctl add-br br0
217        ovs-vsctl add-port br0 eth0
218        ovs-vsctl add-port br0 tap0 tag=9
219
220    If you want to configure an already added port as an access port,
221    use "ovs-vsctl set", e.g.:
222
223        ovs-vsctl set port tap0 tag=9
224
225 Q: How do I configure a port as a SPAN port, that is, enable mirroring
226    of all traffic to that port?
227
228 A: The following commands configure br0 with eth0 and tap0 as trunk
229    ports.  All traffic coming in or going out on eth0 or tap0 is also
230    mirrored to tap1; any traffic arriving on tap1 is dropped:
231
232        ovs-vsctl add-br br0
233        ovs-vsctl add-port br0 eth0
234        ovs-vsctl add-port br0 tap0
235        ovs-vsctl add-port br0 tap1 \
236            -- --id=@p get port tap1 \
237            -- --id=@m create mirror name=m0 select-all=true output-port=@p \
238            -- set bridge br0 mirrors=@m
239
240    To later disable mirroring, run:
241
242        ovs-vsctl clear bridge br0 mirrors
243
244 Q: How do I configure a VLAN as an RSPAN VLAN, that is, enable
245    mirroring of all traffic to that VLAN?
246
247 A: The following commands configure br0 with eth0 as a trunk port and
248    tap0 as an access port for VLAN 10.  All traffic coming in or going
249    out on tap0, as well as traffic coming in or going out on eth0 in
250    VLAN 10, is also mirrored to VLAN 15 on eth0.  The original tag for
251    VLAN 10, in cases where one is present, is dropped as part of
252    mirroring:
253
254        ovs-vsctl add-br br0
255        ovs-vsctl add-port br0 eth0
256        ovs-vsctl add-port br0 tap0 tag=10
257        ovs-vsctl \
258            -- --id=@m create mirror name=m0 select-all=true select-vlan=10 \
259                                     output-vlan=15 \
260            -- set bridge br0 mirrors=@m
261
262    To later disable mirroring, run:
263
264        ovs-vsctl clear bridge br0 mirrors
265
266    Mirroring to a VLAN can disrupt a network that contains unmanaged
267    switches.  See ovs-vswitchd.conf.db(5) for details.  Mirroring to a
268    GRE tunnel has fewer caveats than mirroring to a VLAN and should
269    generally be preferred.
270
271 Q: Can I mirror more than one input VLAN to an RSPAN VLAN?
272
273 A: Yes, but mirroring to a VLAN strips the original VLAN tag in favor
274    of the specified output-vlan.  This loss of information may make
275    the mirrored traffic too hard to interpret.
276
277    To mirror multiple VLANs, use the commands above, but specify a
278    comma-separated list of VLANs as the value for select-vlan.  To
279    mirror every VLAN, use the commands above, but omit select-vlan and
280    its value entirely.
281
282    When a packet arrives on a VLAN that is used as a mirror output
283    VLAN, the mirror is disregarded.  Instead, in standalone mode, OVS
284    floods the packet across all the ports for which the mirror output
285    VLAN is configured.  (If an OpenFlow controller is in use, then it
286    can override this behavior through the flow table.)  If OVS is used
287    as an intermediate switch, rather than an edge switch, this ensures
288    that the RSPAN traffic is distributed through the network.
289
290    Mirroring to a VLAN can disrupt a network that contains unmanaged
291    switches.  See ovs-vswitchd.conf.db(5) for details.  Mirroring to a
292    GRE tunnel has fewer caveats than mirroring to a VLAN and should
293    generally be preferred.
294
295 Q: How do I configure mirroring of all traffic to a GRE tunnel?
296
297 A: The following commands configure br0 with eth0 and tap0 as trunk
298    ports.  All traffic coming in or going out on eth0 or tap0 is also
299    mirrored to gre0, a GRE tunnel to the remote host 192.168.1.10; any
300    traffic arriving on gre0 is dropped:
301
302        ovs-vsctl add-br br0
303        ovs-vsctl add-port br0 eth0
304        ovs-vsctl add-port br0 tap0
305        ovs-vsctl add-port br0 gre0 \
306            -- set interface gre0 type=gre options:remote_ip=192.168.1.10 \
307            -- --id=@p get port gre0 \
308            -- --id=@m create mirror name=m0 select-all=true output-port=@p \
309            -- set bridge br0 mirrors=@m
310
311    To later disable mirroring and destroy the GRE tunnel:
312
313        ovs-vsctl clear bridge br0 mirrors
314        ovs-vcstl del-port br0 gre0
315
316 Q: Does Open vSwitch support ERSPAN?
317
318 A: No.  ERSPAN is an undocumented proprietary protocol.  As an
319    alternative, Open vSwitch supports mirroring to a GRE tunnel (see
320    above).
321
322 Q: Why are there so many different ways to dump flows?
323
324 A: Open vSwitch uses different kinds of flows for different purposes:
325
326       - OpenFlow flows are the most important kind of flow.  OpenFlow
327         controllers use these flows to define a switch's policy.
328         OpenFlow flows support wildcards, priorities, and multiple
329         tables.
330
331         When in-band control is in use, Open vSwitch sets up a few
332         "hidden" flows, with priority higher than a controller or the
333         user can configure, that are not visible via OpenFlow.  (See
334         the "Controller" section of the FAQ for more information
335         about hidden flows.)
336
337       - The Open vSwitch software switch implementation uses a second
338         kind of flow internally.  These flows, called "exact-match"
339         or "datapath" or "kernel" flows, do not support wildcards or
340         priorities and comprise only a single table, which makes them
341         suitable for caching.   OpenFlow flows and exact-match flows
342         also support different actions and number ports differently.
343
344         Exact-match flows are an implementation detail that is
345         subject to change in future versions of Open vSwitch.  Even
346         with the current version of Open vSwitch, hardware switch
347         implementations do not necessarily use exact-match flows.
348
349   Each of the commands for dumping flows has a different purpose:
350
351       - "ovs-ofctl dump-flows <br>" dumps OpenFlow flows, excluding
352         hidden flows.  This is the most commonly useful form of flow
353         dump.  (Unlike the other commands, this should work with any
354         OpenFlow switch, not just Open vSwitch.)
355
356       - "ovs-appctl bridge/dump-flows <br>" dumps OpenFlow flows,
357         including hidden flows.  This is occasionally useful for
358         troubleshooting suspected issues with in-band control.
359
360       - "ovs-dpctl dump-flows [dp]" dumps the exact-match flow table
361         entries for a Linux kernel-based datapath.  In Open vSwitch
362         1.10 and later, ovs-vswitchd merges multiple switches into a
363         single datapath, so it will show all the flows on all your
364         kernel-based switches.  This command can occasionally be
365         useful for debugging.
366
367       - "ovs-appctl dpif/dump-flows <br>", new in Open vSwitch 1.10,
368         dumps exact-match flows for only the specified bridge,
369         regardless of the type.
370
371
372 Configuration Problems
373 ----------------------
374
375 Q: I created a bridge and added my Ethernet port to it, using commands
376    like these:
377
378        ovs-vsctl add-br br0
379        ovs-vsctl add-port br0 eth0
380
381    and as soon as I ran the "add-port" command I lost all connectivity
382    through eth0.  Help!
383
384 A: A physical Ethernet device that is part of an Open vSwitch bridge
385    should not have an IP address.  If one does, then that IP address
386    will not be fully functional.
387
388    You can restore functionality by moving the IP address to an Open
389    vSwitch "internal" device, such as the network device named after
390    the bridge itself.  For example, assuming that eth0's IP address is
391    192.168.128.5, you could run the commands below to fix up the
392    situation:
393
394        ifconfig eth0 0.0.0.0
395        ifconfig br0 192.168.128.5
396
397    (If your only connection to the machine running OVS is through the
398    IP address in question, then you would want to run all of these
399    commands on a single command line, or put them into a script.)  If
400    there were any additional routes assigned to eth0, then you would
401    also want to use commands to adjust these routes to go through br0.
402
403    If you use DHCP to obtain an IP address, then you should kill the
404    DHCP client that was listening on the physical Ethernet interface
405    (e.g. eth0) and start one listening on the internal interface
406    (e.g. br0).  You might still need to manually clear the IP address
407    from the physical interface (e.g. with "ifconfig eth0 0.0.0.0").
408
409    There is no compelling reason why Open vSwitch must work this way.
410    However, this is the way that the Linux kernel bridge module has
411    always worked, so it's a model that those accustomed to Linux
412    bridging are already used to.  Also, the model that most people
413    expect is not implementable without kernel changes on all the
414    versions of Linux that Open vSwitch supports.
415
416    By the way, this issue is not specific to physical Ethernet
417    devices.  It applies to all network devices except Open vswitch
418    "internal" devices.
419
420 Q: I created a bridge and added a couple of Ethernet ports to it,
421    using commands like these:
422
423        ovs-vsctl add-br br0
424        ovs-vsctl add-port br0 eth0
425        ovs-vsctl add-port br0 eth1
426
427    and now my network seems to have melted: connectivity is unreliable
428    (even connectivity that doesn't go through Open vSwitch), all the
429    LEDs on my physical switches are blinking, wireshark shows
430    duplicated packets, and CPU usage is very high.
431
432 A: More than likely, you've looped your network.  Probably, eth0 and
433    eth1 are connected to the same physical Ethernet switch.  This
434    yields a scenario where OVS receives a broadcast packet on eth0 and
435    sends it out on eth1, then the physical switch connected to eth1
436    sends the packet back on eth0, and so on forever.  More complicated
437    scenarios, involving a loop through multiple switches, are possible
438    too.
439
440    The solution depends on what you are trying to do:
441
442        - If you added eth0 and eth1 to get higher bandwidth or higher
443          reliability between OVS and your physical Ethernet switch,
444          use a bond.  The following commands create br0 and then add
445          eth0 and eth1 as a bond:
446
447              ovs-vsctl add-br br0
448              ovs-vsctl add-bond br0 bond0 eth0 eth1
449
450          Bonds have tons of configuration options.  Please read the
451          documentation on the Port table in ovs-vswitchd.conf.db(5)
452          for all the details.
453
454        - Perhaps you don't actually need eth0 and eth1 to be on the
455          same bridge.  For example, if you simply want to be able to
456          connect each of them to virtual machines, then you can put
457          each of them on a bridge of its own:
458
459              ovs-vsctl add-br br0
460              ovs-vsctl add-port br0 eth0
461
462              ovs-vsctl add-br br1
463              ovs-vsctl add-port br1 eth1
464
465          and then connect VMs to br0 and br1.  (A potential
466          disadvantage is that traffic cannot directly pass between br0
467          and br1.  Instead, it will go out eth0 and come back in eth1,
468          or vice versa.)
469
470        - If you have a redundant or complex network topology and you
471          want to prevent loops, turn on spanning tree protocol (STP).
472          The following commands create br0, enable STP, and add eth0
473          and eth1 to the bridge.  The order is important because you
474          don't want have to have a loop in your network even
475          transiently:
476
477              ovs-vsctl add-br br0
478              ovs-vsctl set bridge br0 stp_enable=true
479              ovs-vsctl add-port br0 eth0
480              ovs-vsctl add-port br0 eth1
481
482          The Open vSwitch implementation of STP is not well tested.
483          Please report any bugs you observe, but if you'd rather avoid
484          acting as a beta tester then another option might be your
485          best shot.
486
487 Q: I can't seem to use Open vSwitch in a wireless network.
488
489 A: Wireless base stations generally only allow packets with the source
490    MAC address of NIC that completed the initial handshake.
491    Therefore, without MAC rewriting, only a single device can
492    communicate over a single wireless link.
493
494    This isn't specific to Open vSwitch, it's enforced by the access
495    point, so the same problems will show up with the Linux bridge or
496    any other way to do bridging.
497
498 Q: I can't seem to add my PPP interface to an Open vSwitch bridge.
499
500 A: PPP most commonly carries IP packets, but Open vSwitch works only
501    with Ethernet frames.  The correct way to interface PPP to an
502    Ethernet network is usually to use routing instead of switching.
503
504 Q: Is there any documentation on the database tables and fields?
505
506 A: Yes.  ovs-vswitchd.conf.db(5) is a comprehensive reference.
507
508 Q: When I run ovs-dpctl I no longer see the bridges I created.  Instead,
509    I only see a datapath called "ovs-system".  How can I see datapath
510    information about a particular bridge?
511
512 A: In version 1.9.0, OVS switched to using a single datapath that is
513    shared by all bridges of that type.  The "ovs-appctl dpif/*"
514    commands provide similar functionality that is scoped by the bridge.
515
516
517 Quality of Service (QoS)
518 ------------------------
519
520 Q: How do I configure Quality of Service (QoS)?
521
522 A: Suppose that you want to set up bridge br0 connected to physical
523    Ethernet port eth0 (a 1 Gbps device) and virtual machine interfaces
524    vif1.0 and vif2.0, and that you want to limit traffic from vif1.0
525    to eth0 to 10 Mbps and from vif2.0 to eth0 to 20 Mbps.  Then, you
526    could configure the bridge this way:
527
528        ovs-vsctl -- \
529            add-br br0 -- \
530            add-port br0 eth0 -- \
531            add-port br0 vif1.0 -- set interface vif1.0 ofport_request=5 -- \
532            add-port br0 vif2.0 -- set interface vif2.0 ofport_request=6 -- \
533            set port eth0 qos=@newqos -- \
534            --id=@newqos create qos type=linux-htb \
535                other-config:max-rate=1000000000 \
536                queues:123=@vif10queue \
537                queues:234=@vif20queue -- \
538            --id=@vif10queue create queue other-config:max-rate=10000000 -- \
539            --id=@vif20queue create queue other-config:max-rate=20000000
540
541    At this point, bridge br0 is configured with the ports and eth0 is
542    configured with the queues that you need for QoS, but nothing is
543    actually directing packets from vif1.0 or vif2.0 to the queues that
544    we have set up for them.  That means that all of the packets to
545    eth0 are going to the "default queue", which is not what we want.
546
547    We use OpenFlow to direct packets from vif1.0 and vif2.0 to the
548    queues reserved for them:
549
550        ovs-ofctl add-flow br0 in_port=5,actions=set_queue:123,normal
551        ovs-ofctl add-flow br0 in_port=6,actions=set_queue:234,normal
552
553    Each of the above flows matches on the input port, sets up the
554    appropriate queue (123 for vif1.0, 234 for vif2.0), and then
555    executes the "normal" action, which performs the same switching
556    that Open vSwitch would have done without any OpenFlow flows being
557    present.  (We know that vif1.0 and vif2.0 have OpenFlow port
558    numbers 5 and 6, respectively, because we set their ofport_request
559    columns above.  If we had not done that, then we would have needed
560    to find out their port numbers before setting up these flows.)
561
562    Now traffic going from vif1.0 or vif2.0 to eth0 should be
563    rate-limited.
564
565    By the way, if you delete the bridge created by the above commands,
566    with:
567
568        ovs-vsctl del-br br0
569
570    then that will leave one unreferenced QoS record and two
571    unreferenced Queue records in the Open vSwich database.  One way to
572    clear them out, assuming you don't have other QoS or Queue records
573    that you want to keep, is:
574
575        ovs-vsctl -- --all destroy QoS -- --all destroy Queue
576
577    If you do want to keep some QoS or Queue records, or the Open
578    vSwitch you are using is older than version 1.8 (which added the
579    --all option), then you will have to destroy QoS and Queue records
580    individually.
581
582 Q: I configured Quality of Service (QoS) in my OpenFlow network by
583    adding records to the QoS and Queue table, but the results aren't
584    what I expect.
585
586 A: Did you install OpenFlow flows that use your queues?  This is the
587    primary way to tell Open vSwitch which queues you want to use.  If
588    you don't do this, then the default queue will be used, which will
589    probably not have the effect you want.
590
591    Refer to the previous question for an example.
592
593 Q: I configured QoS, correctly, but my measurements show that it isn't
594    working as well as I expect.
595
596 A: With the Linux kernel, the Open vSwitch implementation of QoS has
597    two aspects:
598
599        - Open vSwitch configures a subset of Linux kernel QoS
600          features, according to what is in OVSDB.  It is possible that
601          this code has bugs.  If you believe that this is so, then you
602          can configure the Linux traffic control (QoS) stack directly
603          with the "tc" program.  If you get better results that way,
604          you can send a detailed bug report to bugs@openvswitch.org.
605
606          It is certain that Open vSwitch cannot configure every Linux
607          kernel QoS feature.  If you need some feature that OVS cannot
608          configure, then you can also use "tc" directly (or add that
609          feature to OVS).
610
611        - The Open vSwitch implementation of OpenFlow allows flows to
612          be directed to particular queues.  This is pretty simple and
613          unlikely to have serious bugs at this point.
614
615    However, most problems with QoS on Linux are not bugs in Open
616    vSwitch at all.  They tend to be either configuration errors
617    (please see the earlier questions in this section) or issues with
618    the traffic control (QoS) stack in Linux.  The Open vSwitch
619    developers are not experts on Linux traffic control.  We suggest
620    that, if you believe you are encountering a problem with Linux
621    traffic control, that you consult the tc manpages (e.g. tc(8),
622    tc-htb(8), tc-hfsc(8)), web resources (e.g. http://lartc.org/), or
623    mailing lists (e.g. http://vger.kernel.org/vger-lists.html#netdev).
624
625
626 VLANs
627 -----
628
629 Q: What's a VLAN?
630
631 A: At the simplest level, a VLAN (short for "virtual LAN") is a way to
632    partition a single switch into multiple switches.  Suppose, for
633    example, that you have two groups of machines, group A and group B.
634    You want the machines in group A to be able to talk to each other,
635    and you want the machine in group B to be able to talk to each
636    other, but you don't want the machines in group A to be able to
637    talk to the machines in group B.  You can do this with two
638    switches, by plugging the machines in group A into one switch and
639    the machines in group B into the other switch.
640
641    If you only have one switch, then you can use VLANs to do the same
642    thing, by configuring the ports for machines in group A as VLAN
643    "access ports" for one VLAN and the ports for group B as "access
644    ports" for a different VLAN.  The switch will only forward packets
645    between ports that are assigned to the same VLAN, so this
646    effectively subdivides your single switch into two independent
647    switches, one for each group of machines.
648
649    So far we haven't said anything about VLAN headers.  With access
650    ports, like we've described so far, no VLAN header is present in
651    the Ethernet frame.  This means that the machines (or switches)
652    connected to access ports need not be aware that VLANs are
653    involved, just like in the case where we use two different physical
654    switches.
655
656    Now suppose that you have a whole bunch of switches in your
657    network, instead of just one, and that some machines in group A are
658    connected directly to both switches 1 and 2.  To allow these
659    machines to talk to each other, you could add an access port for
660    group A's VLAN to switch 1 and another to switch 2, and then
661    connect an Ethernet cable between those ports.  That works fine,
662    but it doesn't scale well as the number of switches and the number
663    of VLANs increases, because you use up a lot of valuable switch
664    ports just connecting together your VLANs.
665
666    This is where VLAN headers come in.  Instead of using one cable and
667    two ports per VLAN to connect a pair of switches, we configure a
668    port on each switch as a VLAN "trunk port".  Packets sent and
669    received on a trunk port carry a VLAN header that says what VLAN
670    the packet belongs to, so that only two ports total are required to
671    connect the switches, regardless of the number of VLANs in use.
672    Normally, only switches (either physical or virtual) are connected
673    to a trunk port, not individual hosts, because individual hosts
674    don't expect to see a VLAN header in the traffic that they receive.
675
676    None of the above discussion says anything about particular VLAN
677    numbers.  This is because VLAN numbers are completely arbitrary.
678    One must only ensure that a given VLAN is numbered consistently
679    throughout a network and that different VLANs are given different
680    numbers.  (That said, VLAN 0 is usually synonymous with a packet
681    that has no VLAN header, and VLAN 4095 is reserved.)
682
683 Q: VLANs don't work.
684
685 A: Many drivers in Linux kernels before version 3.3 had VLAN-related
686    bugs.  If you are having problems with VLANs that you suspect to be
687    driver related, then you have several options:
688
689        - Upgrade to Linux 3.3 or later.
690
691        - Build and install a fixed version of the particular driver
692          that is causing trouble, if one is available.
693
694        - Use a NIC whose driver does not have VLAN problems.
695
696        - Use "VLAN splinters", a feature in Open vSwitch 1.4 and later
697          that works around bugs in kernel drivers.  To enable VLAN
698          splinters on interface eth0, use the command:
699
700            ovs-vsctl set interface eth0 other-config:enable-vlan-splinters=true
701
702          For VLAN splinters to be effective, Open vSwitch must know
703          which VLANs are in use.  See the "VLAN splinters" section in
704          the Interface table in ovs-vswitchd.conf.db(5) for details on
705          how Open vSwitch infers in-use VLANs.
706
707          VLAN splinters increase memory use and reduce performance, so
708          use them only if needed.
709
710        - Apply the "vlan workaround" patch from the XenServer kernel
711          patch queue, build Open vSwitch against this patched kernel,
712          and then use ovs-vlan-bug-workaround(8) to enable the VLAN
713          workaround for each interface whose driver is buggy.
714
715          (This is a nontrivial exercise, so this option is included
716          only for completeness.)
717
718    It is not always easy to tell whether a Linux kernel driver has
719    buggy VLAN support.  The ovs-vlan-test(8) and ovs-test(8) utilities
720    can help you test.  See their manpages for details.  Of the two
721    utilities, ovs-test(8) is newer and more thorough, but
722    ovs-vlan-test(8) may be easier to use.
723
724 Q: VLANs still don't work.  I've tested the driver so I know that it's OK.
725
726 A: Do you have VLANs enabled on the physical switch that OVS is
727    attached to?  Make sure that the port is configured to trunk the
728    VLAN or VLANs that you are using with OVS.
729
730 Q: Outgoing VLAN-tagged traffic goes through OVS to my physical switch
731    and to its destination host, but OVS seems to drop incoming return
732    traffic.
733
734 A: It's possible that you have the VLAN configured on your physical
735    switch as the "native" VLAN.  In this mode, the switch treats
736    incoming packets either tagged with the native VLAN or untagged as
737    part of the native VLAN.  It may also send outgoing packets in the
738    native VLAN without a VLAN tag.
739
740    If this is the case, you have two choices:
741
742        - Change the physical switch port configuration to tag packets
743          it forwards to OVS with the native VLAN instead of forwarding
744          them untagged.
745
746        - Change the OVS configuration for the physical port to a
747          native VLAN mode.  For example, the following sets up a
748          bridge with port eth0 in "native-tagged" mode in VLAN 9:
749
750              ovs-vsctl add-br br0
751              ovs-vsctl add-port br0 eth0 tag=9 vlan_mode=native-tagged
752
753          In this situation, "native-untagged" mode will probably work
754          equally well.  Refer to the documentation for the Port table
755          in ovs-vswitchd.conf.db(5) for more information.
756
757 Q: I added a pair of VMs on different VLANs, like this:
758
759        ovs-vsctl add-br br0
760        ovs-vsctl add-port br0 eth0
761        ovs-vsctl add-port br0 tap0 tag=9
762        ovs-vsctl add-port br0 tap1 tag=10
763
764     but the VMs can't access each other, the external network, or the
765     Internet.
766
767 A: It is to be expected that the VMs can't access each other.  VLANs
768    are a means to partition a network.  When you configured tap0 and
769    tap1 as access ports for different VLANs, you indicated that they
770    should be isolated from each other.
771
772    As for the external network and the Internet, it seems likely that
773    the machines you are trying to access are not on VLAN 9 (or 10) and
774    that the Internet is not available on VLAN 9 (or 10).
775
776 Q: Can I configure an IP address on a VLAN?
777
778 A: Yes.  Use an "internal port" configured as an access port.  For
779    example, the following configures IP address 192.168.0.7 on VLAN 9.
780    That is, OVS will forward packets from eth0 to 192.168.0.7 only if
781    they have an 802.1Q header with VLAN 9.  Conversely, traffic
782    forwarded from 192.168.0.7 to eth0 will be tagged with an 802.1Q
783    header with VLAN 9:
784
785        ovs-vsctl add-br br0
786        ovs-vsctl add-port br0 eth0
787        ovs-vsctl add-port br0 vlan9 tag=9 -- set interface vlan9 type=internal
788        ifconfig vlan9 192.168.0.7
789
790 Q: My OpenFlow controller doesn't see the VLANs that I expect.
791
792 A: The configuration for VLANs in the Open vSwitch database (e.g. via
793    ovs-vsctl) only affects traffic that goes through Open vSwitch's
794    implementation of the OpenFlow "normal switching" action.  By
795    default, when Open vSwitch isn't connected to a controller and
796    nothing has been manually configured in the flow table, all traffic
797    goes through the "normal switching" action.  But, if you set up
798    OpenFlow flows on your own, through a controller or using ovs-ofctl
799    or through other means, then you have to implement VLAN handling
800    yourself.
801
802    You can use "normal switching" as a component of your OpenFlow
803    actions, e.g. by putting "normal" into the lists of actions on
804    ovs-ofctl or by outputting to OFPP_NORMAL from an OpenFlow
805    controller.  In situations where this is not suitable, you can
806    implement VLAN handling yourself, e.g.:
807
808        - If a packet comes in on an access port, and the flow table
809          needs to send it out on a trunk port, then the flow can add
810          the appropriate VLAN tag with the "mod_vlan_vid" action.
811
812        - If a packet comes in on a trunk port, and the flow table
813          needs to send it out on an access port, then the flow can
814          strip the VLAN tag with the "strip_vlan" action.
815
816 Q: I configured ports on a bridge as access ports with different VLAN
817    tags, like this:
818
819        ovs-vsctl add-br br0
820        ovs-vsctl set-controller br0 tcp:192.168.0.10:6633
821        ovs-vsctl add-port br0 eth0
822        ovs-vsctl add-port br0 tap0 tag=9
823        ovs-vsctl add-port br0 tap1 tag=10
824
825    but the VMs running behind tap0 and tap1 can still communicate,
826    that is, they are not isolated from each other even though they are
827    on different VLANs.
828
829 A: Do you have a controller configured on br0 (as the commands above
830    do)?  If so, then this is a variant on the previous question, "My
831    OpenFlow controller doesn't see the VLANs that I expect," and you
832    can refer to the answer there for more information.
833
834
835 Controllers
836 -----------
837
838 Q: What versions of OpenFlow does Open vSwitch support?
839
840 A: Open vSwitch 1.9 and earlier support only OpenFlow 1.0 (plus
841    extensions that bring in many of the features from later versions
842    of OpenFlow).
843
844    Open vSwitch versions 1.10 and later will have experimental support
845    for OpenFlow 1.2 and 1.3.  On these versions of Open vSwitch, the
846    following command enables OpenFlow 1.0, 1.2, and 1.3 on bridge br0:
847
848        ovs-vsctl set bridge br0 protocols=openflow10,openflow12,openflow13
849
850    Support for OpenFlow 1.1 is incomplete enough that it cannot yet be
851    enabled, even experimentally.
852
853    Support for OpenFlow 1.2 and 1.3 is still incomplete.  Work to be
854    done is tracked in OPENFLOW-1.1+ in the Open vSwitch source tree
855    (also via http://openvswitch.org/development/openflow-1-x-plan/).
856    When support for a given OpenFlow version is solidly implemented,
857    Open vSwitch will enable that version by default.
858
859 Q: I'm getting "error type 45250 code 0".  What's that?
860
861 A: This is a Open vSwitch extension to OpenFlow error codes.  Open
862    vSwitch uses this extension when it must report an error to an
863    OpenFlow controller but no standard OpenFlow error code is
864    suitable.
865
866    Open vSwitch logs the errors that it sends to controllers, so the
867    easiest thing to do is probably to look at the ovs-vswitchd log to
868    find out what the error was.
869
870    If you want to dissect the extended error message yourself, the
871    format is documented in include/openflow/nicira-ext.h in the Open
872    vSwitch source distribution.  The extended error codes are
873    documented in lib/ofp-errors.h.
874
875 Q1: Some of the traffic that I'd expect my OpenFlow controller to see
876     doesn't actually appear through the OpenFlow connection, even
877     though I know that it's going through.
878 Q2: Some of the OpenFlow flows that my controller sets up don't seem
879     to apply to certain traffic, especially traffic between OVS and
880     the controller itself.
881
882 A: By default, Open vSwitch assumes that OpenFlow controllers are
883    connected "in-band", that is, that the controllers are actually
884    part of the network that is being controlled.  In in-band mode,
885    Open vSwitch sets up special "hidden" flows to make sure that
886    traffic can make it back and forth between OVS and the controllers.
887    These hidden flows are higher priority than any flows that can be
888    set up through OpenFlow, and they are not visible through normal
889    OpenFlow flow table dumps.
890
891    Usually, the hidden flows are desirable and helpful, but
892    occasionally they can cause unexpected behavior.  You can view the
893    full OpenFlow flow table, including hidden flows, on bridge br0
894    with the command:
895
896        ovs-appctl bridge/dump-flows br0
897
898    to help you debug.  The hidden flows are those with priorities
899    greater than 65535 (the maximum priority that can be set with
900    OpenFlow).
901
902    The DESIGN file at the top level of the Open vSwitch source
903    distribution describes the in-band model in detail.
904
905    If your controllers are not actually in-band (e.g. they are on
906    localhost via 127.0.0.1, or on a separate network), then you should
907    configure your controllers in "out-of-band" mode.  If you have one
908    controller on bridge br0, then you can configure out-of-band mode
909    on it with:
910
911        ovs-vsctl set controller br0 connection-mode=out-of-band
912
913 Q: I configured all my controllers for out-of-band control mode but
914    "ovs-appctl bridge/dump-flows" still shows some hidden flows.
915
916 A: You probably have a remote manager configured (e.g. with "ovs-vsctl
917    set-manager").  By default, Open vSwitch assumes that managers need
918    in-band rules set up on every bridge.  You can disable these rules
919    on bridge br0 with:
920
921        ovs-vsctl set bridge br0 other-config:disable-in-band=true
922
923    This actually disables in-band control entirely for the bridge, as
924    if all the bridge's controllers were configured for out-of-band
925    control.
926
927 Q: My OpenFlow controller doesn't see the VLANs that I expect.
928
929 A: See answer under "VLANs", above.
930
931 Q: I ran "ovs-ofctl add-flow br0 nw_dst=192.168.0.1,actions=drop"
932    but I got a funny message like this:
933
934        ofp_util|INFO|normalization changed ofp_match, details:
935        ofp_util|INFO| pre: nw_dst=192.168.0.1
936        ofp_util|INFO|post:
937
938    and when I ran "ovs-ofctl dump-flows br0" I saw that my nw_dst
939    match had disappeared, so that the flow ends up matching every
940    packet.
941
942 A: The term "normalization" in the log message means that a flow
943    cannot match on an L3 field without saying what L3 protocol is in
944    use.  The "ovs-ofctl" command above didn't specify an L3 protocol,
945    so the L3 field match was dropped.
946
947    In this case, the L3 protocol could be IP or ARP.  A correct
948    command for each possibility is, respectively:
949
950        ovs-ofctl add-flow br0 ip,nw_dst=192.168.0.1,actions=drop
951
952    and 
953
954        ovs-ofctl add-flow br0 arp,nw_dst=192.168.0.1,actions=drop
955
956    Similarly, a flow cannot match on an L4 field without saying what
957    L4 protocol is in use.  For example, the flow match "tp_src=1234"
958    is, by itself, meaningless and will be ignored.  Instead, to match
959    TCP source port 1234, write "tcp,tp_src=1234", or to match UDP
960    source port 1234, write "udp,tp_src=1234".
961
962 Q: How can I figure out the OpenFlow port number for a given port?
963
964 A: The OFPT_FEATURES_REQUEST message requests an OpenFlow switch to
965    respond with an OFPT_FEATURES_REPLY that, among other information,
966    includes a mapping between OpenFlow port names and numbers.  From a
967    command prompt, "ovs-ofctl show br0" makes such a request and
968    prints the response for switch br0.
969
970    The Interface table in the Open vSwitch database also maps OpenFlow
971    port names to numbers.  To print the OpenFlow port number
972    associated with interface eth0, run:
973
974        ovs-vsctl get Interface eth0 ofport
975
976    You can print the entire mapping with:
977
978        ovs-vsctl -- --columns=name,ofport list Interface
979
980    but the output mixes together interfaces from all bridges in the
981    database, so it may be confusing if more than one bridge exists.
982
983    In the Open vSwitch database, ofport value -1 means that the
984    interface could not be created due to an error.  (The Open vSwitch
985    log should indicate the reason.)  ofport value [] (the empty set)
986    means that the interface hasn't been created yet.  The latter is
987    normally an intermittent condition (unless ovs-vswitchd is not
988    running).
989
990 Q: I added some flows with my controller or with ovs-ofctl, but when I
991    run "ovs-dpctl dump-flows" I don't see them.
992
993 A: ovs-dpctl queries a kernel datapath, not an OpenFlow switch.  It
994    won't display the information that you want.  You want to use
995    "ovs-ofctl dump-flows" instead.
996
997 Q: It looks like each of the interfaces in my bonded port shows up
998    as an individual OpenFlow port.  Is that right?
999
1000 A: Yes, Open vSwitch makes individual bond interfaces visible as
1001    OpenFlow ports, rather than the bond as a whole.  The interfaces
1002    are treated together as a bond for only a few purposes:
1003
1004        - Sending a packet to the OFPP_NORMAL port.  (When an OpenFlow
1005          controller is not configured, this happens implicitly to
1006          every packet.)
1007
1008        - Mirrors configured for output to a bonded port.
1009
1010    It would make a lot of sense for Open vSwitch to present a bond as
1011    a single OpenFlow port.  If you want to contribute an
1012    implementation of such a feature, please bring it up on the Open
1013    vSwitch development mailing list at dev@openvswitch.org.
1014
1015 Q: I have a sophisticated network setup involving Open vSwitch, VMs or
1016    multiple hosts, and other components.  The behavior isn't what I
1017    expect.  Help!
1018
1019 A: To debug network behavior problems, trace the path of a packet,
1020    hop-by-hop, from its origin in one host to a remote host.  If
1021    that's correct, then trace the path of the response packet back to
1022    the origin.
1023
1024    Usually a simple ICMP echo request and reply ("ping") packet is
1025    good enough.  Start by initiating an ongoing "ping" from the origin
1026    host to a remote host.  If you are tracking down a connectivity
1027    problem, the "ping" will not display any successful output, but
1028    packets are still being sent.  (In this case the packets being sent
1029    are likely ARP rather than ICMP.)
1030
1031    Tools available for tracing include the following:
1032
1033        - "tcpdump" and "wireshark" for observing hops across network
1034          devices, such as Open vSwitch internal devices and physical
1035          wires.
1036
1037        - "ovs-appctl dpif/dump-flows <br>" in Open vSwitch 1.10 and
1038          later or "ovs-dpctl dump-flows <br>" in earlier versions.
1039          These tools allow one to observe the actions being taken on
1040          packets in ongoing flows.
1041
1042          See ovs-vswitchd(8) for "ovs-appctl dpif/dump-flows"
1043          documentation, ovs-dpctl(8) for "ovs-dpctl dump-flows"
1044          documentation, and "Why are there so many different ways to
1045          dump flows?" above for some background.
1046
1047        - "ovs-appctl ofproto/trace" to observe the logic behind how
1048          ovs-vswitchd treats packets.  See ovs-vswitchd(8) for
1049          documentation.  You can out more details about a given flow
1050          that "ovs-dpctl dump-flows" displays, by cutting and pasting
1051          a flow from the output into an "ovs-appctl ofproto/trace"
1052          command.
1053
1054        - SPAN, RSPAN, and ERSPAN features of physical switches, to
1055          observe what goes on at these physical hops.
1056
1057    Starting at the origin of a given packet, observe the packet at
1058    each hop in turn.  For example, in one plausible scenario, you
1059    might:
1060
1061        1. "tcpdump" the "eth" interface through which an ARP egresses
1062           a VM, from inside the VM.
1063
1064        2. "tcpdump" the "vif" or "tap" interface through which the ARP
1065           ingresses the host machine.
1066
1067        3. Use "ovs-dpctl dump-flows" to spot the ARP flow and observe
1068           the host interface through which the ARP egresses the
1069           physical machine.  You may need to use "ovs-dpctl show" to
1070           interpret the port numbers.  If the output seems surprising,
1071           you can use "ovs-appctl ofproto/trace" to observe details of
1072           how ovs-vswitchd determined the actions in the "ovs-dpctl
1073           dump-flows" output.
1074
1075        4. "tcpdump" the "eth" interface through which the ARP egresses
1076           the physical machine.
1077
1078        5. "tcpdump" the "eth" interface through which the ARP
1079           ingresses the physical machine, at the remote host that
1080           receives the ARP.
1081
1082        6. Use "ovs-dpctl dump-flows" to spot the ARP flow on the
1083           remote host that receives the ARP and observe the VM "vif"
1084           or "tap" interface to which the flow is directed.  Again,
1085           "ovs-dpctl show" and "ovs-appctl ofproto/trace" might help.
1086
1087        7. "tcpdump" the "vif" or "tap" interface to which the ARP is
1088           directed.
1089
1090        8. "tcpdump" the "eth" interface through which the ARP
1091           ingresses a VM, from inside the VM.
1092
1093    It is likely that during one of these steps you will figure out the
1094    problem.  If not, then follow the ARP reply back to the origin, in
1095    reverse.
1096
1097 Contact 
1098 -------
1099
1100 bugs@openvswitch.org
1101 http://openvswitch.org/