Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
5b3520b
confd: update ieee802-dot1q-types to revision 2023-10-26
troglobit Sep 7, 2026
9f013b1
board: enable ETS qdisc and sync x86_64 QoS kernel options
troglobit Sep 7, 2026
0b63ce6
confd: initial QoS support, classification, traffic classes
troglobit Sep 7, 2026
42c3a8e
yangerd: report the QoS capabilities of a port
troglobit Oct 29, 2026
6346b64
test: infamy: print the RESTCONF error body on HTTP failures
troglobit Sep 8, 2026
df3578a
test: add QoS test suite
troglobit Sep 7, 2026
04824a1
doc: describe per-interface QoS configuration
troglobit Sep 7, 2026
83b9afe
doc: center tables and fit header cells to their content
troglobit Sep 7, 2026
e528ae5
doc: tighten code block line height
troglobit Sep 7, 2026
ed30984
linux: offload QoS classification and remarking on Marvell LinkStreet
troglobit Oct 5, 2026
0a582d9
test: add QoS bridge classification test
troglobit Sep 9, 2026
721cc4b
confd: prefer the ets scheduler for transmission selection
troglobit Sep 16, 2026
ce556de
confd: add a per-port egress rate limit
troglobit Sep 16, 2026
f0cce54
test: add QoS queue assignment test
troglobit Sep 17, 2026
73b8cb3
test: add QoS strict priority test
troglobit Sep 17, 2026
67cab48
test: add QoS weighted sharing test
troglobit Sep 17, 2026
7495408
test: add QoS mixed selection test
troglobit Sep 17, 2026
adab9ac
linux: offload QoS transmission selection and rate limit on Marvell L…
troglobit Sep 17, 2026
4790caa
confd: schedule every port with ets
troglobit Sep 17, 2026
1c14203
doc: number figure and table captions
troglobit Oct 19, 2026
4d6b62a
doc: page layout for printing a guide page from the browser
troglobit Oct 19, 2026
261fe65
test: drop the mqprio branches from the QoS tests
troglobit Sep 17, 2026
8960799
test: add QoS rate limit test
troglobit Sep 18, 2026
658293a
test: infamy: say why a test skipped
troglobit Sep 22, 2026
97ac3a2
test: infamy: ask the device what it can do
troglobit Sep 22, 2026
56f8bb4
yangerd: check a batch helper answers before using it
troglobit Oct 29, 2026
603bae7
yangerd: notice a batch helper exit without a query
troglobit Oct 29, 2026
c8ea472
confd: set up a port's qdiscs with one tc batch
troglobit Oct 29, 2026
88a5115
yangerd: read the DCB tables over rtnetlink
troglobit Oct 30, 2026
11750b1
yangerd: a port leaving a bridge is still there
troglobit Oct 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
{
"eth0": {
"phy-detached-when-down": true
},
"eth1": {
"broken-mqprio": true
}
}
9 changes: 9 additions & 0 deletions board/aarch64/linux_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -245,13 +245,22 @@ CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_MQPRIO=y
CONFIG_NET_SCH_ETS=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_CLS_BASIC=y
CONFIG_NET_CLS_BPF=y
CONFIG_NET_CLS_FLOWER=y
CONFIG_NET_CLS_MATCHALL=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_CMP=y
CONFIG_NET_EMATCH_META=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_GACT=y
CONFIG_NET_ACT_MIRRED=y
CONFIG_NET_ACT_SKBEDIT=y
CONFIG_NET_ACT_PEDIT=y
CONFIG_NET_ACT_CSUM=y
CONFIG_DCB=y
CONFIG_NETLINK_DIAG=y
CONFIG_MPLS=y
Expand Down
2 changes: 1 addition & 1 deletion board/aarch64/microchip-ev23x71a/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Supported:
Not yet done:

- TSN queueing. PSFP and time aware shaping need `NET_SCH_TAPRIO`,
`NET_ACT_GATE`, `NET_SCH_ETS`, and `NET_SCH_CBS`, all currently off
`NET_ACT_GATE`, and `NET_SCH_CBS`, all currently off
- HSR/PRP offload, see above
- MAC addresses from OTP. With no environment in flash the board falls
back to `lan969x_otp_get_mac()`, which derives 30 addresses for this
Expand Down
9 changes: 9 additions & 0 deletions board/arm/linux_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -229,13 +229,22 @@ CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_MQPRIO=y
CONFIG_NET_SCH_ETS=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_CLS_BASIC=y
CONFIG_NET_CLS_BPF=y
CONFIG_NET_CLS_FLOWER=y
CONFIG_NET_CLS_MATCHALL=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_CMP=y
CONFIG_NET_EMATCH_META=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_GACT=y
CONFIG_NET_ACT_MIRRED=y
CONFIG_NET_ACT_SKBEDIT=y
CONFIG_NET_ACT_PEDIT=y
CONFIG_NET_ACT_CSUM=y
CONFIG_DCB=y
CONFIG_NETLINK_DIAG=y
CONFIG_MPLS=y
Expand Down
60 changes: 0 additions & 60 deletions board/common/rootfs/usr/libexec/infix/init.d/25-mqprio

This file was deleted.

9 changes: 9 additions & 0 deletions board/riscv64/linux_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -233,13 +233,22 @@ CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_MQPRIO=y
CONFIG_NET_SCH_ETS=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_CLS_BASIC=y
CONFIG_NET_CLS_BPF=y
CONFIG_NET_CLS_FLOWER=y
CONFIG_NET_CLS_MATCHALL=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_CMP=y
CONFIG_NET_EMATCH_META=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_GACT=y
CONFIG_NET_ACT_MIRRED=y
CONFIG_NET_ACT_SKBEDIT=y
CONFIG_NET_ACT_PEDIT=y
CONFIG_NET_ACT_CSUM=y
CONFIG_DCB=y
CONFIG_NETLINK_DIAG=y
CONFIG_MPLS=y
Expand Down
14 changes: 14 additions & 0 deletions board/x86_64/linux_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -223,9 +223,23 @@ CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_MQPRIO=y
CONFIG_NET_SCH_ETS=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_CLS_BASIC=y
CONFIG_NET_CLS_BPF=y
CONFIG_NET_CLS_FLOWER=y
CONFIG_NET_CLS_MATCHALL=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_CMP=y
CONFIG_NET_EMATCH_META=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_GACT=y
CONFIG_NET_ACT_SKBEDIT=y
CONFIG_NET_ACT_PEDIT=y
CONFIG_NET_ACT_CSUM=y
CONFIG_DCB=y
CONFIG_NETLINK_DIAG=y
CONFIG_MPLS=y
CONFIG_NET_MPLS_GSO=y
Expand Down
17 changes: 17 additions & 0 deletions doc/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,22 @@ All notable changes to the project are documented in this file.
- LAN969x boards ship `symreg`, which reads and writes switch registers by
name and dumps the MAC, VLAN and VCAP tables, for debugging the switch
core, see `board/aarch64/microchip-lan969x/README.md`
- Add per-interface Quality of Service configuration: which header field
a port trusts (PCP, DSCP, or both in order), the default priority, PCP
and DSCP to priority maps with standard presets, an egress traffic
class table with strict-priority or weighted transmission selection per
class, and PCP and DSCP remarking on transmit. The defaults are on out
of the box on every port: trust PCP, one traffic class per
transmit queue mapped per IEEE 802.1Q-2022 Table 8-5, replacing the
fixed boot-time queue setup, see [QoS][]
- Add a per-port egress rate limit to the new [QoS][] subsystem
- Transmission selection uses the `ets` scheduler on every
port, so drivers that offload it take the class algorithms and weights
into the switch fabric, not only the priority to class map
- Marvell LinkStreet 88E6390 and 88E6393X switch ports offload QoS
classification, trust order, remarking, transmission selection and the
egress rate limit to the switch, so they apply to hardware forwarded
traffic as well

### Fixes

Expand Down Expand Up @@ -353,6 +369,7 @@ All notable changes to the project are documented in this file.
[fdb]: https://www.kernelkit.org/infix/latest/bridging/#unicast-forwarding-database
[boot]: https://www.kernelkit.org/infix/latest/boot/
[mcast]: https://www.kernelkit.org/infix/latest/bridging/#multicast-filtering-and-snooping
[QoS]: https://www.kernelkit.org/infix/latest/qos/

[v26.09.0][] - 2026-09-30
-------------------------
Expand Down
79 changes: 74 additions & 5 deletions doc/extra.css
Original file line number Diff line number Diff line change
Expand Up @@ -102,14 +102,26 @@ body {
--md-primary-bg-color: #5c5f5c;
}

/* Center Markdown Tables (requires md_in_html extension) */
.center-table {
/* Caption numbers in bold: "Figure 1:", "Table 1:" */
.md-typeset figcaption .caption-prefix {
font-weight: 700;
}

/* Center all Markdown tables, like figures */
.md-typeset .md-typeset__scrollwrap {
text-align: center;
}

.md-typeset .center-table :is(td,th):not([align]) {
/* Reset alignment for table cells */
text-align: initial;
/* Material forces a 5rem minimum width on header cells, which makes
* narrow numeric tables sprawl past the page. Fit headers to content. */
.md-typeset table:not([class]) th {
min-width: 0;
}

/* Material's 1.4 line height leaves gaps between box-drawing characters
* in CLI output and diagrams. Applies to code blocks as a whole. */
.md-typeset pre {
line-height: 1.15;
}

/* CLI terminal output styling */
Expand All @@ -122,3 +134,60 @@ body {
color: #1a1a1a;
font-weight: bold;
}

/* ---- Print ----------------------------------------------------------------
* Material hides the chrome when printing; the rest is page layout. */
@page {
size: A4;
margin: 18mm 16mm;
}

@media print {
/* Keep tables, figures, code and admonitions in one piece. Caption
* blocks wrap the table in a figure, so the caption stays with it. */
.md-typeset figure,
.md-typeset .md-typeset__table,
.md-typeset pre,
.md-typeset .admonition {
break-inside: avoid;
}

/* Headings travel with what follows them, see print-keep.js */
.md-typeset h1,
.md-typeset h2,
.md-typeset h3,
.md-typeset h4 {
break-after: avoid;
}

.print-keep {
break-inside: avoid;
}

.md-typeset pre.cli .header {
print-color-adjust: exact;
-webkit-print-color-adjust: exact;
}

/* Material's palette only switches colours on screen, so a reader on
* the dark palette would print light grey text on white paper. */
[data-md-color-scheme="slate"] {
--md-default-bg-color: #fff;
--md-default-fg-color: #34343c;
--md-default-fg-color--light: #54545c;
--md-default-fg-color--lighter: rgb(0 0 0 / 32%);
--md-default-fg-color--lightest: rgb(0 0 0 / 7%);
--md-typeset-color: #34343c;
--md-typeset-a-color: #0056b2;
--md-code-bg-color: #f6f8fa;
--md-code-fg-color: #3a3a3a;
color-scheme: light;
}

[data-md-color-scheme="slate"] .md-typeset h1,
[data-md-color-scheme="slate"] .md-typeset h2,
[data-md-color-scheme="slate"] .md-typeset h3,
[data-md-color-scheme="slate"] .md-typeset h4 {
color: #2a2a2a;
}
}
4 changes: 4 additions & 0 deletions doc/img/qos-pipeline.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
52 changes: 52 additions & 0 deletions doc/print-keep.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/* Keep a heading on the same page as what follows it when printing.
*
* Browsers cannot keep siblings together, and Firefox ignores
* break-after: avoid, so before printing each heading is wrapped with
* its first block, plus a short introduction and the figure, table or
* code block it introduces, in a div that must not break. The wrap is
* undone after printing. */
(function () {
const BLOCK = "figure, table, .md-typeset__scrollwrap, .highlight, pre, .admonition, details";
let groups = [];

/* A short paragraph, or one ending in a colon, introduces what follows */
function intro(el) {
if (!el || el.tagName !== "P")
return false;
const text = el.textContent.trim();
return text.endsWith(":") || text.length < 240;
}

function keep() {
unkeep();
const heads = document.querySelectorAll(".md-typeset :is(h1, h2, h3, h4, h5, h6)");
for (const h of Array.from(heads).reverse()) {
const g = document.createElement("div");
let next = h.nextElementSibling;

g.className = "print-keep";
h.replaceWith(g);
g.appendChild(h);
groups.push(g);
if (!next)
continue;

g.appendChild(next);
while (intro(next)) {
next = g.nextElementSibling;
if (!next || !(intro(next) || next.matches(BLOCK)))
break;
g.appendChild(next);
}
}
}

function unkeep() {
for (const g of groups)
g.replaceWith(...g.childNodes);
groups = [];
}

addEventListener("beforeprint", keep);
addEventListener("afterprint", unkeep);
})();
Loading
Loading