* [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid
@ 2023-08-25 15:51 Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 1/4] selftests/tc-testing: cls_fw: add tests for classid Pedro Tammela
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Pedro Tammela @ 2023-08-25 15:51 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/
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
selftest/tc-testing: cls_route: add tests for classid
selftest/tc-testing: cls_u32: add tests for classid
net/sched: cls_route: make netlink errors meaningful
net/sched/cls_route.c | 27 +++++-----
.../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, 114 insertions(+), 12 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net-next v2 1/4] selftests/tc-testing: cls_fw: add tests for classid
2023-08-25 15:51 [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
@ 2023-08-25 15:51 ` Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 2/4] selftest/tc-testing: cls_route: " Pedro Tammela
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Pedro Tammela @ 2023-08-25 15:51 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.
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] 7+ messages in thread
* [PATCH net-next v2 2/4] selftest/tc-testing: cls_route: add tests for classid
2023-08-25 15:51 [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 1/4] selftests/tc-testing: cls_fw: add tests for classid Pedro Tammela
@ 2023-08-25 15:51 ` Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 3/4] selftest/tc-testing: cls_u32: " Pedro Tammela
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Pedro Tammela @ 2023-08-25 15:51 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.
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] 7+ messages in thread
* [PATCH net-next v2 3/4] selftest/tc-testing: cls_u32: add tests for classid
2023-08-25 15:51 [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 1/4] selftests/tc-testing: cls_fw: add tests for classid Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 2/4] selftest/tc-testing: cls_route: " Pedro Tammela
@ 2023-08-25 15:51 ` Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 4/4] net/sched: cls_route: make netlink errors meaningful Pedro Tammela
2023-08-25 21:03 ` [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid Victor Nogueira
4 siblings, 0 replies; 7+ messages in thread
From: Pedro Tammela @ 2023-08-25 15:51 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.
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] 7+ messages in thread
* [PATCH net-next v2 4/4] net/sched: cls_route: make netlink errors meaningful
2023-08-25 15:51 [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
` (2 preceding siblings ...)
2023-08-25 15:51 ` [PATCH net-next v2 3/4] selftest/tc-testing: cls_u32: " Pedro Tammela
@ 2023-08-25 15:51 ` Pedro Tammela
2023-08-28 19:52 ` Jakub Kicinski
2023-08-25 21:03 ` [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid Victor Nogueira
4 siblings, 1 reply; 7+ messages in thread
From: Pedro Tammela @ 2023-08-25 15:51 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.
Signed-off-by: Pedro Tammela <pctammela@mojatatu.com>
---
net/sched/cls_route.c | 27 +++++++++++++++------------
1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
index 1e20bbd687f1..b34cf02c6c51 100644
--- a/net/sched/cls_route.c
+++ b/net/sched/cls_route.c
@@ -400,30 +400,32 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,
if (new && handle & 0x8000)
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(extack,
+ "'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,
+ "Unexpected handle %x (expected %x)",
+ handle, nhandle);
return -EINVAL;
+ }
}
if (!nhandle) {
@@ -478,7 +480,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 +490,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] 7+ messages in thread
* Re: [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid
2023-08-25 15:51 [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
` (3 preceding siblings ...)
2023-08-25 15:51 ` [PATCH net-next v2 4/4] net/sched: cls_route: make netlink errors meaningful Pedro Tammela
@ 2023-08-25 21:03 ` Victor Nogueira
4 siblings, 0 replies; 7+ messages in thread
From: Victor Nogueira @ 2023-08-25 21:03 UTC (permalink / raw)
To: Pedro Tammela, netdev
Cc: jhs, xiyou.wangcong, jiri, davem, edumazet, kuba, pabeni, shuah, victor
On 25/08/2023 12:51, Pedro Tammela 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/
>
> 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
> selftest/tc-testing: cls_route: add tests for classid
> selftest/tc-testing: cls_u32: add tests for classid
> net/sched: cls_route: make netlink errors meaningful
>
> net/sched/cls_route.c | 27 +++++-----
> .../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, 114 insertions(+), 12 deletions(-)
>
For the series,
Reviewed-by: Victor Nogueira <victor@mojatatu.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next v2 4/4] net/sched: cls_route: make netlink errors meaningful
2023-08-25 15:51 ` [PATCH net-next v2 4/4] net/sched: cls_route: make netlink errors meaningful Pedro Tammela
@ 2023-08-28 19:52 ` Jakub Kicinski
0 siblings, 0 replies; 7+ messages in thread
From: Jakub Kicinski @ 2023-08-28 19:52 UTC (permalink / raw)
To: Pedro Tammela
Cc: netdev, jhs, xiyou.wangcong, jiri, davem, edumazet, pabeni,
shuah, victor
On Fri, 25 Aug 2023 12:51:48 -0300 Pedro Tammela wrote:
> Use netlink extended ack and parsing policies to return more meaningful
> errors instead of the relying solely on errnos.
Hm, I don't see the changes to the policy, or anything meaningful
in the existing one.
> diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
> index 1e20bbd687f1..b34cf02c6c51 100644
> --- a/net/sched/cls_route.c
> +++ b/net/sched/cls_route.c
> @@ -400,30 +400,32 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,
> if (new && handle & 0x8000)
> 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(extack,
> + "'from' and 'fromif' are mutually exclusive");
Let's point at one of them? NL_SET_ERR_MSG_ATTR() ?
> + 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,
> + "Unexpected handle %x (expected %x)",
> + handle, nhandle);
How about: Handle mismatch constructed: %x (expected: %x)?
> return -EINVAL;
> + }
> }
>
> if (!nhandle) {
> @@ -478,7 +480,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 +490,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;
--
pw-bot: cr
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-08-28 19:53 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-25 15:51 [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 1/4] selftests/tc-testing: cls_fw: add tests for classid Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 2/4] selftest/tc-testing: cls_route: " Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 3/4] selftest/tc-testing: cls_u32: " Pedro Tammela
2023-08-25 15:51 ` [PATCH net-next v2 4/4] net/sched: cls_route: make netlink errors meaningful Pedro Tammela
2023-08-28 19:52 ` Jakub Kicinski
2023-08-25 21:03 ` [PATCH net-next v2 0/4] selftests/tc-testing: add tests covering classid Victor Nogueira
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 NNTP newsgroup(s).