diff options
| author | Andrew Thompson <thompsa@FreeBSD.org> | 2006-11-02 00:39:36 +0000 |
|---|---|---|
| committer | Andrew Thompson <thompsa@FreeBSD.org> | 2006-11-02 00:39:36 +0000 |
| commit | edc9f4ae99fa00b065cb47c1d0d0737686ab3dca (patch) | |
| tree | 6072943877d449531287b20761f6aa1195b61c4e /sys/net | |
| parent | 3398f41fc0edef1f321627f72cdf219787262085 (diff) | |
Notes
Diffstat (limited to 'sys/net')
| -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 3d9187abd0ea..957f8e65c46a 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) || |
