* [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid
@ 2023-09-11 21:50 Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 1/4] selftests/tc-testing: cls_fw: add tests for classid Pedro Tammela
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Pedro Tammela @ 2023-09-11 21:50 UTC (permalink / raw)
To: netdev
Cc: jhs, xiyou.wangcong, jiri, davem, edumazet, kuba, pabeni, shuah,
victor, Pedro Tammela
Patches 1-3 add missing tests covering classid behaviour on tdc for cls_fw,
cls_route and cls_fw. This behaviour was recently fixed by valis[0].
Patch 4 comes from the development done in the previous patches as it turns out
cls_route never returns meaningful errors.
[0] https://lore.kernel.org/all/20230729123202.72406-1-jhs@mojatatu.com/
v2->v3: https://lore.kernel.org/all/20230825155148.659895-1-pctammela@mojatatu.com/
- Added changes that were left in the working tree (Jakub)
- Fixed two typos in commit message titles
- Added Victor tags
v1->v2: https://lore.kernel.org/all/20230818163544.351104-1-pctammela@mojatatu.com/
- Drop u32 updates
Pedro Tammela (4):
selftests/tc-testing: cls_fw: add tests for classid
selftests/tc-testing: cls_route: add tests for classid
selftests/tc-testing: cls_u32: add tests for classid
net/sched: cls_route: make netlink errors meaningful
net/sched/cls_route.c | 37 ++++++++------
.../tc-testing/tc-tests/filters/fw.json | 49 +++++++++++++++++++
.../tc-testing/tc-tests/filters/route.json | 25 ++++++++++
.../tc-testing/tc-tests/filters/u32.json | 25 ++++++++++
4 files changed, 120 insertions(+), 16 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH net-next v3 1/4] selftests/tc-testing: cls_fw: add tests for classid
2023-09-11 21:50 [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
@ 2023-09-11 21:50 ` Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 2/4] selftests/tc-testing: cls_route: " Pedro Tammela
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Pedro Tammela @ 2023-09-11 21:50 UTC (permalink / raw)
To: netdev
Cc: jhs, xiyou.wangcong, jiri, davem, edumazet, kuba, pabeni, shuah,
victor, Pedro Tammela
As discussed in '76e42ae83199', cls_fw was handling the use of classid
incorrectly. Add a few tests to check if it's conforming to the correct
behaviour.
Reviewed-by: Victor Nogueira <victor@mojatatu.com>
Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
---
.../tc-testing/tc-tests/filters/fw.json | 49 +++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/tools/testing/selftests/tc-testing/tc-tests/filters/fw.json b/tools/testing/selftests/tc-testing/tc-tests/filters/fw.json
index 742ebc34e15c..a9b071e1354b 100644
--- a/tools/testing/selftests/tc-testing/tc-tests/filters/fw.json
+++ b/tools/testing/selftests/tc-testing/tc-tests/filters/fw.json
@@ -1343,5 +1343,54 @@
"teardown": [
"$TC qdisc del dev $DEV1 ingress"
]
+ },
+ {
+ "id": "e470",
+ "name": "Try to delete class referenced by fw after a replace",
+ "category": [
+ "filter",
+ "fw"
+ ],
+ "plugins": {
+ "requires": "nsPlugin"
+ },
+ "setup": [
+ "$TC qdisc add dev $DEV1 parent root handle 10: drr",
+ "$TC class add dev $DEV1 parent root classid 1 drr",
+ "$TC filter add dev $DEV1 parent 10: handle 1 prio 1 fw classid 10:1 action ok",
+ "$TC filter replace dev $DEV1 parent 10: handle 1 prio 1 fw classid 10:1 action drop"
+ ],
+ "cmdUnderTest": "$TC class delete dev $DEV1 parent 10: classid 10:1",
+ "expExitCode": "2",
+ "verifyCmd": "$TC class show dev $DEV1",
+ "matchPattern": "class drr 10:1",
+ "matchCount": "1",
+ "teardown": [
+ "$TC qdisc del dev $DEV1 parent root drr"
+ ]
+ },
+ {
+ "id": "ec1a",
+ "name": "Replace fw classid with nil",
+ "category": [
+ "filter",
+ "fw"
+ ],
+ "plugins": {
+ "requires": "nsPlugin"
+ },
+ "setup": [
+ "$TC qdisc add dev $DEV1 parent root handle 10: drr",
+ "$TC class add dev $DEV1 parent root classid 1 drr",
+ "$TC filter add dev $DEV1 parent 10: handle 1 prio 1 fw classid 10:1 action ok"
+ ],
+ "cmdUnderTest": "$TC filter replace dev $DEV1 parent 10: handle 1 prio 1 fw action drop",
+ "expExitCode": "0",
+ "verifyCmd": "$TC filter show dev $DEV1 parent 10:",
+ "matchPattern": "fw chain 0 handle 0x1",
+ "matchCount": "1",
+ "teardown": [
+ "$TC qdisc del dev $DEV1 parent root drr"
+ ]
}
]
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net-next v3 2/4] selftests/tc-testing: cls_route: add tests for classid
2023-09-11 21:50 [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 1/4] selftests/tc-testing: cls_fw: add tests for classid Pedro Tammela
@ 2023-09-11 21:50 ` Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 3/4] selftests/tc-testing: cls_u32: " Pedro Tammela
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Pedro Tammela @ 2023-09-11 21:50 UTC (permalink / raw)
To: netdev
Cc: jhs, xiyou.wangcong, jiri, davem, edumazet, kuba, pabeni, shuah,
victor, Pedro Tammela
As discussed in 'b80b829e9e2c', cls_route was handling the use of classid
incorrectly. Add a test to check if it's conforming to the correct
behaviour.
Reviewed-by: Victor Nogueira <victor@mojatatu.com>
Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
---
.../tc-testing/tc-tests/filters/route.json | 25 +++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/tools/testing/selftests/tc-testing/tc-tests/filters/route.json b/tools/testing/selftests/tc-testing/tc-tests/filters/route.json
index 1f6f19f02997..8d8de8f65aef 100644
--- a/tools/testing/selftests/tc-testing/tc-tests/filters/route.json
+++ b/tools/testing/selftests/tc-testing/tc-tests/filters/route.json
@@ -177,5 +177,30 @@
"teardown": [
"$TC qdisc del dev $DEV1 ingress"
]
+ },
+ {
+ "id": "b042",
+ "name": "Try to delete class referenced by route after a replace",
+ "category": [
+ "filter",
+ "route"
+ ],
+ "plugins": {
+ "requires": "nsPlugin"
+ },
+ "setup": [
+ "$TC qdisc add dev $DEV1 parent root handle 10: drr",
+ "$TC class add dev $DEV1 parent root classid 1 drr",
+ "$TC filter add dev $DEV1 parent 10: prio 1 route from 10 classid 10:1 action ok",
+ "$TC filter replace dev $DEV1 parent 10: prio 1 route from 5 classid 10:1 action drop"
+ ],
+ "cmdUnderTest": "$TC class delete dev $DEV1 parent 10: classid 10:1",
+ "expExitCode": "2",
+ "verifyCmd": "$TC class show dev $DEV1",
+ "matchPattern": "class drr 10:1",
+ "matchCount": "1",
+ "teardown": [
+ "$TC qdisc del dev $DEV1 parent root drr"
+ ]
}
]
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net-next v3 3/4] selftests/tc-testing: cls_u32: add tests for classid
2023-09-11 21:50 [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 1/4] selftests/tc-testing: cls_fw: add tests for classid Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 2/4] selftests/tc-testing: cls_route: " Pedro Tammela
@ 2023-09-11 21:50 ` Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 4/4] net/sched: cls_route: make netlink errors meaningful Pedro Tammela
2023-09-13 11:40 ` [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: Pedro Tammela @ 2023-09-11 21:50 UTC (permalink / raw)
To: netdev
Cc: jhs, xiyou.wangcong, jiri, davem, edumazet, kuba, pabeni, shuah,
victor, Pedro Tammela
As discussed in '3044b16e7c6f', cls_u32 was handling the use of classid
incorrectly. Add a test to check if it's conforming to the correct
behaviour.
Reviewed-by: Victor Nogueira <victor@mojatatu.com>
Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
---
.../tc-testing/tc-tests/filters/u32.json | 25 +++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/tools/testing/selftests/tc-testing/tc-tests/filters/u32.json b/tools/testing/selftests/tc-testing/tc-tests/filters/u32.json
index bd64a4bf11ab..ddc7c355be0a 100644
--- a/tools/testing/selftests/tc-testing/tc-tests/filters/u32.json
+++ b/tools/testing/selftests/tc-testing/tc-tests/filters/u32.json
@@ -247,5 +247,30 @@
"teardown": [
"$TC qdisc del dev $DEV1 ingress"
]
+ },
+ {
+ "id": "0c37",
+ "name": "Try to delete class referenced by u32 after a replace",
+ "category": [
+ "filter",
+ "u32"
+ ],
+ "plugins": {
+ "requires": "nsPlugin"
+ },
+ "setup": [
+ "$TC qdisc add dev $DEV1 parent root handle 10: drr",
+ "$TC class add dev $DEV1 parent root classid 1 drr",
+ "$TC filter add dev $DEV1 parent 10: prio 1 u32 match icmp type 1 0xff classid 10:1 action ok",
+ "$TC filter replace dev $DEV1 parent 10: prio 1 u32 match icmp type 1 0xff classid 10:1 action drop"
+ ],
+ "cmdUnderTest": "$TC class delete dev $DEV1 parent 10: classid 10:1",
+ "expExitCode": "2",
+ "verifyCmd": "$TC class show dev $DEV1",
+ "matchPattern": "class drr 10:1",
+ "matchCount": "1",
+ "teardown": [
+ "$TC qdisc del dev $DEV1 parent root drr"
+ ]
}
]
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net-next v3 4/4] net/sched: cls_route: make netlink errors meaningful
2023-09-11 21:50 [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
` (2 preceding siblings ...)
2023-09-11 21:50 ` [PATCH net-next v3 3/4] selftests/tc-testing: cls_u32: " Pedro Tammela
@ 2023-09-11 21:50 ` Pedro Tammela
2023-09-13 11:40 ` [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: Pedro Tammela @ 2023-09-11 21:50 UTC (permalink / raw)
To: netdev
Cc: jhs, xiyou.wangcong, jiri, davem, edumazet, kuba, pabeni, shuah,
victor, Pedro Tammela
Use netlink extended ack and parsing policies to return more meaningful
errors instead of the relying solely on errnos.
Reviewed-by: Victor Nogueira <victor@mojatatu.com>
Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
---
net/sched/cls_route.c | 37 +++++++++++++++++++++----------------
1 file changed, 21 insertions(+), 16 deletions(-)
diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
index 1e20bbd687f1..484d8185b6b8 100644
--- a/net/sched/cls_route.c
+++ b/net/sched/cls_route.c
@@ -375,9 +375,9 @@ static int route4_delete(struct tcf_proto *tp, void *arg, bool *last,
static const struct nla_policy route4_policy[TCA_ROUTE4_MAX + 1] = {
[TCA_ROUTE4_CLASSID] = { .type = NLA_U32 },
- [TCA_ROUTE4_TO] = { .type = NLA_U32 },
- [TCA_ROUTE4_FROM] = { .type = NLA_U32 },
- [TCA_ROUTE4_IIF] = { .type = NLA_U32 },
+ [TCA_ROUTE4_TO] = NLA_POLICY_MAX(NLA_U32, 0xFF),
+ [TCA_ROUTE4_FROM] = NLA_POLICY_MAX(NLA_U32, 0xFF),
+ [TCA_ROUTE4_IIF] = NLA_POLICY_MAX(NLA_U32, 0x7FFF),
};
static int route4_set_parms(struct net *net, struct tcf_proto *tp,
@@ -397,33 +397,37 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,
return err;
if (tb[TCA_ROUTE4_TO]) {
- if (new && handle & 0x8000)
+ if (new && handle & 0x8000) {
+ NL_SET_ERR_MSG(extack, "Invalid handle");
return -EINVAL;
+ }
to = nla_get_u32(tb[TCA_ROUTE4_TO]);
- if (to > 0xFF)
- return -EINVAL;
nhandle = to;
}
+ if (tb[TCA_ROUTE4_FROM] && tb[TCA_ROUTE4_IIF]) {
+ NL_SET_ERR_MSG_ATTR(extack, tb[TCA_ROUTE4_FROM],
+ "'from' and 'fromif' are mutually exclusive");
+ return -EINVAL;
+ }
+
if (tb[TCA_ROUTE4_FROM]) {
- if (tb[TCA_ROUTE4_IIF])
- return -EINVAL;
id = nla_get_u32(tb[TCA_ROUTE4_FROM]);
- if (id > 0xFF)
- return -EINVAL;
nhandle |= id << 16;
} else if (tb[TCA_ROUTE4_IIF]) {
id = nla_get_u32(tb[TCA_ROUTE4_IIF]);
- if (id > 0x7FFF)
- return -EINVAL;
nhandle |= (id | 0x8000) << 16;
} else
nhandle |= 0xFFFF << 16;
if (handle && new) {
nhandle |= handle & 0x7F00;
- if (nhandle != handle)
+ if (nhandle != handle) {
+ NL_SET_ERR_MSG_FMT(extack,
+ "Handle mismatch constructed: %x (expected: %x)",
+ handle, nhandle);
return -EINVAL;
+ }
}
if (!nhandle) {
@@ -478,7 +482,6 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
struct route4_filter __rcu **fp;
struct route4_filter *fold, *f1, *pfp, *f = NULL;
struct route4_bucket *b;
- struct nlattr *opt = tca[TCA_OPTIONS];
struct nlattr *tb[TCA_ROUTE4_MAX + 1];
unsigned int h, th;
int err;
@@ -489,10 +492,12 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
return -EINVAL;
}
- if (opt == NULL)
+ if (NL_REQ_ATTR_CHECK(extack, NULL, tca, TCA_OPTIONS)) {
+ NL_SET_ERR_MSG_MOD(extack, "Missing options");
return -EINVAL;
+ }
- err = nla_parse_nested_deprecated(tb, TCA_ROUTE4_MAX, opt,
+ err = nla_parse_nested_deprecated(tb, TCA_ROUTE4_MAX, tca[TCA_OPTIONS],
route4_policy, NULL);
if (err < 0)
return err;
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid
2023-09-11 21:50 [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
` (3 preceding siblings ...)
2023-09-11 21:50 ` [PATCH net-next v3 4/4] net/sched: cls_route: make netlink errors meaningful Pedro Tammela
@ 2023-09-13 11:40 ` patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-09-13 11:40 UTC (permalink / raw)
To: Pedro Tammela
Cc: netdev, jhs, xiyou.wangcong, jiri, davem, edumazet, kuba, pabeni,
shuah, victor
Hello:
This series was applied to netdev/net-next.git (main)
by David S. Miller <davem@davemloft.net>:
On Mon, 11 Sep 2023 18:50:12 -0300 you wrote:
> Patches 1-3 add missing tests covering classid behaviour on tdc for cls_fw,
> cls_route and cls_fw. This behaviour was recently fixed by valis[0].
>
> Patch 4 comes from the development done in the previous patches as it turns out
> cls_route never returns meaningful errors.
>
> [0] https://lore.kernel.org/all/20230729123202.72406-1-jhs@mojatatu.com/
>
> [...]
Here is the summary with links:
- [net-next,v3,1/4] selftests/tc-testing: cls_fw: add tests for classid
https://git.kernel.org/netdev/net-next/c/70ad43333cbe
- [net-next,v3,2/4] selftests/tc-testing: cls_route: add tests for classid
https://git.kernel.org/netdev/net-next/c/7c339083616c
- [net-next,v3,3/4] selftests/tc-testing: cls_u32: add tests for classid
https://git.kernel.org/netdev/net-next/c/e2f2fb3c352d
- [net-next,v3,4/4] net/sched: cls_route: make netlink errors meaningful
https://git.kernel.org/netdev/net-next/c/ef765c258759
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-09-13 11:40 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-11 21:50 [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 1/4] selftests/tc-testing: cls_fw: add tests for classid Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 2/4] selftests/tc-testing: cls_route: " Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 3/4] selftests/tc-testing: cls_u32: " Pedro Tammela
2023-09-11 21:50 ` [PATCH net-next v3 4/4] net/sched: cls_route: make netlink errors meaningful Pedro Tammela
2023-09-13 11:40 ` [PATCH net-next v3 0/4] selftests/tc-testing: add tests covering classid patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).