diff options
author | thompsa <thompsa@FreeBSD.org> | 2007-12-18 07:04:50 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2007-12-18 07:04:50 +0000 |
commit | c0871871ded4b15c21ac453be4899f348fe6cba3 (patch) | |
tree | 82dc5dfed852c9728b22c6391af19910e9da342d /sys/net/if_bridge.c | |
parent | b7209126971ecb28bf4f6b1bbb24a078b590e35a (diff) | |
download | FreeBSD-src-c0871871ded4b15c21ac453be4899f348fe6cba3.zip FreeBSD-src-c0871871ded4b15c21ac453be4899f348fe6cba3.tar.gz |
When the bridge has an address and a packet comes in for it then drop it if the
link has been marked discarding by Spanning Tree. This would cause the bridge
to see duplicate packets to itself even if STP has correctly calculated the
topology and blocked redundant links.
Reported by: trasz
Tested by: trasz
MFC after: 3 days
Diffstat (limited to 'sys/net/if_bridge.c')
-rw-r--r-- | sys/net/if_bridge.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c index 4825483..af4cd4e 100644 --- a/sys/net/if_bridge.c +++ b/sys/net/if_bridge.c @@ -2118,6 +2118,13 @@ bridge_input(struct ifnet *ifp, struct mbuf *m) if (memcmp(eh->ether_dhost, IF_LLADDR(bifp), ETHER_ADDR_LEN) == 0) { + /* Block redundant paths to us */ + if ((bif->bif_flags & IFBIF_STP) && + bif->bif_stp.bp_state == BSTP_IFSTATE_DISCARDING) { + BRIDGE_UNLOCK(sc); + return (m); + } + /* * Filter on the physical interface. */ |