]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
TBF overhead parameter parsing.
authorJesper Dangaard Brouer <jdb@comx.dk>
Sun, 23 Mar 2008 22:47:49 +0000 (23:47 +0100)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Tue, 1 Apr 2008 18:27:06 +0000 (11:27 -0700)
For TBF, 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_tbf.c

index c7b4f0f469cef951647ee8ac5d3decef0ebecdd1..3bdce5a4b7aef5292065481eacb8634e7d805a25 100644 (file)
@@ -26,7 +26,8 @@
 static void explain(void)
 {
        fprintf(stderr, "Usage: ... tbf limit BYTES burst BYTES[/BYTES] rate KBPS [ mtu BYTES[/BYTES] ]\n");
-       fprintf(stderr, "               [ peakrate KBPS ] [ latency TIME ]\n");
+       fprintf(stderr, "               [ peakrate KBPS ] [ latency TIME ] ");
+       fprintf(stderr, "[ overhead BYTES ]\n");
 }
 
 static void explain1(char *arg)
@@ -45,6 +46,7 @@ static int tbf_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl
        __u32 ptab[256];
        unsigned buffer=0, mtu=0, mpu=0, latency=0;
        int Rcell_log=-1, Pcell_log = -1;
+       unsigned short overhead=0;
        struct rtattr *tail;
 
        memset(&opt, 0, sizeof(opt));
@@ -130,6 +132,15 @@ static int tbf_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl
                                return -1;
                        }
                        ok++;
+               } else if (matches(*argv, "overhead") == 0) {
+                       NEXT_ARG();
+                       if (overhead) {
+                               fprintf(stderr, "Double \"overhead\" spec\n");
+                               return -1;
+                       }
+                       if (get_u16(&overhead, *argv, 10)) {
+                               explain1("overhead"); return -1;
+                       }
                } else if (strcmp(*argv, "help") == 0) {
                        explain();
                        return -1;
@@ -170,7 +181,8 @@ static int tbf_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl
                opt.limit = lim;
        }
 
-       opt.rate.mpu = mpu;
+       opt.rate.mpu      = mpu;
+       opt.rate.overhead = overhead;
        if (tc_calc_rtable(&opt.rate, rtab, Rcell_log, mtu) < 0) {
                fprintf(stderr, "TBF: failed to calculate rate table.\n");
                return -1;
@@ -178,7 +190,8 @@ static int tbf_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl
        opt.buffer = tc_calc_xmittime(opt.rate.rate, buffer);
 
        if (opt.peakrate.rate) {
-               opt.peakrate.mpu = mpu;
+               opt.peakrate.mpu      = mpu;
+               opt.peakrate.overhead = overhead;
                if (tc_calc_rtable(&opt.peakrate, ptab, Pcell_log, mtu) < 0) {
                        fprintf(stderr, "TBF: failed to calculate peak rate table.\n");
                        return -1;
@@ -252,6 +265,10 @@ static int tbf_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
        }
        fprintf(f, "lat %s ", sprint_time(latency, b1));
 
+       if (qopt->rate.overhead) {
+               fprintf(f, "overhead %d", qopt->rate.overhead);
+       }
+
        return 0;
 }