]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
tc: gred: support controlling RED flags
authorJakub Kicinski <jakub.kicinski@netronome.com>
Mon, 19 Nov 2018 23:03:34 +0000 (15:03 -0800)
committerDavid Ahern <dsahern@gmail.com>
Sat, 24 Nov 2018 15:11:36 +0000 (07:11 -0800)
Kernel GRED qdisc supports ECN marking, and the harddrop flag
but setting and dumping this flag is not possible with iproute2.
Add the support.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
bash-completion/tc
tc/q_gred.c

index 29bca5d9354d3b7db65cba08ef84d3f8500cfa44..007e1c2e30bf48e4e48e98470ebfb36d190e0866 100644 (file)
@@ -302,7 +302,7 @@ _tc_qdisc_options()
             ;;
         gred)
             _tc_once_attr 'setup vqs default grio vq prio limit min max avpkt \
-                burst probability bandwidth'
+                burst probability bandwidth ecn harddrop'
             return 0
             ;;
         hhf)
index fda41a5704a9a10b2b36d1d540422b8e98314b4d..dfa3252bc2a871632fe62e325c2b6b3b0e05f327 100644 (file)
@@ -37,7 +37,7 @@
 static void explain(void)
 {
        fprintf(stderr, "Usage: tc qdisc { add | replace | change } ... gred setup vqs NUMBER\n");
-       fprintf(stderr, "           default DEFAULT_VQ [ grio ] [ limit BYTES ]\n");
+       fprintf(stderr, "           default DEFAULT_VQ [ grio ] [ limit BYTES ] [ecn] [harddrop]\n");
        fprintf(stderr, "       tc qdisc change ... gred vq VQ [ prio VALUE ] limit BYTES\n");
        fprintf(stderr, "           min BYTES max BYTES avpkt BYTES [ burst PACKETS ]\n");
        fprintf(stderr, "           [ probability PROBABILITY ] [ bandwidth KBPS ]\n");
@@ -87,6 +87,10 @@ static int init_gred(struct qdisc_util *qu, int argc, char **argv,
                                fprintf(stderr, "Illegal \"limit\"\n");
                                return -1;
                        }
+               } else if (strcmp(*argv, "ecn") == 0) {
+                       opt.flags |= TC_RED_ECN;
+               } else if (strcmp(*argv, "harddrop") == 0) {
+                       opt.flags |= TC_RED_HARDDROP;
                } else if (strcmp(*argv, "help") == 0) {
                        explain();
                        return -1;
@@ -452,6 +456,8 @@ static int gred_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
                             sprint_size(*limit, b1));
        }
 
+       tc_red_print_flags(sopt->flags);
+
        open_json_array(PRINT_JSON, "vqs");
        for (i = 0; i < MAX_DPs; i++, qopt++) {
                if (qopt->DP >= MAX_DPs)