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 f32d2ba..4ad7e9b 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;
                         }