]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
actions: BugFix action stats to display with -s
authorJamal Hadi Salim <jhs@mojatatu.com>
Sun, 21 Sep 2014 16:29:14 +0000 (12:29 -0400)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 29 Sep 2014 15:47:19 +0000 (08:47 -0700)
Was broken by commit 288abf513f5d11b98f09c6977d2019097afb7e9f
Lets not be too clever and have a separate call to print flushed
actions info.

Broken looks like:
root@moja-1:~# tc actions add  action drop index 4
root@moja-1:~# tc -s actions ls action gact

    action order 0: gact action drop
     random type none pass val 0
     index 4 ref 1 bind 0 installed 9 sec used 4 sec

The fixed version looks like:
    action order 0: gact action drop
     random type none pass val 0
     index 4 ref 1 bind 0 installed 9 sec used 4 sec
         Sent 108948 bytes 1297 pkts (dropped 1297, overlimits 0)

Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
tc/m_action.c

index 7dbcf5bcc81f88cd7189b56e53c6a62561a72a0b..486123ea5c4a3009999984eab9ec0499c4991deb 100644 (file)
@@ -249,38 +249,31 @@ static int
 tc_print_one_action(FILE * f, struct rtattr *arg)
 {
 
-       struct rtattr *tb[TCA_MAX + 1];
+       struct rtattr *tb[TCA_ACT_MAX + 1];
        int err = 0;
        struct action_util *a = NULL;
 
        if (arg == NULL)
                return -1;
 
-       parse_rtattr_nested(tb, TCA_MAX, arg);
-       if (tb[TCA_KIND] == NULL) {
+       parse_rtattr_nested(tb, TCA_ACT_MAX, arg);
+
+       if (tb[TCA_ACT_KIND] == NULL) {
                fprintf(stderr, "NULL Action!\n");
                return -1;
        }
 
 
-       a = get_action_kind(RTA_DATA(tb[TCA_KIND]));
+       a = get_action_kind(RTA_DATA(tb[TCA_ACT_KIND]));
        if (NULL == a)
                return err;
 
-       if (tab_flush) {
-               __u32 *delete_count = RTA_DATA(tb[TCA_FCNT]);
-               fprintf(f," %s (%d entries)\n", a->id, *delete_count);
-               tab_flush = 0;
-               return 0;
-       }
-
-       err = a->print_aopt(a,f,tb[TCA_OPTIONS]);
-
+       err = a->print_aopt(a, f, tb[TCA_ACT_OPTIONS]);
 
        if (0 > err)
                return err;
 
-       if (show_stats && tb[TCA_STATS]) {
+       if (show_stats && tb[TCA_ACT_STATS]) {
                fprintf(f, "\tAction statistics:\n");
                print_tcstats2_attr(f, tb[TCA_ACT_STATS], "\t", NULL);
                fprintf(f, "\n");
@@ -289,8 +282,34 @@ tc_print_one_action(FILE * f, struct rtattr *arg)
        return 0;
 }
 
+static int
+tc_print_action_flush(FILE *f, const struct rtattr *arg)
+{
+
+       struct rtattr *tb[TCA_MAX + 1];
+       int err = 0;
+       struct action_util *a = NULL;
+       __u32 *delete_count = 0;
+
+       parse_rtattr_nested(tb, TCA_MAX, arg);
+
+       if (tb[TCA_KIND] == NULL) {
+               fprintf(stderr, "NULL Action!\n");
+               return -1;
+       }
+
+       a = get_action_kind(RTA_DATA(tb[TCA_KIND]));
+       if (NULL == a)
+               return err;
+
+       delete_count = RTA_DATA(tb[TCA_FCNT]);
+       fprintf(f," %s (%d entries)\n", a->id, *delete_count);
+       tab_flush = 0;
+       return 0;
+}
+
 int
-tc_print_action(FILE * f, const struct rtattr *arg)
+tc_print_action(FILE *f, const struct rtattr *arg)
 {
 
        int i;
@@ -301,10 +320,8 @@ tc_print_action(FILE * f, const struct rtattr *arg)
 
        parse_rtattr_nested(tb, TCA_ACT_MAX_PRIO, arg);
 
-       if (tab_flush && NULL != tb[0]  && NULL == tb[1]) {
-               int ret = tc_print_one_action(f, tb[0]);
-               return ret;
-       }
+       if (tab_flush && NULL != tb[0]  && NULL == tb[1])
+               return tc_print_action_flush(f, tb[0]);
 
        for (i = 0; i < TCA_ACT_MAX_PRIO; i++) {
                if (tb[i]) {