]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
TC action parsing bug fix
authorPatrick McHardy <kaber@trash.net>
Wed, 18 Jul 2007 09:49:55 +0000 (11:49 +0200)
committerStephen Hemminger <shemminger@linux-foundation.org>
Wed, 22 Aug 2007 17:00:41 +0000 (10:00 -0700)
>
> Is it a bug that:
>
>   # tc filter add dev eth0 parent 1: protocol ip prio 0 handle 0xfffffff
>     fw police rate 1 burst 1 mpu 0 mtu 1 action drop
>                                          ^^^^^^^^^^^
> creates a filter that looks like:
>
>   # tc filter ls dev eth0
>   filter parent 1: protocol ip pref 49152 fw
>   filter parent 1: protocol ip pref 49152 fw handle 0xfffffff police 0x1
>   rate 0bit burst 0b mtu 1b action reclassify
>                             ^^^^^^^^^^^^^^^^^
>   ref -543190236 bind 4
>
> (which reclassifies and thus lets 0xfffffff-marked packets through).
>
> I'm pretty sure this used to work under 2.4.x (though I no longer have a
> 2.4 box to test with), but it hasn't worked on any of the 2.6.x kernels
> I've tried (with both iproute2-ss060323 and 070710).

Good catch. It seems this is merely a parsing error, iproute doesn't
have an "action" parameter and aborts parsing, so it uses the default
value of "RECLASSIFY". It never had this parameter, so this patch
removes it from the help text and makes it return an error.

tc/m_police.c

index 36a7719d9b3d2739772d9d2c8ad50b87ef6ca899..62e37f9dc27c7d89f41a3380d042ca6cd80e79be 100644 (file)
@@ -37,7 +37,7 @@ static void usage(void)
        fprintf(stderr, "Usage: ... police rate BPS burst BYTES[/BYTES] [ mtu BYTES[/BYTES] ]\n");
        fprintf(stderr, "                [ peakrate BPS ] [ avrate BPS ]\n");
        fprintf(stderr, "                [ ACTIONTERM ]\n");
-       fprintf(stderr, "Old Syntax ACTIONTERM := action <EXCEEDACT>[/NOTEXCEEDACT] \n");
+       fprintf(stderr, "Old Syntax ACTIONTERM := <EXCEEDACT>[/NOTEXCEEDACT] \n");
        fprintf(stderr, "New Syntax ACTIONTERM := conform-exceed <EXCEEDACT>[/NOTEXCEEDACT] \n");
        fprintf(stderr, "Where: *EXCEEDACT := pipe | ok | reclassify | drop | continue \n");
        fprintf(stderr, "Where:  pipe is only valid for new syntax \n");
@@ -236,7 +236,8 @@ int act_parse_police(struct action_util *a,int *argc_p, char ***argv_p, int tca_
                } else if (strcmp(*argv, "help") == 0) {
                        usage();
                } else {
-                       break;
+                       fprintf(stderr, "What is \"%s\"?\n", *argv);
+                       return -1;
                }
                ok++;
                argc--; argv++;