datapath: support Linux 3.7
[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
117 Releases
118 --------
119
120 Q: What does it mean for an Open vSwitch release to be LTS (long-term
121    support)?
122
123 A: All official releases have been through a comprehensive testing
124    process and are suitable for production use.  Planned releases will
125    occur several times a year.  If a significant bug is identified in an
126    LTS release, we will provide an updated release that includes the
127    fix.  Releases that are not LTS may not be fixed and may just be
128    supplanted by the next major release.  The current LTS release is
129    1.4.x.
130
131 Q: What Linux kernel versions does each Open vSwitch release work with?
132
133 A: The following table lists the Linux kernel versions against which the
134    given versions of the Open vSwitch kernel module will successfully
135    build.  The Linux kernel versions are upstream kernel versions, so
136    modified Linux kernels modified from the upstream sources may not
137    build in some cases even if they are based on a supported version.
138    This is most notably true of Red Hat Enterprise Linux (RHEL) kernels,
139    which are extensively modified from upstream.
140
141    Open vSwitch   Linux kernel
142    ------------   -------------
143        1.4.x      2.6.18 to 3.2
144        1.5.x      2.6.18 to 3.2
145        1.6.x      2.6.18 to 3.2
146        1.7.x      2.6.18 to 3.3
147        1.8.x      2.6.18 to 3.4
148        1.9.x      2.6.18 to 3.7
149
150    Open vSwitch userspace should also work with the Linux kernel module
151    built into Linux 3.3 and later.
152
153    Open vSwitch userspace is not sensitive to the Linux kernel version.
154    It should build against almost any kernel, certainly against 2.6.18
155    and later.
156
157 Q: What features are not available in the Open vSwitch kernel datapath
158    that ships as part of the upstream Linux kernel?
159
160 A: The kernel module in upstream Linux 3.3 and later does not include
161    the following features:
162
163        - Bridge compatibility, that is, support for the ovs-brcompatd
164          daemon that (if you enable it) lets "brctl" and other Linux
165          bridge tools transparently work with Open vSwitch instead.
166
167          We do not expect bridge compatibility to ever be available in
168          upstream Linux.  If you need bridge compatibility, use the
169          kernel module from the Open vSwitch distribution instead of the
170          upstream Linux kernel module.
171
172        - Tunnel virtual ports, that is, interfaces with type "gre",
173          "ipsec_gre", "capwap".  It is possible to create tunnels in
174          Linux and attach them to Open vSwitch as system devices.
175          However, they cannot be dynamically created through the OVSDB
176          protocol or set the tunnel ids as a flow action.
177
178          Work is in progress in adding these features to the upstream
179          Linux version of the Open vSwitch kernel module.  For now, if
180          you need these features, use the kernel module from the Open
181          vSwitch distribution instead of the upstream Linux kernel
182          module.
183
184        - Patch virtual ports, that is, interfaces with type "patch".
185          You can use Linux "veth" devices as a substitute.
186
187          We don't have any plans to add patch ports upstream.
188
189 Q: What features are not available when using the userspace datapath?
190
191 A: Tunnel and patch virtual ports are not supported, as described in the
192    previous answer.  It is also not possible to use queue-related
193    actions.  On Linux kernels before 2.6.39, maximum-sized VLAN packets
194    may not be transmitted.
195
196
197 Terminology
198 -----------
199
200 Q: I thought Open vSwitch was a virtual Ethernet switch, but the
201    documentation keeps talking about bridges.  What's a bridge?
202
203 A: In networking, the terms "bridge" and "switch" are synonyms.  Open
204    vSwitch implements an Ethernet switch, which means that it is also
205    an Ethernet bridge.
206
207 Q: What's a VLAN?
208
209 A: See the "VLAN" section below.
210
211
212 Basic Configuration
213 -------------------
214
215 Q: How do I configure a port as an access port?
216
217 A: Add "tag=VLAN" to your "ovs-vsctl add-port" command.  For example,
218    the following commands configure br0 with eth0 as a trunk port (the
219    default) and tap0 as an access port for VLAN 9:
220
221        ovs-vsctl add-br br0
222        ovs-vsctl add-port br0 eth0
223        ovs-vsctl add-port br0 tap0 tag=9
224
225    If you want to configure an already added port as an access port,
226    use "ovs-vsctl set", e.g.:
227
228        ovs-vsctl set port tap0 tag=9
229
230 Q: How do I configure a port as a SPAN port, that is, enable mirroring
231    of all traffic to that port?
232
233 A: The following commands configure br0 with eth0 and tap0 as trunk
234    ports.  All traffic coming in or going out on eth0 or tap0 is also
235    mirrored to tap1; any traffic arriving on tap1 is dropped:
236
237        ovs-vsctl add-br br0
238        ovs-vsctl add-port br0 eth0
239        ovs-vsctl add-port br0 tap0
240        ovs-vsctl add-port br0 tap1 \
241            -- --id=@p get port tap1 \
242            -- --id=@m create mirror name=m0 select-all=true output-port=@p \
243            -- set bridge br0 mirrors=@m
244
245    To later disable mirroring, run:
246
247        ovs-vsctl clear bridge br0 mirrors
248
249 Q: How do I configure a VLAN as an RSPAN VLAN, that is, enable
250    mirroring of all traffic to that VLAN?
251
252 A: The following commands configure br0 with eth0 as a trunk port and
253    tap0 as an access port for VLAN 10.  All traffic coming in or going
254    out on tap0, as well as traffic coming in or going out on eth0 in
255    VLAN 10, is also mirrored to VLAN 15 on eth0.  The original tag for
256    VLAN 10, in cases where one is present, is dropped as part of
257    mirroring:
258
259        ovs-vsctl add-br br0
260        ovs-vsctl add-port br0 eth0
261        ovs-vsctl add-port br0 tap0 tag=10
262        ovs-vsctl \
263            -- --id=@m create mirror name=m0 select-all=true select-vlan=10 \
264                                     output-vlan=15 \
265            -- set bridge br0 mirrors=@m
266
267    To later disable mirroring, run:
268
269        ovs-vsctl clear bridge br0 mirrors
270
271    Mirroring to a VLAN can disrupt a network that contains unmanaged
272    switches.  See ovs-vswitchd.conf.db(5) for details.  Mirroring to a
273    GRE tunnel has fewer caveats than mirroring to a VLAN and should
274    generally be preferred.
275
276 Q: Can I mirror more than one input VLAN to an RSPAN VLAN?
277
278 A: Yes, but mirroring to a VLAN strips the original VLAN tag in favor
279    of the specified output-vlan.  This loss of information may make
280    the mirrored traffic too hard to interpret.
281
282    To mirror multiple VLANs, use the commands above, but specify a
283    comma-separated list of VLANs as the value for select-vlan.  To
284    mirror every VLAN, use the commands above, but omit select-vlan and
285    its value entirely.
286
287    When a packet arrives on a VLAN that is used as a mirror output
288    VLAN, the mirror is disregarded.  Instead, in standalone mode, OVS
289    floods the packet across all the ports for which the mirror output
290    VLAN is configured.  (If an OpenFlow controller is in use, then it
291    can override this behavior through the flow table.)  If OVS is used
292    as an intermediate switch, rather than an edge switch, this ensures
293    that the RSPAN traffic is distributed through the network.
294
295    Mirroring to a VLAN can disrupt a network that contains unmanaged
296    switches.  See ovs-vswitchd.conf.db(5) for details.  Mirroring to a
297    GRE tunnel has fewer caveats than mirroring to a VLAN and should
298    generally be preferred.
299
300 Q: How do I configure mirroring of all traffic to a GRE tunnel?
301
302 A: The following commands configure br0 with eth0 and tap0 as trunk
303    ports.  All traffic coming in or going out on eth0 or tap0 is also
304    mirrored to gre0, a GRE tunnel to the remote host 192.168.1.10; any
305    traffic arriving on gre0 is dropped:
306
307        ovs-vsctl add-br br0
308        ovs-vsctl add-port br0 eth0
309        ovs-vsctl add-port br0 tap0
310        ovs-vsctl add-port br0 gre0 \
311            -- set interface gre0 type=gre options:remote_ip=192.168.1.10 \
312            -- --id=@p get port gre0 \
313            -- --id=@m create mirror name=m0 select-all=true output-port=@p \
314            -- set bridge br0 mirrors=@m
315
316    To later disable mirroring and destroy the GRE tunnel:
317
318        ovs-vsctl clear bridge br0 mirrors
319        ovs-vcstl del-port br0 gre0
320
321 Q: Does Open vSwitch support ERSPAN?
322
323 A: No.  ERSPAN is an undocumented proprietary protocol.  As an
324    alternative, Open vSwitch supports mirroring to a GRE tunnel (see
325    above).
326
327
328 Configuration Problems
329 ----------------------
330
331 Q: I created a bridge and added my Ethernet port to it, using commands
332    like these:
333
334        ovs-vsctl add-br br0
335        ovs-vsctl add-port br0 eth0
336
337    and as soon as I ran the "add-port" command I lost all connectivity
338    through eth0.  Help!
339
340 A: A physical Ethernet device that is part of an Open vSwitch bridge
341    should not have an IP address.  If one does, then that IP address
342    will not be fully functional.
343
344    You can restore functionality by moving the IP address to an Open
345    vSwitch "internal" device, such as the network device named after
346    the bridge itself.  For example, assuming that eth0's IP address is
347    192.168.128.5, you could run the commands below to fix up the
348    situation:
349
350        ifconfig eth0 0.0.0.0
351        ifconfig br0 192.168.128.5
352
353    (If your only connection to the machine running OVS is through the
354    IP address in question, then you would want to run all of these
355    commands on a single command line, or put them into a script.)  If
356    there were any additional routes assigned to eth0, then you would
357    also want to use commands to adjust these routes to go through br0.
358
359    If you use DHCP to obtain an IP address, then you should kill the
360    DHCP client that was listening on the physical Ethernet interface
361    (e.g. eth0) and start one listening on the internal interface
362    (e.g. br0).  You might still need to manually clear the IP address
363    from the physical interface (e.g. with "ifconfig eth0 0.0.0.0").
364
365    There is no compelling reason why Open vSwitch must work this way.
366    However, this is the way that the Linux kernel bridge module has
367    always worked, so it's a model that those accustomed to Linux
368    bridging are already used to.  Also, the model that most people
369    expect is not implementable without kernel changes on all the
370    versions of Linux that Open vSwitch supports.
371
372    By the way, this issue is not specific to physical Ethernet
373    devices.  It applies to all network devices except Open vswitch
374    "internal" devices.
375
376 Q: I created a bridge and added a couple of Ethernet ports to it,
377    using commands like these:
378
379        ovs-vsctl add-br br0
380        ovs-vsctl add-port br0 eth0
381        ovs-vsctl add-port br0 eth1
382
383    and now my network seems to have melted: connectivity is unreliable
384    (even connectivity that doesn't go through Open vSwitch), all the
385    LEDs on my physical switches are blinking, wireshark shows
386    duplicated packets, and CPU usage is very high.
387
388 A: More than likely, you've looped your network.  Probably, eth0 and
389    eth1 are connected to the same physical Ethernet switch.  This
390    yields a scenario where OVS receives a broadcast packet on eth0 and
391    sends it out on eth1, then the physical switch connected to eth1
392    sends the packet back on eth0, and so on forever.  More complicated
393    scenarios, involving a loop through multiple switches, are possible
394    too.
395
396    The solution depends on what you are trying to do:
397
398        - If you added eth0 and eth1 to get higher bandwidth or higher
399          reliability between OVS and your physical Ethernet switch,
400          use a bond.  The following commands create br0 and then add
401          eth0 and eth1 as a bond:
402
403              ovs-vsctl add-br br0
404              ovs-vsctl add-bond br0 bond0 eth0 eth1
405
406          Bonds have tons of configuration options.  Please read the
407          documentation on the Port table in ovs-vswitchd.conf.db(5)
408          for all the details.
409
410        - Perhaps you don't actually need eth0 and eth1 to be on the
411          same bridge.  For example, if you simply want to be able to
412          connect each of them to virtual machines, then you can put
413          each of them on a bridge of its own:
414
415              ovs-vsctl add-br br0
416              ovs-vsctl add-port br0 eth0
417
418              ovs-vsctl add-br br1
419              ovs-vsctl add-port br1 eth1
420
421          and then connect VMs to br0 and br1.  (A potential
422          disadvantage is that traffic cannot directly pass between br0
423          and br1.  Instead, it will go out eth0 and come back in eth1,
424          or vice versa.)
425
426        - If you have a redundant or complex network topology and you
427          want to prevent loops, turn on spanning tree protocol (STP).
428          The following commands create br0, enable STP, and add eth0
429          and eth1 to the bridge.  The order is important because you
430          don't want have to have a loop in your network even
431          transiently:
432
433              ovs-vsctl add-br br0
434              ovs-vsctl set bridge br0 stp_enable=true
435              ovs-vsctl add-port br0 eth0
436              ovs-vsctl add-port br0 eth1
437
438          The Open vSwitch implementation of STP is not well tested.
439          Please report any bugs you observe, but if you'd rather avoid
440          acting as a beta tester then another option might be your
441          best shot.
442
443 Q: I can't seem to use Open vSwitch in a wireless network.
444
445 A: Wireless base stations generally only allow packets with the source
446    MAC address of NIC that completed the initial handshake.
447    Therefore, without MAC rewriting, only a single device can
448    communicate over a single wireless link.
449
450    This isn't specific to Open vSwitch, it's enforced by the access
451    point, so the same problems will show up with the Linux bridge or
452    any other way to do bridging.
453
454 Q: Is there any documentation on the database tables and fields?
455
456 A: Yes.  ovs-vswitchd.conf.db(5) is a comprehensive reference.
457
458 Q: When I run ovs-dpctl I no longer see the bridges I created.  Instead,
459    I only see a datapath called "ovs-system".  How can I see datapath
460    information about a particular bridge?
461
462 A: In version 1.9.0, OVS switched to using a single datapath that is
463    shared by all bridges of that type.  The "ovs-appctl dpif/*"
464    commands provide similar functionality that is scoped by the bridge.
465
466
467 VLANs
468 -----
469
470 Q: What's a VLAN?
471
472 A: At the simplest level, a VLAN (short for "virtual LAN") is a way to
473    partition a single switch into multiple switches.  Suppose, for
474    example, that you have two groups of machines, group A and group B.
475    You want the machines in group A to be able to talk to each other,
476    and you want the machine in group B to be able to talk to each
477    other, but you don't want the machines in group A to be able to
478    talk to the machines in group B.  You can do this with two
479    switches, by plugging the machines in group A into one switch and
480    the machines in group B into the other switch.
481
482    If you only have one switch, then you can use VLANs to do the same
483    thing, by configuring the ports for machines in group A as VLAN
484    "access ports" for one VLAN and the ports for group B as "access
485    ports" for a different VLAN.  The switch will only forward packets
486    between ports that are assigned to the same VLAN, so this
487    effectively subdivides your single switch into two independent
488    switches, one for each group of machines.
489
490    So far we haven't said anything about VLAN headers.  With access
491    ports, like we've described so far, no VLAN header is present in
492    the Ethernet frame.  This means that the machines (or switches)
493    connected to access ports need not be aware that VLANs are
494    involved, just like in the case where we use two different physical
495    switches.
496
497    Now suppose that you have a whole bunch of switches in your
498    network, instead of just one, and that some machines in group A are
499    connected directly to both switches 1 and 2.  To allow these
500    machines to talk to each other, you could add an access port for
501    group A's VLAN to switch 1 and another to switch 2, and then
502    connect an Ethernet cable between those ports.  That works fine,
503    but it doesn't scale well as the number of switches and the number
504    of VLANs increases, because you use up a lot of valuable switch
505    ports just connecting together your VLANs.
506
507    This is where VLAN headers come in.  Instead of using one cable and
508    two ports per VLAN to connect a pair of switches, we configure a
509    port on each switch as a VLAN "trunk port".  Packets sent and
510    received on a trunk port carry a VLAN header that says what VLAN
511    the packet belongs to, so that only two ports total are required to
512    connect the switches, regardless of the number of VLANs in use.
513    Normally, only switches (either physical or virtual) are connected
514    to a trunk port, not individual hosts, because individual hosts
515    don't expect to see a VLAN header in the traffic that they receive.
516
517    None of the above discussion says anything about particular VLAN
518    numbers.  This is because VLAN numbers are completely arbitrary.
519    One must only ensure that a given VLAN is numbered consistently
520    throughout a network and that different VLANs are given different
521    numbers.  (That said, VLAN 0 is usually synonymous with a packet
522    that has no VLAN header, and VLAN 4095 is reserved.)
523
524 Q: VLANs don't work.
525
526 A: Many drivers in Linux kernels before version 3.3 had VLAN-related
527    bugs.  If you are having problems with VLANs that you suspect to be
528    driver related, then you have several options:
529
530        - Upgrade to Linux 3.3 or later.
531
532        - Build and install a fixed version of the particular driver
533          that is causing trouble, if one is available.
534
535        - Use a NIC whose driver does not have VLAN problems.
536
537        - Use "VLAN splinters", a feature in Open vSwitch 1.4 and later
538          that works around bugs in kernel drivers.  To enable VLAN
539          splinters on interface eth0, use the command:
540
541            ovs-vsctl set interface eth0 other-config:enable-vlan-splinters=true
542
543          For VLAN splinters to be effective, Open vSwitch must know
544          which VLANs are in use.  See the "VLAN splinters" section in
545          the Interface table in ovs-vswitchd.conf.db(5) for details on
546          how Open vSwitch infers in-use VLANs.
547
548          VLAN splinters increase memory use and reduce performance, so
549          use them only if needed.
550
551        - Apply the "vlan workaround" patch from the XenServer kernel
552          patch queue, build Open vSwitch against this patched kernel,
553          and then use ovs-vlan-bug-workaround(8) to enable the VLAN
554          workaround for each interface whose driver is buggy.
555
556          (This is a nontrivial exercise, so this option is included
557          only for completeness.)
558
559    It is not always easy to tell whether a Linux kernel driver has
560    buggy VLAN support.  The ovs-vlan-test(8) and ovs-test(8) utilities
561    can help you test.  See their manpages for details.  Of the two
562    utilities, ovs-test(8) is newer and more thorough, but
563    ovs-vlan-test(8) may be easier to use.
564
565 Q: VLANs still don't work.  I've tested the driver so I know that it's OK.
566
567 A: Do you have VLANs enabled on the physical switch that OVS is
568    attached to?  Make sure that the port is configured to trunk the
569    VLAN or VLANs that you are using with OVS.
570
571 Q: Outgoing VLAN-tagged traffic goes through OVS to my physical switch
572    and to its destination host, but OVS seems to drop incoming return
573    traffic.
574
575 A: It's possible that you have the VLAN configured on your physical
576    switch as the "native" VLAN.  In this mode, the switch treats
577    incoming packets either tagged with the native VLAN or untagged as
578    part of the native VLAN.  It may also send outgoing packets in the
579    native VLAN without a VLAN tag.
580
581    If this is the case, you have two choices:
582
583        - Change the physical switch port configuration to tag packets
584          it forwards to OVS with the native VLAN instead of forwarding
585          them untagged.
586
587        - Change the OVS configuration for the physical port to a
588          native VLAN mode.  For example, the following sets up a
589          bridge with port eth0 in "native-tagged" mode in VLAN 9:
590
591              ovs-vsctl add-br br0
592              ovs-vsctl add-port br0 eth0 tag=9 vlan_mode=native-tagged
593
594          In this situation, "native-untagged" mode will probably work
595          equally well.  Refer to the documentation for the Port table
596          in ovs-vswitchd.conf.db(5) for more information.
597
598 Q: I added a pair of VMs on different VLANs, like this:
599
600        ovs-vsctl add-br br0
601        ovs-vsctl add-port br0 eth0
602        ovs-vsctl add-port br0 tap0 tag=9
603        ovs-vsctl add-port br0 tap1 tag=10
604
605     but the VMs can't access each other, the external network, or the
606     Internet.
607
608 A: It is to be expected that the VMs can't access each other.  VLANs
609    are a means to partition a network.  When you configured tap0 and
610    tap1 as access ports for different VLANs, you indicated that they
611    should be isolated from each other.
612
613    As for the external network and the Internet, it seems likely that
614    the machines you are trying to access are not on VLAN 9 (or 10) and
615    that the Internet is not available on VLAN 9 (or 10).
616
617 Q: Can I configure an IP address on a VLAN?
618
619 A: Yes.  Use an "internal port" configured as an access port.  For
620    example, the following configures IP address 192.168.0.7 on VLAN 9.
621    That is, OVS will forward packets from eth0 to 192.168.0.7 only if
622    they have an 802.1Q header with VLAN 9.  Conversely, traffic
623    forwarded from 192.168.0.7 to eth0 will be tagged with an 802.1Q
624    header with VLAN 9:
625
626        ovs-vsctl add-br br0
627        ovs-vsctl add-port br0 eth0
628        ovs-vsctl add-port br0 vlan9 tag=9 -- set interface vlan9 type=internal
629        ifconfig vlan9 192.168.0.7
630
631 Q: My OpenFlow controller doesn't see the VLANs that I expect.
632
633 A: The configuration for VLANs in the Open vSwitch database (e.g. via
634    ovs-vsctl) only affects traffic that goes through Open vSwitch's
635    implementation of the OpenFlow "normal switching" action.  By
636    default, when Open vSwitch isn't connected to a controller and
637    nothing has been manually configured in the flow table, all traffic
638    goes through the "normal switching" action.  But, if you set up
639    OpenFlow flows on your own, through a controller or using ovs-ofctl
640    or through other means, then you have to implement VLAN handling
641    yourself.
642
643    You can use "normal switching" as a component of your OpenFlow
644    actions, e.g. by putting "normal" into the lists of actions on
645    ovs-ofctl or by outputting to OFPP_NORMAL from an OpenFlow
646    controller.  This will only be suitable for some situations,
647    though.
648
649 Q: I configured ports on a bridge as access ports with different VLAN
650    tags, like this:
651
652        ovs-vsctl add-br br0
653        ovs-vsctl set-controller br0 tcp:192.168.0.10:6633
654        ovs-vsctl add-port br0 eth0
655        ovs-vsctl add-port br0 tap0 tag=9
656        ovs-vsctl add-port br0 tap1 tag=10
657
658    but the VMs running behind tap0 and tap1 can still communicate,
659    that is, they are not isolated from each other even though they are
660    on different VLANs.
661
662 A: Do you have a controller configured on br0 (as the commands above
663    do)?  If so, then this is a variant on the previous question, "My
664    OpenFlow controller doesn't see the VLANs that I expect," and you
665    can refer to the answer there for more information.
666
667
668 Controllers
669 -----------
670
671 Q: What versions of OpenFlow does Open vSwitch support?
672
673 A: Open vSwitch supports OpenFlow 1.0.  It also includes a number of
674    extensions that bring many of the features from later versions of
675    OpenFlow.  Work is underway to provide support for later versions and
676    can be tracked here:
677
678        http://openvswitch.org/development/openflow-1-x-plan/
679
680 Q: I'm getting "error type 45250 code 0".  What's that?
681
682 A: This is a Open vSwitch extension to OpenFlow error codes.  Open
683    vSwitch uses this extension when it must report an error to an
684    OpenFlow controller but no standard OpenFlow error code is
685    suitable.
686
687    Open vSwitch logs the errors that it sends to controllers, so the
688    easiest thing to do is probably to look at the ovs-vswitchd log to
689    find out what the error was.
690
691    If you want to dissect the extended error message yourself, the
692    format is documented in include/openflow/nicira-ext.h in the Open
693    vSwitch source distribution.  The extended error codes are
694    documented in lib/ofp-errors.h.
695
696 Q1: Some of the traffic that I'd expect my OpenFlow controller to see
697     doesn't actually appear through the OpenFlow connection, even
698     though I know that it's going through.
699 Q2: Some of the OpenFlow flows that my controller sets up don't seem
700     to apply to certain traffic, especially traffic between OVS and
701     the controller itself.
702
703 A: By default, Open vSwitch assumes that OpenFlow controllers are
704    connected "in-band", that is, that the controllers are actually
705    part of the network that is being controlled.  In in-band mode,
706    Open vSwitch sets up special "hidden" flows to make sure that
707    traffic can make it back and forth between OVS and the controllers.
708    These hidden flows are higher priority than any flows that can be
709    set up through OpenFlow, and they are not visible through normal
710    OpenFlow flow table dumps.
711
712    Usually, the hidden flows are desirable and helpful, but
713    occasionally they can cause unexpected behavior.  You can view the
714    full OpenFlow flow table, including hidden flows, on bridge br0
715    with the command:
716
717        ovs-appctl bridge/dump-flows br0
718
719    to help you debug.  The hidden flows are those with priorities
720    greater than 65535 (the maximum priority that can be set with
721    OpenFlow).
722
723    The DESIGN file at the top level of the Open vSwitch source
724    distribution describes the in-band model in detail.
725
726    If your controllers are not actually in-band (e.g. they are on
727    localhost via 127.0.0.1, or on a separate network), then you should
728    configure your controllers in "out-of-band" mode.  If you have one
729    controller on bridge br0, then you can configure out-of-band mode
730    on it with:
731
732        ovs-vsctl set controller br0 connection-mode=out-of-band
733
734 Q: I configured all my controllers for out-of-band control mode but
735    "ovs-appctl bridge/dump-flows" still shows some hidden flows.
736
737 A: You probably have a remote manager configured (e.g. with "ovs-vsctl
738    set-manager").  By default, Open vSwitch assumes that managers need
739    in-band rules set up on every bridge.  You can disable these rules
740    on bridge br0 with:
741
742        ovs-vsctl set bridge br0 other-config:disable-in-band=true
743
744    This actually disables in-band control entirely for the bridge, as
745    if all the bridge's controllers were configured for out-of-band
746    control.
747
748 Q: My OpenFlow controller doesn't see the VLANs that I expect.
749
750 A: See answer under "VLANs", above.
751
752 Q: I ran "ovs-ofctl add-flow br0 nw_dst=192.168.0.1,actions=drop"
753    but I got a funny message like this:
754
755        ofp_util|INFO|normalization changed ofp_match, details:
756        ofp_util|INFO| pre: nw_dst=192.168.0.1
757        ofp_util|INFO|post:
758
759    and when I ran "ovs-ofctl dump-flows br0" I saw that my nw_dst
760    match had disappeared, so that the flow ends up matching every
761    packet.
762
763 A: The term "normalization" in the log message means that a flow
764    cannot match on an L3 field without saying what L3 protocol is in
765    use.  The "ovs-ofctl" command above didn't specify an L3 protocol,
766    so the L3 field match was dropped.
767
768    In this case, the L3 protocol could be IP or ARP.  A correct
769    command for each possibility is, respectively:
770
771        ovs-ofctl add-flow br0 ip,nw_dst=192.168.0.1,actions=drop
772
773    and 
774
775        ovs-ofctl add-flow br0 arp,nw_dst=192.168.0.1,actions=drop
776
777    Similarly, a flow cannot match on an L4 field without saying what
778    L4 protocol is in use.  For example, the flow match "tp_src=1234"
779    is, by itself, meaningless and will be ignored.  Instead, to match
780    TCP source port 1234, write "tcp,tp_src=1234", or to match UDP
781    source port 1234, write "udp,tp_src=1234".
782
783 Q: How can I figure out the OpenFlow port number for a given port?
784
785 A: The OFPT_FEATURES_REQUEST message requests an OpenFlow switch to
786    respond with an OFPT_FEATURES_REPLY that, among other information,
787    includes a mapping between OpenFlow port names and numbers.  From a
788    command prompt, "ovs-ofctl show br0" makes such a request and
789    prints the response for switch br0.
790
791    The Interface table in the Open vSwitch database also maps OpenFlow
792    port names to numbers.  To print the OpenFlow port number
793    associated with interface eth0, run:
794
795        ovs-vsctl get Interface eth0 ofport
796
797    You can print the entire mapping with:
798
799        ovs-vsctl -- --columns=name,ofport list Interface
800
801    but the output mixes together interfaces from all bridges in the
802    database, so it may be confusing if more than one bridge exists.
803
804    In the Open vSwitch database, ofport value -1 means that the
805    interface could not be created due to an error.  (The Open vSwitch
806    log should indicate the reason.)  ofport value [] (the empty set)
807    means that the interface hasn't been created yet.  The latter is
808    normally an intermittent condition (unless ovs-vswitchd is not
809    running).
810
811 Q: I added some flows with my controller or with ovs-ofctl, but when I
812    run "ovs-dpctl dump-flows" I don't see them.
813
814 A: ovs-dpctl queries a kernel datapath, not an OpenFlow switch.  It
815    won't display the information that you want.  You want to use
816    "ovs-ofctl dump-flows" instead.
817
818 Q: It looks like each of the interfaces in my bonded port shows up
819    as an individual OpenFlow port.  Is that right?
820
821 A: Yes, Open vSwitch makes individual bond interfaces visible as
822    OpenFlow ports, rather than the bond as a whole.  The interfaces
823    are treated together as a bond for only a few purposes:
824
825        - Sending a packet to the OFPP_NORMAL port.  (When an OpenFlow
826          controller is not configured, this happens implicitly to
827          every packet.)
828
829        - The "autopath" Nicira extension action.  However, "autopath"
830          is deprecated and scheduled for removal in February 2013.
831
832        - Mirrors configured for output to a bonded port.
833
834    It would make a lot of sense for Open vSwitch to present a bond as
835    a single OpenFlow port.  If you want to contribute an
836    implementation of such a feature, please bring it up on the Open
837    vSwitch development mailing list at dev@openvswitch.org.
838
839 Contact 
840 -------
841
842 bugs@openvswitch.org
843 http://openvswitch.org/