aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2020-04-27 10:51:55 -0700
committerStephen Hemminger <stephen@networkplumber.org>2020-04-27 14:56:42 -0700
commit7868f802e2d93a9f6e2d64a6fc608445a33c8a8d (patch)
treeb99adedc15c7847954bbe173551a76fb9ead8782
parentd27fc6390ce32ecdba6324e22b1c341791c5c63f (diff)
downloadiproute2-7868f802e2d93a9f6e2d64a6fc608445a33c8a8d.tar.gz
tc: fq_codel: add drop_batch parameter
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>
-rw-r--r--tc/q_fq_codel.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/tc/q_fq_codel.c b/tc/q_fq_codel.c
index 1c6cf1e0d..1a51302e0 100644
--- a/tc/q_fq_codel.c
+++ b/tc/q_fq_codel.c
@@ -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;
}