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 <jhs@mojatatu.com>
This commit is contained in:
Jamal Hadi Salim 2014-05-24 09:13:35 -04:00 committed by Stephen Hemminger
parent 9282d08d93
commit 288abf513f

View 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");