bonding: Compare ports, not interfaces, for loop checks.
authorJesse Gross <jesse@nicira.com>
Thu, 8 Oct 2009 19:20:10 +0000 (12:20 -0700)
committerJesse Gross <jesse@nicira.com>
Thu, 8 Oct 2009 20:47:07 +0000 (13:47 -0700)
In order to avoid loops we check that the input and output ports
are not equal.  When selecting mirror outputs for RSPAN we were
checking interfaces instead of ports.  This lead to loops when
using RSPAN with bonded ports.

Bug #2118

vswitchd/bridge.c

index f32d2baff8322bf2682789fd8aa961f2b228ed3c..4ad7e9bb7490d240ed4ba78757f598637e98548b 100644 (file)
@@ -1721,8 +1721,7 @@ compose_dsts(const struct bridge *br, const flow_t *flow, uint16_t vlan,
                         if (dst_is_duplicate(dsts, dst - dsts, dst)) {
                             continue;
                         }
-                        if (dst->dp_ifidx == flow->in_port
-                            && dst->vlan == vlan) {
+                        if (port == in_port && dst->vlan == vlan) {
                             /* Don't send out input port on same VLAN. */
                             continue;
                         }