]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
tc: fq_codel: add drop_batch parameter
authorEric Dumazet <edumazet@google.com>
Mon, 27 Apr 2020 17:51:55 +0000 (10:51 -0700)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 27 Apr 2020 21:56:42 +0000 (14:56 -0700)
Commit 9d18562a2278 ("fq_codel: add batch ability to fq_codel_drop()")
added the new TCA_FQ_CODEL_DROP_BATCH_SIZE parameter, set by default to 64.

Add to tc command the ability to get/set the drop_batch

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
tc/q_fq_codel.c

index 1c6cf1e0de9ef6aa2400f36008cbc830c37352c0..1a51302e0e2b332a4496965dfeaf520bc843f8ad 100644 (file)
@@ -54,12 +54,14 @@ static void explain(void)
                                        "[ memory_limit BYTES ]\n"
                                        "[ target TIME ] [ interval TIME ]\n"
                                        "[ quantum BYTES ] [ [no]ecn ]\n"
-                                       "[ ce_threshold TIME ]\n");
+                                       "[ ce_threshold TIME ]\n"
+                                       "[ drop_batch SIZE ]\n");
 }
 
 static int fq_codel_parse_opt(struct qdisc_util *qu, int argc, char **argv,
                              struct nlmsghdr *n, const char *dev)
 {
+       unsigned int drop_batch = 0;
        unsigned int limit = 0;
        unsigned int flows = 0;
        unsigned int target = 0;
@@ -89,6 +91,12 @@ static int fq_codel_parse_opt(struct qdisc_util *qu, int argc, char **argv,
                                fprintf(stderr, "Illegal \"quantum\"\n");
                                return -1;
                        }
+               } else if (strcmp(*argv, "drop_batch") == 0) {
+                       NEXT_ARG();
+                       if (get_unsigned(&drop_batch, *argv, 0)) {
+                               fprintf(stderr, "Illegal \"drop_batch\"\n");
+                               return -1;
+                       }
                } else if (strcmp(*argv, "target") == 0) {
                        NEXT_ARG();
                        if (get_time(&target, *argv)) {
@@ -147,6 +155,8 @@ static int fq_codel_parse_opt(struct qdisc_util *qu, int argc, char **argv,
        if (memory != ~0U)
                addattr_l(n, 1024, TCA_FQ_CODEL_MEMORY_LIMIT,
                          &memory, sizeof(memory));
+       if (drop_batch)
+               addattr_l(n, 1024, TCA_FQ_CODEL_DROP_BATCH_SIZE, &drop_batch, sizeof(drop_batch));
 
        addattr_nest_end(n, tail);
        return 0;
@@ -163,6 +173,7 @@ static int fq_codel_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt
        unsigned int quantum;
        unsigned int ce_threshold;
        unsigned int memory_limit;
+       unsigned int drop_batch;
 
        SPRINT_BUF(b1);
 
@@ -220,6 +231,12 @@ static int fq_codel_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt
                if (ecn)
                        print_bool(PRINT_ANY, "ecn", "ecn ", true);
        }
+       if (tb[TCA_FQ_CODEL_DROP_BATCH_SIZE] &&
+           RTA_PAYLOAD(tb[TCA_FQ_CODEL_DROP_BATCH_SIZE]) >= sizeof(__u32)) {
+               drop_batch = rta_getattr_u32(tb[TCA_FQ_CODEL_DROP_BATCH_SIZE]);
+               if (drop_batch)
+                       print_uint(PRINT_ANY, "drop_batch", "drop_batch %u ", drop_batch);
+       }
 
        return 0;
 }