mirror of
https://github.com/torvalds/linux.git
synced 2026-09-11 20:13:02 +02:00
selftests: tc-testing: add tx_queue_len cap regression tests
Add nine test cases for the S16_MAX tx_queue_len cap to the
pfifo_fast suite. Netlink cases exercise the ifla_policy bound
(2/3); the two new sysfs cases exercise the netif_change_tx_queue_len()
choke point that 1/3 owns (SIOCSIFTXQLEN shares it; the ioctl is not
portably reachable from tdc):
- dbe3: set txqueuelen 32767 (S16_MAX) - accepted, pins the exact
boundary value.
- b50e: set txqueuelen 32768 - rejected with -ERANGE.
- 40f8: write 32768 to /sys/class/net/*/tx_queue_len - rejected
(covers patch 1/3 directly; netlink cannot reach this path).
- 4b6e: write 32767 via sysfs - accepted, boundary positive control
for the patch-1 path.
- b90d: create a dummy with txqueuelen 32767 - accepted.
- 57ab: create a dummy with txqueuelen 32768 - rejected at netlink
parse time.
- e777: create a dummy with txqueuelen 500000 - rejected (the v1
bypass path flagged by review).
- 31ac: create a veth with an oversized txqueuelen on the peer nest -
rejected (the peer nest is parsed against ifla_policy too).
- b567: create a veth with txqueuelen on both ends within the cap -
accepted (positive control for the peer nest).
The three negative-creation verifies assert device absence
("ip -o link show" must not contain the device), not merely absence
of a qlen pattern - the device does not exist when creation fails, so
the exit code carries the signal and the verify adds content.
The v1 04b5 "resize rollback" case is dropped: with the cap checked
first, netif_change_tx_queue_len() returns -ERANGE before the write,
the notifier or any qdisc resize, so the case exercised no resize and
no rollback. It was also nondeterministic: pre-patch, the resize
issues three ~11 MB kvmallocs for qlen 500000 which normally succeed,
so the case passed on an unfixed kernel only under memory pressure -
its outcome depended on the test host's free memory.
Test commands run inside the netns, but nsPlugin creates the veth
peer in the root namespace, so the teardown deletes the in-ns end
only; deleting the peer via the pair is implicit.
Note: iproute2 treats "txqueuelen" appearing after "type X" as a
link-type attribute and silently drops it, so the creation cases
place it before "type" to actually reach the kernel.
Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
Link: https://patch.msgid.link/QDISC-2899.v2.20260901233641@mojatatu.com.3
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
1aa9e143bf
commit
0a7252d7f8
|
|
@ -105,5 +105,209 @@
|
|||
"teardown": [
|
||||
"$TC qdisc del dev $DUMMY handle 1: root"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "dbe3",
|
||||
"name": "Set tx_queue_len to S16_MAX boundary (32767 accepted)",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"pfifo_fast"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [],
|
||||
"cmdUnderTest": "$IP link set dev $DUMMY txqueuelen 32767",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$IP link show dev $DUMMY",
|
||||
"matchPattern": "qlen 32767$",
|
||||
"matchCount": "1",
|
||||
"teardown": []
|
||||
},
|
||||
{
|
||||
"id": "b50e",
|
||||
"name": "Reject tx_queue_len above S16_MAX at set time (32768)",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"pfifo_fast"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [],
|
||||
"cmdUnderTest": "$IP link set dev $DUMMY txqueuelen 32768",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$IP link show dev $DUMMY",
|
||||
"matchPattern": "qlen 1000$",
|
||||
"matchCount": "1",
|
||||
"teardown": []
|
||||
},
|
||||
{
|
||||
"id": "40f8",
|
||||
"name": "Reject tx_queue_len above S16_MAX via sysfs (32768)",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"pfifo_fast"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [],
|
||||
"cmdUnderTest": "sh -c 'echo 32768 > /sys/class/net/$DUMMY/tx_queue_len'",
|
||||
"expExitCode": "1",
|
||||
"verifyCmd": "$IP link show dev $DUMMY",
|
||||
"matchPattern": "qlen 1000$",
|
||||
"matchCount": "1",
|
||||
"teardown": []
|
||||
},
|
||||
{
|
||||
"id": "4b6e",
|
||||
"name": "Set tx_queue_len to S16_MAX via sysfs (32767 accepted)",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"pfifo_fast"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [],
|
||||
"cmdUnderTest": "sh -c 'echo 32767 > /sys/class/net/$DUMMY/tx_queue_len'",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$IP link show dev $DUMMY",
|
||||
"matchPattern": "qlen 32767$",
|
||||
"matchCount": "1",
|
||||
"teardown": []
|
||||
},
|
||||
{
|
||||
"id": "b90d",
|
||||
"name": "Create device with tx_queue_len at S16_MAX boundary (32767 accepted)",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"pfifo_fast"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
[
|
||||
"$IP link del dev $DUMMY",
|
||||
0,
|
||||
1
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "$IP link add dev $DUMMY txqueuelen 32767 type dummy",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$IP link show dev $DUMMY",
|
||||
"matchPattern": "qlen 32767$",
|
||||
"matchCount": "1",
|
||||
"teardown": [
|
||||
[
|
||||
"$IP link del dev $DUMMY",
|
||||
0,
|
||||
1
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "57ab",
|
||||
"name": "Reject creating device with tx_queue_len above S16_MAX (32768)",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"pfifo_fast"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
[
|
||||
"$IP link del dev $DUMMY",
|
||||
0,
|
||||
1
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "$IP link add dev $DUMMY txqueuelen 32768 type dummy",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$IP -o link show",
|
||||
"matchPattern": "^[0-9]+: $DUMMY",
|
||||
"matchCount": "0",
|
||||
"teardown": []
|
||||
},
|
||||
{
|
||||
"id": "e777",
|
||||
"name": "Reject creating device with oversized tx_queue_len (500000)",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"pfifo_fast"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
[
|
||||
"$IP link del dev $DUMMY",
|
||||
0,
|
||||
1
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "$IP link add dev $DUMMY txqueuelen 500000 type dummy",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$IP -o link show",
|
||||
"matchPattern": "^[0-9]+: $DUMMY",
|
||||
"matchCount": "0",
|
||||
"teardown": []
|
||||
},
|
||||
{
|
||||
"id": "31ac",
|
||||
"name": "Reject veth peer nest tx_queue_len above S16_MAX at create",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"pfifo_fast"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
[
|
||||
"$IP link del dev $DEV1",
|
||||
0,
|
||||
1
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "$IP link add dev $DEV1 type veth peer name $DEV0 txqueuelen 500000",
|
||||
"expExitCode": "2",
|
||||
"verifyCmd": "$IP -o link show",
|
||||
"matchPattern": "^[0-9]+: $DEV1",
|
||||
"matchCount": "0",
|
||||
"teardown": []
|
||||
},
|
||||
{
|
||||
"id": "b567",
|
||||
"name": "Accept veth peer nest tx_queue_len within S16_MAX",
|
||||
"category": [
|
||||
"qdisc",
|
||||
"pfifo_fast"
|
||||
],
|
||||
"plugins": {
|
||||
"requires": "nsPlugin"
|
||||
},
|
||||
"setup": [
|
||||
[
|
||||
"$IP link del dev $DEV1",
|
||||
0,
|
||||
1
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "$IP link add dev $DEV1 txqueuelen 100 type veth peer name $DEV0 txqueuelen 200",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$IP link show",
|
||||
"matchPattern": "qlen (100|200)$",
|
||||
"matchCount": "2",
|
||||
"teardown": [
|
||||
[
|
||||
"$IP link del dev $DEV0",
|
||||
0,
|
||||
1
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user