mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-09-02 15:02:51 +08:00
doc: separate the trap action from CPU-port delivery
The wording read as a claim about the CPU interface in general, which is wrong and misleading: the 8051 sits behind an ordinary port of the internal switch and is an ordinary member of a forwarding mask - which is exactly what this implementation relies on. Say what is actually broken instead: the trap action, a separate mechanism whose destination is an external CPU port these boards do not populate. Record the measurements behind it, including the widened CPU_PMSK and both external-CPU destinations, and add the ACL trap result - a rule matching the group intercepts frames but does not deliver them either, which is a second, independent path to the same conclusion. Reported-by: vDorst
This commit is contained in:
+17
-4
@@ -38,10 +38,23 @@ stp on
|
|||||||
|
|
||||||
BPDUs are addressed to `01:80:C2:00:00:00`, a reserved link-local group. The
|
BPDUs are addressed to `01:80:C2:00:00:00`, a reserved link-local group. The
|
||||||
ASIC's Reserved-Multicast action for that address decides what happens to the
|
ASIC's Reserved-Multicast action for that address decides what happens to the
|
||||||
frame. The "trap to CPU" action does **not** reach the internal 8051 on this
|
frame.
|
||||||
hardware — its trap destination is an external CPU attached to a physical port
|
|
||||||
(`cpuTag_externalCpuPort_set` in the vendor SDK), which these boards do not
|
Forwarding to the CPU port works normally — the 8051 sits behind an ordinary
|
||||||
have. Delivery therefore uses the *forward* action, constrained to the CPU port
|
port of the internal switch and is an ordinary member of a forwarding mask.
|
||||||
|
What does not work is the *trap* action, which is a separate mechanism: its
|
||||||
|
destination is an external CPU attached to a physical port
|
||||||
|
(`cpuTag_externalCpuPort_set`, `EXT_CPU_CTRL` in the vendor SDK), which these
|
||||||
|
boards do not populate. Measured on a SWTGW218AS: with the RMA action set to
|
||||||
|
trap, zero frames arrive at the 8051, including with `CPU_PMSK` widened and the
|
||||||
|
external-CPU destination pointed at both `0xF` and `9`; with the *forward*
|
||||||
|
action plus the L2 entry below, they arrive. The ACL trap behaves the same way,
|
||||||
|
measured on the neighbouring reserved group `01:80:C2:00:00:02`: a rule matching
|
||||||
|
it intercepts the frames — the LACP receive counters stop advancing while the
|
||||||
|
rule is enabled and resume the moment it is disabled — but they never reach the
|
||||||
|
8051, with `FWD_INT_TRAP` and with `REDIRECT` aimed at the CPU port alike.
|
||||||
|
|
||||||
|
Delivery therefore uses the *forward* action, constrained to the CPU port
|
||||||
by a static L2 multicast entry (`port_l2mc_set()`), one per VLAN in use:
|
by a static L2 multicast entry (`port_l2mc_set()`), one per VLAN in use:
|
||||||
|
|
||||||
* while STP runs, the entry's member mask is the CPU port only — BPDUs reach
|
* while STP runs, the entry's member mask is the CPU port only — BPDUs reach
|
||||||
|
|||||||
Reference in New Issue
Block a user