]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
CBQ, implement overhead parameter parsing.
authorJesper Dangaard Brouer <jdb@comx.dk>
Sun, 23 Mar 2008 22:50:49 +0000 (23:50 +0100)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Tue, 1 Apr 2008 18:27:25 +0000 (11:27 -0700)
For CBQ, implement overhead parameter parsing.

The change is ABI (Application Binary Interface) backward compatible
with older kernels, but will first have effect from kernel 2.6.24.

Signed-off-by: Jesper Dangaard Brouer <hawk@comx.dk>
Signed-off-by: Stephen Hemminger <stephen.hemminger@vyatta.com>
tc/q_cbq.c

index 8e6bd40c9d0040df8af0fef77fb76f524b7ef742..c891ac5c26d36fe10a274619c3c37cf54d8d886c 100644 (file)
@@ -53,6 +53,7 @@ static int cbq_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl
        struct tc_cbq_lssopt lss;
        __u32 rtab[256];
        unsigned mpu=0, avpkt=0, allot=0;
+       unsigned short overhead=0;
        int cell_log=-1;
        int ewma_log=-1;
        struct rtattr *tail;
@@ -113,6 +114,11 @@ static int cbq_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl
                                explain1("allot");
                                return -1;
                        }
+               } else if (matches(*argv, "overhead") == 0) {
+                       NEXT_ARG();
+                       if (get_u16(&overhead, *argv, 10)) {
+                               explain1("overhead"); return -1;
+                       }
                } else if (matches(*argv, "help") == 0) {
                        explain();
                        return -1;
@@ -138,6 +144,7 @@ static int cbq_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl
                allot = (avpkt*3)/2;
 
        r.mpu = mpu;
+       r.overhead = overhead;
        if (tc_calc_rtable(&r, rtab, cell_log, allot) < 0) {
                fprintf(stderr, "CBQ: failed to calculate rate table.\n");
                return -1;
@@ -179,6 +186,7 @@ static int cbq_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, str
        int ewma_log=-1;
        unsigned bndw = 0;
        unsigned minburst=0, maxburst=0;
+       unsigned short overhead=0;
        struct rtattr *tail;
 
        memset(&r, 0, sizeof(r));
@@ -317,6 +325,11 @@ static int cbq_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, str
                        if (err == 1)
                                fopt.defchange = ~0;
                        fopt_ok++;
+               } else if (matches(*argv, "overhead") == 0) {
+                       NEXT_ARG();
+                       if (get_u16(&overhead, *argv, 10)) {
+                               explain1("overhead"); return -1;
+                       }
                } else if (matches(*argv, "help") == 0) {
                        explain_class();
                        return -1;
@@ -336,6 +349,7 @@ static int cbq_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, str
                if (wrr.allot < (lss.avpkt*3)/2)
                        wrr.allot = (lss.avpkt*3)/2;
                r.mpu = mpu;
+               r.overhead = overhead;
                if (tc_calc_rtable(&r, rtab, cell_log, pktsize) < 0) {
                        fprintf(stderr, "CBQ: failed to calculate rate table.\n");
                        return -1;
@@ -464,6 +478,8 @@ static int cbq_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
                        fprintf(f, "cell %ub ", 1<<r->cell_log);
                        if (r->mpu)
                                fprintf(f, "mpu %ub ", r->mpu);
+                       if (r->overhead)
+                               fprintf(f, "overhead %ub ", r->overhead);
                }
        }
        if (lss && lss->flags) {