]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
iproute2: improve mqprio inputs for queue offsets and counts
authorJohn Fastabend <john.r.fastabend@intel.com>
Tue, 26 Apr 2011 19:44:42 +0000 (12:44 -0700)
committerStephen Hemminger <shemminger@vyatta.com>
Tue, 26 Apr 2011 21:59:32 +0000 (14:59 -0700)
This changes mqprio input format to be more user friendly.

Old usage,

 # ./tc/tc qdisc add dev eth3 root mqprio help
Usage: ... mqprio [num_tc NUMBER] [map P0 P1...]
                  [offset txq0 txq1 ...] [count cnt0 cnt1 ...] [hw 1|0]

New usage,

 # ./tc/tc qdisc add dev eth3 root mqprio help
Usage: ... mqprio [num_tc NUMBER] [map P0 P1 ...]
                  [queues count1@offset1 count2@offset2 ...] [hw 1|0]

Suggested-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
tc/q_mqprio.c

index c589b4ca8782f9af89fa82ef0438a8173c844e2b..bf734a0f7fe7f50647e7f379a7ee658ed30b661a 100644 (file)
@@ -25,8 +25,8 @@
 static void explain(void)
 {
        fprintf(stderr, "Usage: ... mqprio [num_tc NUMBER] [map P0 P1 ...]\n");
-       fprintf(stderr, "                  [offset txq0 txq1 ...] ");
-       fprintf(stderr, "[count cnt0,cnt1 ...] [hw 1|0]\n");
+       fprintf(stderr, "                  [queues count1@offset1 count2@offset2 ...] ");
+       fprintf(stderr, "[hw 1|0]\n");
 }
 
 static int mqprio_parse_opt(struct qdisc_util *qu, int argc,
@@ -58,22 +58,29 @@ static int mqprio_parse_opt(struct qdisc_util *qu, int argc,
                        }
                        for ( ; idx < TC_QOPT_MAX_QUEUE; idx++)
                                opt.prio_tc_map[idx] = 0;
-               } else if (strcmp(*argv, "offset") == 0) {
+               } else if (strcmp(*argv, "queues") == 0) {
+                       char *tmp, *tok;
+
                        while (idx < TC_QOPT_MAX_QUEUE && NEXT_ARG_OK()) {
                                NEXT_ARG();
-                               if (get_u16(&opt.offset[idx], *argv, 10)) {
+
+                               tmp = strdup(*argv);
+                               if (!tmp)
+                                       break;
+
+                               tok = strtok(tmp, "@");
+                               if (get_u16(&opt.count[idx], tok, 10)) {
+                                       free(tmp);
                                        PREV_ARG();
                                        break;
                                }
-                               idx++;
-                       }
-               } else if (strcmp(*argv, "count") == 0) {
-                       while (idx < TC_QOPT_MAX_QUEUE && NEXT_ARG_OK()) {
-                               NEXT_ARG();
-                               if (get_u16(&opt.count[idx], *argv, 10)) {
+                               tok = strtok(NULL, "@");
+                               if (get_u16(&opt.offset[idx], tok, 10)) {
+                                       free(tmp);
                                        PREV_ARG();
                                        break;
                                }
+                               free(tmp);
                                idx++;
                        }
                } else if (strcmp(*argv, "hw") == 0) {