mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-10-29 17:54:14 +08:00
stp: pass a topology change on only from a forwarding port
stp_in() propagated the TC flag of any BPDU that did not arrive on an alternate port, and acknowledged and propagated a TCN from any port, so a port still in its listen period or held discarding in a dispute could flush the addresses of every other port and move the topology change counter. 802.1D-2004 17.31 keeps the Topology Change machine in LEARNING until the port forwards and drops rcvdTc and rcvdTcn there. Both paths now ask for the forwarding state first; an alternate port is discarding, so the old check is covered by the new one. Scenario 53 plays a TC flag and a TCN into a port that is still discarding, and then into the same port once it forwards. Scenario 51 used a TCN on a port one tick short of its edge transition as the trigger for the clock it tests; it now waits for the transition.
This commit is contained in:
1 parent
b92a773cad
commit
b86fd37eaa
3 files changed
+60
-5
No files matched your search
+4
-3
@@ -154,9 +154,10 @@ BPDUs toward the root, so the change reaches the rest of the network. With
|
||||
`stp version stp` the root port sends TCN instead, until a Config BPDU with
|
||||
TCA comes back.
|
||||
|
||||
A TC flag received on a root or designated port is passed on the same way to
|
||||
the other ports, not back to the port it came in on. A legacy TCN is
|
||||
acknowledged with TCA and then treated like a received TC. A port that turns
|
||||
A TC flag received on a forwarding root or designated port is passed on the
|
||||
same way to the other ports, not back to the port it came in on; a port that
|
||||
is still discarding or learning drops it. A legacy TCN is acknowledged with
|
||||
TCA and then treated like a received TC. A port that turns
|
||||
alternate, loses its link, or is blocked for a loop flushes its own addresses
|
||||
without raising a topology change, and an edge port never raises one.
|
||||
|
||||
|
||||
Reference in new issue
Block a user