Spanning tree (loop guard + standby)
When two paths now reach the same place, traffic can circle round and round forever instead of arriving — that is a loop. Left alone, a loop becomes a broadcast storm: the same packets multiply on every lap until they drown the whole fabric and everything goes dark. It is one of the fastest ways to take down a flat network, and it does not announce itself politely.
The engine's loop guard caught it before the storm formed and parked one of the two links. The parked link carries no traffic right now, but it is not broken — it stands by, ready to take over the instant the active path drops. That is genuine redundancy: if you cabled the second path on purpose as a backup, you are covered for free. If it was a miscable, just yank the spare and the warning clears.
A parked standby link is active/standby: one path works, the other waits. If you want both cables carrying traffic at the same time, you need two switches to behave as a single device — switch stacking or MLAG — so they share one brain and stop fighting over the loop. That capability only lives on the bigger managed switches. On a single switch, bonding two cables between the same pair of devices (a LAG) is the way to get both lanes working without tripping the guard, because the bundle counts as one link.
Detailed explanation
NetworkLoopDetected { switches, cables, blocked_cable } fires once per distinct loop signature. The engine's STP-equivalent picks one cable in the cycle and marks it administratively-down — no forwarding, port-state Blocked — so the remaining fabric keeps converging. The chosen edge is always one whose removal leaves the graph connected, so blocking it never strands anyone. It is a hot standby, not a fault: it unblocks automatically the moment the active path fails (real RSTP reconverges in seconds), and NetworkLoopResolved clears the signature when the loop is physically broken — cable removed or a switch powered off.
This is Spanning Tree Protocol: every L2 segment needs exactly one active path between any two points, and the protocol elects which one — giving you active/standby redundancy for free on any managed switch. Unmanaged switches have no spanning tree, so a loop on them is a straight broadcast storm with no guard. A LAG sidesteps STP entirely because the bonded bundle counts as one logical link, not two competing paths — see link aggregation.
To run both links live with no parked port — active/active across two chassis — the switches must share a control plane: switch stacking or MLAG/vPC. That presents the pair as one logical switch to spanning tree, so neither edge gets blocked. It is a higher-tier managed-switch capability, which is why a single L2 switch can only ever give you active/standby here. The choice between L2 bridging and L3 routing changes the picture too — routed links are loop-exempt because each hop is its own segment.