netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).