diff options
author | thompsa <thompsa@FreeBSD.org> | 2006-11-02 00:39:36 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2006-11-02 00:39:36 +0000 |
commit | e6e29e358bcae4e62ea9a2d72c5b2501c75a1850 (patch) | |
tree | 6072943877d449531287b20761f6aa1195b61c4e | |
parent | bd92877da9c377fa34d33beb0fae443db8d81d24 (diff) | |
download | FreeBSD-src-e6e29e358bcae4e62ea9a2d72c5b2501c75a1850.zip FreeBSD-src-e6e29e358bcae4e62ea9a2d72c5b2501c75a1850.tar.gz |
If the port is agreed or edge then allow it go go straight to forwarding rather
than waiting another tick (1s) for the states to be checked again.
-rw-r--r-- | sys/net/bridgestp.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/sys/net/bridgestp.c b/sys/net/bridgestp.c index 3d9187a..957f8e6 100644 --- a/sys/net/bridgestp.c +++ b/sys/net/bridgestp.c @@ -1045,16 +1045,17 @@ bstp_update_roles(struct bstp_state *bs, struct bstp_port *bp) bp->bp_operedge) && (bp->bp_recent_root_timer.active == 0 || !bp->bp_reroot) && !bp->bp_sync) { - switch (bp->bp_state) { - case BSTP_IFSTATE_DISCARDING: - bstp_set_port_state(bp, BSTP_IFSTATE_LEARNING); - break; - case BSTP_IFSTATE_LEARNING: + /* + * If agreed|operedge then go straight to forwarding, + * otherwise follow discard -> learn -> forward. + */ + if (bp->bp_agreed || bp->bp_operedge || + bp->bp_state == BSTP_IFSTATE_LEARNING) { bstp_set_port_state(bp, BSTP_IFSTATE_FORWARDING); bp->bp_agreed = bp->bp_protover; - break; - } + } else if (bp->bp_state == BSTP_IFSTATE_DISCARDING) + bstp_set_port_state(bp, BSTP_IFSTATE_LEARNING); } if (((bp->bp_sync && !bp->bp_synced) || |