From: Jamal Hadi Salim Date: Sat, 24 May 2014 13:13:35 +0000 (-0400) Subject: actions: correctly report the number of actions flushed X-Git-Tag: v3.15.0~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=288abf513f5d11b98f09c6977d2019097afb7e9f;p=thirdparty%2Fiproute2.git actions: correctly report the number of actions flushed 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 --- diff --git a/tc/m_action.c b/tc/m_action.c index 5cd5e67b0..7dbcf5bcc 100644 --- a/tc/m_action.c +++ b/tc/m_action.c @@ -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");