* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.