]> rtime.felk.cvut.cz Git - lisovros/iproute2_canprio.git/commitdiff
tc: don't set protococol field on filter delete
authorPatrick McHardy <kaber@trash.net>
Mon, 23 Jun 2008 13:59:18 +0000 (15:59 +0200)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Mon, 23 Jun 2008 16:09:45 +0000 (09:09 -0700)
> # tc filter show dev eth1 | grep 4:29:d1
> filter parent 1: protocol ip pref 5 u32 fh 4:29:d1 order 209 key ht 4
> bkt 29 flowid 1:b7aa
>
> # tc filter del dev eth1 parent 1: pref 5 handle 4:29:d1 u32
> RTNETLINK answers: Invalid argument
> We have an error talking to the kernel
>
> after rollback to package"sys-apps/iproute2-2.6.24.20080108" all
> deleted normal...

The current iproute version uses "protocol all" by default
if its not specified. This is actually only useful for creating
new filters, on deletion an unset protocol is treated as wildcard.

tc/tc_filter.c

index db44dec422d2d02dff580c4e1e368d5ffbb2fe03..177446ef0d160cd007fba83465cd9037f9563fe1 100644 (file)
@@ -54,7 +54,7 @@ int tc_filter_modify(int cmd, unsigned flags, int argc, char **argv)
        } req;
        struct filter_util *q = NULL;
        __u32 prio = 0;
-       __u32 protocol = ETH_P_ALL;
+       __u32 protocol = 0;
        int protocol_set = 0;
        char *fhandle = NULL;
        char  d[16];
@@ -72,6 +72,9 @@ int tc_filter_modify(int cmd, unsigned flags, int argc, char **argv)
        req.n.nlmsg_type = cmd;
        req.t.tcm_family = AF_UNSPEC;
 
+       if (cmd == RTM_NEWTFILTER && flags & NLM_F_CREATE)
+               protocol = ETH_P_ALL;
+
        while (argc > 0) {
                if (strcmp(*argv, "dev") == 0) {
                        NEXT_ARG();