Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
075d4f5
confd: update ieee802-dot1q-types to revision 2023-10-26
troglobit Sep 7, 2026
7ef39b9
board: enable ETS qdisc and sync x86_64 QoS kernel options
troglobit Sep 7, 2026
d2056d1
confd: initial QoS support, classification, traffic classes
troglobit Sep 7, 2026
c4d5d5b
test: infamy: print the RESTCONF error body on HTTP failures
troglobit Sep 8, 2026
af83430
test: add QoS test suite
troglobit Sep 7, 2026
3d34e40
doc: describe per-interface QoS configuration
troglobit Sep 7, 2026
be4ba99
doc: center tables and fit header cells to their content
troglobit Sep 7, 2026
a48c4be
doc: tighten code block line height
troglobit Sep 7, 2026
e61324a
linux: offload QoS classification and remarking on Marvell LinkStreet
troglobit Oct 5, 2026
754d76c
test: add QoS bridge classification test
troglobit Sep 9, 2026
4e650d0
confd: prefer the ets scheduler for transmission selection
troglobit Sep 16, 2026
0d80255
confd: add a per-port egress rate limit
troglobit Sep 16, 2026
378cba2
test: add QoS queue assignment test
troglobit Sep 17, 2026
79449fc
test: add QoS strict priority test
troglobit Sep 17, 2026
b5e6957
test: add QoS weighted sharing test
troglobit Sep 17, 2026
b35549e
test: add QoS mixed selection test
troglobit Sep 17, 2026
abc8e79
linux: offload QoS transmission selection and rate limit on Marvell L…
troglobit Sep 17, 2026
eea0bc0
confd: schedule every port with ets
troglobit Sep 17, 2026
3d38b3c
doc: number figure and table captions
troglobit Oct 19, 2026
9c18550
doc: page layout for printing a guide page from the browser
troglobit Oct 19, 2026
eaa9243
test: drop the mqprio branches from the QoS tests
troglobit Sep 17, 2026
ee12064
test: add QoS rate limit test
troglobit Sep 18, 2026
1298b3f
test: infamy: say why a test skipped
troglobit Sep 22, 2026
50a7ad0
test: infamy: ask the device what it can do
troglobit Sep 22, 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. With no environment in flash the board falls back to
`lan969x_otp_get_mac()`, which derives 30 addresses for this board
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 @@ -219,9 +219,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 @@ -95,6 +95,22 @@ All notable changes to the project are documented in this file.
board documentation
- Banana Pi BPI-R4: ports get permanent addresses derived from the chassis
MAC of a `/mnt/aux/vpd.bin`, see [VPD documentation](vpd.md#vpd-file-on-the-aux-partition)
- 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 @@ -303,6 +319,7 @@ All notable changes to the project are documented in this file.
[limits]: https://www.kernelkit.org/infix/latest/limitations/
[migrate]: https://www.kernelkit.org/infix/latest/upgrade/#configuration-migration
[relsup]: https://github.com/kernelkit/infix/blob/main/doc/releases.md
[QoS]: https://www.kernelkit.org/infix/latest/qos/
[snmp]: https://www.kernelkit.org/infix/latest/snmp/
[tftp]: https://www.kernelkit.org/infix/latest/tftp/
[tactical]: https://github.com/kernelkit/infix/blob/main/board/aarch64/novarq-tactical-1000/README.md
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