]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
actions: correctly report the number of actions flushed
authorJamal Hadi Salim <jhs@mojatatu.com>
Sat, 24 May 2014 13:13:35 +0000 (09:13 -0400)
committerStephen Hemminger <stephen@networkplumber.org>
Wed, 28 May 2014 23:54:31 +0000 (16:54 -0700)
This also fixes a long standing bug of not sanely reporting the
action chain ordering

Sample scenario test

on window 1(event window):
run "tc monitor" and observe events

on window 2:
sudo tc actions add action drop index 10
sudo tc actions add action ok index 12
sudo tc actions ls action gact
sudo tc actions flush action gact

See the event window reporting two entries
(doing another listing should show empty generic actions)

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

index 5cd5e67b08d47a72302ba7dd42ce0d313d61ec7a..7dbcf5bcc81f88cd7189b56e53c6a62561a72a0b 100644 (file)
@@ -249,37 +249,38 @@ static int
 tc_print_one_action(FILE * f, struct rtattr *arg)
 {
 
-       struct rtattr *tb[TCA_ACT_MAX + 1];
+       struct rtattr *tb[TCA_MAX + 1];
        int err = 0;
        struct action_util *a = NULL;
 
        if (arg == NULL)
                return -1;
 
-       parse_rtattr_nested(tb, TCA_ACT_MAX, arg);
-       if (tb[TCA_ACT_KIND] == NULL) {
+       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_ACT_KIND]));
+       a = get_action_kind(RTA_DATA(tb[TCA_KIND]));
        if (NULL == a)
                return err;
 
        if (tab_flush) {
-               fprintf(f," %s \n", a->id);
+               __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_ACT_OPTIONS]);
+       err = a->print_aopt(a,f,tb[TCA_OPTIONS]);
 
 
        if (0 > err)
                return err;
 
-       if (show_stats && tb[TCA_ACT_STATS]) {
+       if (show_stats && tb[TCA_STATS]) {
                fprintf(f, "\tAction statistics:\n");
                print_tcstats2_attr(f, tb[TCA_ACT_STATS], "\t", NULL);
                fprintf(f, "\n");