[ovs-discuss] Issue with multiple port in single Br

Ben Pfaff blp at nicira.com
Thu Sep 27 14:58:51 UTC 2012


On Thu, Sep 27, 2012 at 04:29:12PM +0200, r po wrote:
> I test ovs since few weeks, and I notice a strange thing (maybe it's normal but it's seems wrong to me )
> 
> this is my ovs's config
> 
>     Bridge PROD
>         Port "virt1_eth0"
>             tag: 10
>             Interface "virt1_eth0"
>         Port "prod1"
>             tag: 10
>             Interface "prod1"
>                 type: internal
>         Port PROD
>             Interface PROD
>                 type: internal
>         Port "prod2"
>             tag: 20
>             Interface "prod2"
>                 type: internal
>         Port "virt2_eth0"
>             tag: 20
>             Interface "virt2_eth0"
>         Port "bond0"
>             Interface "eth0"
>             Interface "eth1"
>     ovs_version: "1.4.0+build0"
> 
> all work. it's fine. Now i would add a new physical interface to a specific vlan on bridge PROD.
> 
> ovs-vsctl add-port PROD eth2 tag=300
> 
> then, I lost connection for few minutes before it will work again.

This sounds like a FAQ.

Q: I created a bridge and added a couple of Ethernet ports to it,
   using commands like these:

       ovs-vsctl add-br br0
       ovs-vsctl add-port br0 eth0
       ovs-vsctl add-port br0 eth1

   and now my network seems to have melted: connectivity is unreliable
   (even connectivity that doesn't go through Open vSwitch), all the
   LEDs on my physical switches are blinking, wireshark shows
   duplicated packets, and CPU usage is very high.

A: More than likely, you've looped your network.  Probably, eth0 and
   eth1 are connected to the same physical Ethernet switch.  This
   yields a scenario where OVS receives a broadcast packet on eth0 and
   sends it out on eth1, then the physical switch connected to eth1
   sends the packet back on eth0, and so on forever.  More complicated
   scenarios, involving a loop through multiple switches, are possible
   too.

   The solution depends on what you are trying to do:

       - If you added eth0 and eth1 to get higher bandwidth or higher
         reliability between OVS and your physical Ethernet switch,
         use a bond.  The following commands create br0 and then add
         eth0 and eth1 as a bond:

             ovs-vsctl add-br br0
             ovs-vsctl add-bond br0 bond0 eth0 eth1

         Bonds have tons of configuration options.  Please read the
         documentation on the Port table in ovs-vswitchd.conf.db(5)
         for all the details.

       - Perhaps you don't actually need eth0 and eth1 to be on the
         same bridge.  For example, if you simply want to be able to
         connect each of them to virtual machines, then you can put
         each of them on a bridge of its own:

             ovs-vsctl add-br br0
             ovs-vsctl add-port br0 eth0

             ovs-vsctl add-br br1
             ovs-vsctl add-port br1 eth1

         and then connect VMs to br0 and br1.  (A potential
         disadvantage is that traffic cannot directly pass between br0
         and br1.  Instead, it will go out eth0 and come back in eth1,
         or vice versa.)

       - If you have a redundant or complex network topology and you
         want to prevent loops, turn on spanning tree protocol (STP).
         The following commands create br0, enable STP, and add eth0
         and eth1 to the bridge.  The order is important because you
         don't want have to have a loop in your network even
         transiently:

             ovs-vsctl add-br br0
             ovs-vsctl set bridge br0 stp_enable=true
             ovs-vsctl add-port br0 eth0
             ovs-vsctl add-port br0 eth1

         The Open vSwitch implementation of STP is not well tested.
         Please report any bugs you observe, but if you'd rather avoid
         acting as a beta tester then another option might be your
         best shot.



More information about the discuss mailing list