diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index f0615b84..93bd8317 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -4,6 +4,15 @@ Change Log All notable changes to the project are documented in this file. +[v24.10.2][UNRELEASED] +------------------------- + +### Changes + +- Updated QoS documentation with pictures and more information on VLAN + interface ingress/egress priority handling. + + [v24.10.1][] - 2024-10-18 ------------------------- @@ -1244,7 +1253,7 @@ Supported YANG models in addition to those used by sysrepo and netopeer: - N/A [buildroot]: https://buildroot.org/ -[UNRELEASED]: https://github.com/kernelkit/infix/compare/v24.10.0...HEAD +[UNRELEASED]: https://github.com/kernelkit/infix/compare/v24.10.1...HEAD [v24.10.1]: https://github.com/kernelkit/infix/compare/v24.10.0...v24.10.1 [v24.10.0]: https://github.com/kernelkit/infix/compare/v24.09.0...v24.10.0 [v24.09.0]: https://github.com/kernelkit/infix/compare/v24.08.0...v24.09.0 diff --git a/doc/img/qos-complex.svg b/doc/img/qos-complex.svg new file mode 100644 index 00000000..9b322c29 --- /dev/null +++ b/doc/img/qos-complex.svg @@ -0,0 +1,3 @@ + + +
HW Offloading for
Switchcore ports
eth
eth
eth
e1
e2
e3
e4
VLAN 10
VLAN 20
PCP priority 0..7
on ingress from
- tag (PCP)
- DSCP
- else '0'
eth
e5
Egress queue policy
(8 queues per port)
VLAN bridge
br0
CPU
Internal
Priority (0..7)
egress-qos mapping
0..7 or 'from 
(internal) priority'
ingress-qos mapping
0..7 or 'from PCP'
Container
with TC
br0.10
PCP (0..7)
br0.20
PCP (0..7)
vlan
vlan
eth
\ No newline at end of file diff --git a/doc/img/qos-hw-mvls.svg b/doc/img/qos-hw-mvls.svg new file mode 100644 index 00000000..9a646274 --- /dev/null +++ b/doc/img/qos-hw-mvls.svg @@ -0,0 +1,3 @@ + + +
HW Offloading for
Switchcore ports
eth
eth
eth
eth
e1
e2
e3
e4
VLAN 10
VLAN 20
PCP priority 0..7
on ingress from
- tag (PCP)
- DSCP
- else '0'
eth
e5
Egress queue policy
(8 queues per port)
To CPU (no
HW-offloading)

vlan
br0.10
VLAN bridge
br0
\ No newline at end of file diff --git a/doc/img/qos-vlan-iface.svg b/doc/img/qos-vlan-iface.svg new file mode 100644 index 00000000..1c604c74 --- /dev/null +++ b/doc/img/qos-vlan-iface.svg @@ -0,0 +1,3 @@ + + +
eth
VID 20
CPU
Internal
Priority (0..7)
egress-qos mapping
0..7 or 'from 
(internal) priority'
ingress-qos mapping
0..7 or 'from PCP'
Container
with TC
e1.10
PCP (0..7)
e1.20
PCP (0..7)
vlan
vlan
VID 10
e1
\ No newline at end of file diff --git a/doc/qos.md b/doc/qos.md index 1e52e4ae..25e3b047 100644 --- a/doc/qos.md +++ b/doc/qos.md @@ -12,14 +12,6 @@ packets to drop and which ones to prioritize, such that critical services remain operational. -## Software Forwarded Traffic - -For packets which are processed by a CPU, i.e. typically routed -traffic, and bridged traffic between interfaces that do not belong to -the same hardware switching domain, an [nftables container][1] can be -used to define a QoS policy. - - ## Hardware Forwarded Traffic The default QoS policy for flows which are offloaded to a switching @@ -34,6 +26,14 @@ chips in this family where limited to 4 output queues per port, this documentation is _only_ valid for newer generations with 8 output queues per port. +![Hardware offloading for Marvell Link Street](img/qos-hw-mvls.svg) + +The picture illustrates packets having their priority determined at +ingress, here interface _e1_ and _e3_. In this example, both packets +are forwarded to the same outgoing interface (_e2_), subject to output +queueing. The sections below provides more information on these +topics. + #### Default Policy ##### Queueing @@ -73,6 +73,41 @@ set to the 3 most significant bits of it. If no priority information is available in the frame on ingress (i.e. untagged non-IP), then packets will egress out of tagged ports with PCP set to 0. +## Software Forwarded Traffic + +For packets which are processed by a CPU, i.e. typically routed +traffic, and bridged traffic between interfaces that do not belong to +the same hardware switching domain, an [nftables container][1] can be +used to define a QoS policy. + +For VLAN interfaces, Infix provides support for mapping the Priority +Code Point (PCP) to internal priority on ingress, and the reverse on +egress. + +![Ingress and Egress Priority mapping for VLAN interfaces](img/qos-vlan-iface.svg) + + +These `ingress-qos` and `egress-qos` settings are done per VLAN, both +defaulting to '0'. The example below shows how to keep the PCP priority +for packets being routed between two VLAN interfaces. + +``` +admin@example:/config/> edit interface e1.10 +admin@example:/config/interface/e1.10/> set vlan ingress-qos priority from-pcp +admin@example:/config/interface/e1.10/> up +admin@example:/config/> edit interface e1.20 +admin@example:/config/interface/e1.20/> set vlan egress-qos pcp from-priority +admin@example:/config/interface/e1.20/> leave +admin@example:/> +``` + +## A complex example + +The picture below shows a packet flow being subject both to software +forwarding and hardware offloading. + +![Hardware and Software QoS Handling](img/qos-complex.svg) + [1]: container.md#application-container-nftables [2]: https://en.wikipedia.org/wiki/IEEE_802.1Q