netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH iproute2 -next] ingress, clsact: don't add TCA_OPTIONS to nl msg
@ 2016-05-15 16:36 Daniel Borkmann
  2016-05-16 18:22 ` Stephen Hemminger
  2016-05-17 11:54 ` Jamal Hadi Salim
  0 siblings, 2 replies; 4+ messages in thread
From: Daniel Borkmann @ 2016-05-15 16:36 UTC (permalink / raw)
  To: stephen; +Cc: jhs, tgraf, netdev, Daniel Borkmann

In ingress and clsact qdisc TCA_OPTIONS are ignored, since it's
parameterless. In tc, we add an empty addattr_l(... TCA_OPTIONS,
NULL, 0) to the netlink message nevertheless. This has the
side effect that when someone tries a 'tc qdisc replace' and
already an existing such qdisc is present, tc fails with
EINVAL here.

Reason is that in the kernel, this invokes qdisc_change() when
such requested qdisc is already present. When TCA_OPTIONS are
passed to modify parameters, it looks whether qdisc implements
.change() callback, and if not present (like in both cases here)
it returns with error. Rather than adding an empty stub to the
kernel that ignores TCA_OPTIONS again, just don't add TCA_OPTIONS
to the netlink message in the first place.

Before:

  # tc qdisc replace dev foo clsact    # first try
  # tc qdisc replace dev foo clsact    # second one
  RTNETLINK answers: Invalid argument

After:

  # tc qdisc replace dev foo clsact
  # tc qdisc replace dev foo clsact
  # tc qdisc replace dev foo clsact

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
---
 tc/q_clsact.c  | 1 -
 tc/q_ingress.c | 1 -
 2 files changed, 2 deletions(-)

diff --git a/tc/q_clsact.c b/tc/q_clsact.c
index 0c05dbd..e2a1a71 100644
--- a/tc/q_clsact.c
+++ b/tc/q_clsact.c
@@ -18,7 +18,6 @@ static int clsact_parse_opt(struct qdisc_util *qu, int argc, char **argv,
 		return -1;
 	}
 
-	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	return 0;
 }
 
diff --git a/tc/q_ingress.c b/tc/q_ingress.c
index c3c9b40..31699a8 100644
--- a/tc/q_ingress.c
+++ b/tc/q_ingress.c
@@ -34,7 +34,6 @@ static int ingress_parse_opt(struct qdisc_util *qu, int argc, char **argv,
 		}
 	}
 
-	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	return 0;
 }
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH iproute2 -next] ingress, clsact: don't add TCA_OPTIONS to nl msg
  2016-05-15 16:36 [PATCH iproute2 -next] ingress, clsact: don't add TCA_OPTIONS to nl msg Daniel Borkmann
@ 2016-05-16 18:22 ` Stephen Hemminger
  2016-05-17 11:54 ` Jamal Hadi Salim
  1 sibling, 0 replies; 4+ messages in thread
From: Stephen Hemminger @ 2016-05-16 18:22 UTC (permalink / raw)
  To: Daniel Borkmann; +Cc: jhs, tgraf, netdev

On Sun, 15 May 2016 18:36:03 +0200
Daniel Borkmann <daniel@iogearbox.net> wrote:

> In ingress and clsact qdisc TCA_OPTIONS are ignored, since it's
> parameterless. In tc, we add an empty addattr_l(... TCA_OPTIONS,
> NULL, 0) to the netlink message nevertheless. This has the
> side effect that when someone tries a 'tc qdisc replace' and
> already an existing such qdisc is present, tc fails with
> EINVAL here.
> 
> Reason is that in the kernel, this invokes qdisc_change() when
> such requested qdisc is already present. When TCA_OPTIONS are
> passed to modify parameters, it looks whether qdisc implements
> .change() callback, and if not present (like in both cases here)
> it returns with error. Rather than adding an empty stub to the
> kernel that ignores TCA_OPTIONS again, just don't add TCA_OPTIONS
> to the netlink message in the first place.
> 
> Before:
> 
>   # tc qdisc replace dev foo clsact    # first try
>   # tc qdisc replace dev foo clsact    # second one
>   RTNETLINK answers: Invalid argument
> 
> After:
> 
>   # tc qdisc replace dev foo clsact
>   # tc qdisc replace dev foo clsact
>   # tc qdisc replace dev foo clsact
> 
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
> ---
>  tc/q_clsact.c  | 1 -
>  tc/q_ingress.c | 1 -
>  2 files changed, 2 deletions(-)

Applied to net-next

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH iproute2 -next] ingress, clsact: don't add TCA_OPTIONS to nl msg
  2016-05-15 16:36 [PATCH iproute2 -next] ingress, clsact: don't add TCA_OPTIONS to nl msg Daniel Borkmann
  2016-05-16 18:22 ` Stephen Hemminger
@ 2016-05-17 11:54 ` Jamal Hadi Salim
  2016-05-17 13:10   ` Daniel Borkmann
  1 sibling, 1 reply; 4+ messages in thread
From: Jamal Hadi Salim @ 2016-05-17 11:54 UTC (permalink / raw)
  To: Daniel Borkmann, stephen; +Cc: tgraf, netdev

On 16-05-15 12:36 PM, Daniel Borkmann wrote:
> In ingress and clsact qdisc TCA_OPTIONS are ignored, since it's
> parameterless. In tc, we add an empty addattr_l(... TCA_OPTIONS,
> NULL, 0) to the netlink message nevertheless. This has the
> side effect that when someone tries a 'tc qdisc replace' and
> already an existing such qdisc is present, tc fails with
> EINVAL here.
>
> Reason is that in the kernel, this invokes qdisc_change() when
> such requested qdisc is already present. When TCA_OPTIONS are
> passed to modify parameters, it looks whether qdisc implements
> .change() callback, and if not present (like in both cases here)
> it returns with error. Rather than adding an empty stub to the
> kernel that ignores TCA_OPTIONS again, just don't add TCA_OPTIONS
> to the netlink message in the first place.
>
> Before:
>
>    # tc qdisc replace dev foo clsact    # first try
>    # tc qdisc replace dev foo clsact    # second one
>    RTNETLINK answers: Invalid argument
>
> After:
>
>    # tc qdisc replace dev foo clsact
>    # tc qdisc replace dev foo clsact
>    # tc qdisc replace dev foo clsact
>
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>

Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>

I see need for correctness but was curious of use case
that made you even look at this ;->

cheers,
jamal

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH iproute2 -next] ingress, clsact: don't add TCA_OPTIONS to nl msg
  2016-05-17 11:54 ` Jamal Hadi Salim
@ 2016-05-17 13:10   ` Daniel Borkmann
  0 siblings, 0 replies; 4+ messages in thread
From: Daniel Borkmann @ 2016-05-17 13:10 UTC (permalink / raw)
  To: Jamal Hadi Salim, stephen; +Cc: tgraf, netdev

On 05/17/2016 01:54 PM, Jamal Hadi Salim wrote:
> On 16-05-15 12:36 PM, Daniel Borkmann wrote:
>> In ingress and clsact qdisc TCA_OPTIONS are ignored, since it's
>> parameterless. In tc, we add an empty addattr_l(... TCA_OPTIONS,
>> NULL, 0) to the netlink message nevertheless. This has the
>> side effect that when someone tries a 'tc qdisc replace' and
>> already an existing such qdisc is present, tc fails with
>> EINVAL here.
>>
>> Reason is that in the kernel, this invokes qdisc_change() when
>> such requested qdisc is already present. When TCA_OPTIONS are
>> passed to modify parameters, it looks whether qdisc implements
>> .change() callback, and if not present (like in both cases here)
>> it returns with error. Rather than adding an empty stub to the
>> kernel that ignores TCA_OPTIONS again, just don't add TCA_OPTIONS
>> to the netlink message in the first place.
>>
>> Before:
>>
>>    # tc qdisc replace dev foo clsact    # first try
>>    # tc qdisc replace dev foo clsact    # second one
>>    RTNETLINK answers: Invalid argument
>>
>> After:
>>
>>    # tc qdisc replace dev foo clsact
>>    # tc qdisc replace dev foo clsact
>>    # tc qdisc replace dev foo clsact
>>
>> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
>
> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
>
> I see need for correctness but was curious of use case
> that made you even look at this ;->

Sure, wanted to use this in a script that is called when some event
arrives and the error 'Invalid argument' looked quite weird to me
(... would have understood -ENOTSUPP ;)), which then led me looking
into whether clsact code is correct or not, but it eventually turned
out that the api code throws that error when TCA_OPTIONS are present,
but no .change() callback, so motivation was to make sure clsact is
fine and to improve usability there for the replace command.

Thanks,
Daniel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-05-17 13:10 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-15 16:36 [PATCH iproute2 -next] ingress, clsact: don't add TCA_OPTIONS to nl msg Daniel Borkmann
2016-05-16 18:22 ` Stephen Hemminger
2016-05-17 11:54 ` Jamal Hadi Salim
2016-05-17 13:10   ` Daniel Borkmann

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).