mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-09-02 15:02:51 +08:00
stp: arm the management failsafe only where an operator asked for it
Your console session shows the shape of this better than I could have. STP found a loop, blocked the port, unblocked the other side of the pair, and then the failsafe turned STP off. It had been disarmed by your first console command and re-armed by the loop detection itself, so a mechanism that exists to protect against a lockout ended up removing loop protection while a loop was physically present. That is the part that did not make sense, and it wasn't the console. Two changes, both narrowing. Loop detection and root guard no longer arm the window. Those are the protocol doing its job on evidence off the wire. Nothing an operator did needs undoing there, and nobody is waiting to confirm anything. Typing on the serial console no longer disarms it. The failsafe asks one question, whether the operator can still reach management over the network, and serial activity doesn't answer it. It proves somebody is standing at the box, which is the one case where a lockout doesn't matter, and it took the safety net away from a remote operator on behalf of someone not using it. HTTP activity still confirms, because that is the path being measured, and the console in the web interface counts for the same reason. What is left arms on stp on, stp port N on and stp failsafe, each of them an operator choosing something whose outcome the protocol then decides. Gives back 61 bytes of BANK2, 31 of the common area and a byte of xdata.
This commit is contained in:
@@ -276,10 +276,6 @@ static void stp_loop_hold_peer(uint8_t port) __reentrant
|
||||
print_string("STP: loop detected, blocking port ");
|
||||
print_port_nl(port);
|
||||
stp_state_set(port, 0b01);
|
||||
if (stp_failsafe_s && !stp_failsafe_armed) {
|
||||
stp_failsafe_armed = 1;
|
||||
stp_failsafe_cnt = stp_failsafe_s;
|
||||
}
|
||||
stp_pflags[port] &= ~STP_PF_OPEREDGE;
|
||||
stp_topology_change(port);
|
||||
}
|
||||
@@ -536,10 +532,6 @@ void stp_in(void) __banked
|
||||
print_string("STP: root guard blocking port ");
|
||||
print_port_nl(port);
|
||||
stp_state_set(port, 0b01);
|
||||
if (stp_failsafe_s && !stp_failsafe_armed) {
|
||||
stp_failsafe_armed = 1;
|
||||
stp_failsafe_cnt = stp_failsafe_s;
|
||||
}
|
||||
port_timers[port] = (uint16_t)stp_fwddelay_s * STP_HZ;
|
||||
stp_pflags[port] &= ~STP_PF_OPEREDGE;
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user