docs: net: dsa: sja1105: document intended usage of virtual links
Add some verbiage describing how the hardware features of the switch are exposed to users through tc-flower. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
834f8933d5
commit
47cfa3af4e
@ -230,6 +230,122 @@ simultaneously on two ports. The driver checks the consistency of the schedules
|
||||
against this restriction and errors out when appropriate. Schedule analysis is
|
||||
needed to avoid this, which is outside the scope of the document.
|
||||
|
||||
Routing actions (redirect, trap, drop)
|
||||
--------------------------------------
|
||||
|
||||
The switch is able to offload flow-based redirection of packets to a set of
|
||||
destination ports specified by the user. Internally, this is implemented by
|
||||
making use of Virtual Links, a TTEthernet concept.
|
||||
|
||||
The driver supports 2 types of keys for Virtual Links:
|
||||
|
||||
- VLAN-aware virtual links: these match on destination MAC address, VLAN ID and
|
||||
VLAN PCP.
|
||||
- VLAN-unaware virtual links: these match on destination MAC address only.
|
||||
|
||||
The VLAN awareness state of the bridge (vlan_filtering) cannot be changed while
|
||||
there are virtual link rules installed.
|
||||
|
||||
Composing multiple actions inside the same rule is supported. When only routing
|
||||
actions are requested, the driver creates a "non-critical" virtual link. When
|
||||
the action list also contains tc-gate (more details below), the virtual link
|
||||
becomes "time-critical" (draws frame buffers from a reserved memory partition,
|
||||
etc).
|
||||
|
||||
The 3 routing actions that are supported are "trap", "drop" and "redirect".
|
||||
|
||||
Example 1: send frames received on swp2 with a DA of 42:be:24:9b:76:20 to the
|
||||
CPU and to swp3. This type of key (DA only) when the port's VLAN awareness
|
||||
state is off::
|
||||
|
||||
tc qdisc add dev swp2 clsact
|
||||
tc filter add dev swp2 ingress flower skip_sw dst_mac 42:be:24:9b:76:20 \
|
||||
action mirred egress redirect dev swp3 \
|
||||
action trap
|
||||
|
||||
Example 2: drop frames received on swp2 with a DA of 42:be:24:9b:76:20, a VID
|
||||
of 100 and a PCP of 0::
|
||||
|
||||
tc filter add dev swp2 ingress protocol 802.1Q flower skip_sw \
|
||||
dst_mac 42:be:24:9b:76:20 vlan_id 100 vlan_prio 0 action drop
|
||||
|
||||
Time-based ingress policing
|
||||
---------------------------
|
||||
|
||||
The TTEthernet hardware abilities of the switch can be constrained to act
|
||||
similarly to the Per-Stream Filtering and Policing (PSFP) clause specified in
|
||||
IEEE 802.1Q-2018 (formerly 802.1Qci). This means it can be used to perform
|
||||
tight timing-based admission control for up to 1024 flows (identified by a
|
||||
tuple composed of destination MAC address, VLAN ID and VLAN PCP). Packets which
|
||||
are received outside their expected reception window are dropped.
|
||||
|
||||
This capability can be managed through the offload of the tc-gate action. As
|
||||
routing actions are intrinsic to virtual links in TTEthernet (which performs
|
||||
explicit routing of time-critical traffic and does not leave that in the hands
|
||||
of the FDB, flooding etc), the tc-gate action may never appear alone when
|
||||
asking sja1105 to offload it. One (or more) redirect or trap actions must also
|
||||
follow along.
|
||||
|
||||
Example: create a tc-taprio schedule that is phase-aligned with a tc-gate
|
||||
schedule (the clocks must be synchronized by a 1588 application stack, which is
|
||||
outside the scope of this document). No packet delivered by the sender will be
|
||||
dropped. Note that the reception window is larger than the transmission window
|
||||
(and much more so, in this example) to compensate for the packet propagation
|
||||
delay of the link (which can be determined by the 1588 application stack).
|
||||
|
||||
Receiver (sja1105)::
|
||||
|
||||
tc qdisc add dev swp2 clsact
|
||||
now=$(phc_ctl /dev/ptp1 get | awk '/clock time is/ {print $5}') && \
|
||||
sec=$(echo $now | awk -F. '{print $1}') && \
|
||||
base_time="$(((sec + 2) * 1000000000))" && \
|
||||
echo "base time ${base_time}"
|
||||
tc filter add dev swp2 ingress flower skip_sw \
|
||||
dst_mac 42:be:24:9b:76:20 \
|
||||
action gate base-time ${base_time} \
|
||||
sched-entry OPEN 60000 -1 -1 \
|
||||
sched-entry CLOSE 40000 -1 -1 \
|
||||
action trap
|
||||
|
||||
Sender::
|
||||
|
||||
now=$(phc_ctl /dev/ptp0 get | awk '/clock time is/ {print $5}') && \
|
||||
sec=$(echo $now | awk -F. '{print $1}') && \
|
||||
base_time="$(((sec + 2) * 1000000000))" && \
|
||||
echo "base time ${base_time}"
|
||||
tc qdisc add dev eno0 parent root taprio \
|
||||
num_tc 8 \
|
||||
map 0 1 2 3 4 5 6 7 \
|
||||
queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 \
|
||||
base-time ${base_time} \
|
||||
sched-entry S 01 50000 \
|
||||
sched-entry S 00 50000 \
|
||||
flags 2
|
||||
|
||||
The engine used to schedule the ingress gate operations is the same that the
|
||||
one used for the tc-taprio offload. Therefore, the restrictions regarding the
|
||||
fact that no two gate actions (either tc-gate or tc-taprio gates) may fire at
|
||||
the same time (during the same 200 ns slot) still apply.
|
||||
|
||||
To come in handy, it is possible to share time-triggered virtual links across
|
||||
more than 1 ingress port, via flow blocks. In this case, the restriction of
|
||||
firing at the same time does not apply because there is a single schedule in
|
||||
the system, that of the shared virtual link::
|
||||
|
||||
tc qdisc add dev swp2 ingress_block 1 clsact
|
||||
tc qdisc add dev swp3 ingress_block 1 clsact
|
||||
tc filter add block 1 flower skip_sw dst_mac 42:be:24:9b:76:20 \
|
||||
action gate index 2 \
|
||||
base-time 0 \
|
||||
sched-entry OPEN 50000000 -1 -1 \
|
||||
sched-entry CLOSE 50000000 -1 -1 \
|
||||
action trap
|
||||
|
||||
Hardware statistics for each flow are also available ("pkts" counts the number
|
||||
of dropped frames, which is a sum of frames dropped due to timing violations,
|
||||
lack of destination ports and MTU enforcement checks). Byte-level counters are
|
||||
not available.
|
||||
|
||||
Device Tree bindings and board design
|
||||
=====================================
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user