]> rtime.felk.cvut.cz Git - lisovros/iproute2_canprio.git/commitdiff
cls_flow: add perturbation support
authorPatrick McHardy <kaber@trash.net>
Mon, 14 Jul 2008 12:42:48 +0000 (14:42 +0200)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Thu, 18 Sep 2008 04:53:37 +0000 (21:53 -0700)
commit 337628b9aca63fda7622701191d6304c83438909
Author: Patrick McHardy <kaber@trash.net>
Date:   Fri Jul 4 04:54:56 2008 +0200

    cls_flow: add perturbation support

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Stephen Hemminger <stephen.hemminger@vyatta.com>
tc/f_flow.c

index 1537ade826e11ad3e940082462d843e69f96202a..84b45c9a774101acec6107a5d97f82f087602f07 100644 (file)
@@ -24,7 +24,7 @@ static void explain(void)
 "Usage: ... flow ...\n"
 "\n"
 " [mapping mode]: map key KEY [ OPS ] ...\n"
-" [hashing mode]: hash keys KEY-LIST ...\n"
+" [hashing mode]: hash keys KEY-LIST ... [ perturb SECS ]\n"
 "\n"
 "                 [ divisor NUM ] [ baseclass ID ] [ match EMATCH_TREE ]\n"
 "                 [ police POLICE_SPEC ] [ action ACTION_SPEC ]\n"
@@ -211,6 +211,13 @@ static int flow_parse_opt(struct filter_util *fu, char *handle,
                                return -1;
                        }
                        addattr32(n, 4096, TCA_FLOW_BASECLASS, tmp);
+               } else if (matches(*argv, "perturb") == 0) {
+                       NEXT_ARG();
+                       if (get_u32(&tmp, *argv, 0)) {
+                               fprintf(stderr, "Illegal \"perturb\"\n");
+                               return -1;
+                       }
+                       addattr32(n, 4096, TCA_FLOW_PERTURB, tmp);
                } else if (matches(*argv, "police") == 0) {
                        NEXT_ARG();
                        if (parse_police(&argc, &argv, TCA_FLOW_POLICE, n)) {
@@ -331,6 +338,10 @@ static int flow_print_opt(struct filter_util *fu, FILE *f, struct rtattr *opt,
                fprintf(f, "baseclass %s ",
                        sprint_tc_classid(*(__u32 *)RTA_DATA(tb[TCA_FLOW_BASECLASS]), b1));
 
+       if (tb[TCA_FLOW_PERTURB])
+               fprintf(f, "perturb %usec ",
+                       *(__u32 *)RTA_DATA(tb[TCA_FLOW_PERTURB]));
+
        if (tb[TCA_FLOW_EMATCHES])
                print_ematch(f, tb[TCA_FLOW_EMATCHES]);
        if (tb[TCA_FLOW_POLICE])