@@ -134,7 +134,7 @@ static int basic_print_opt(struct filter_util *qu, FILE *f,
}
if (tb[TCA_BASIC_ACT]) {
- tc_print_action(f, tb[TCA_BASIC_ACT], 0);
+ tc_print_action(tb[TCA_BASIC_ACT]);
}
return 0;
@@ -254,7 +254,7 @@ static int bpf_print_opt(struct filter_util *qu, FILE *f,
}
if (tb[TCA_BPF_ACT])
- tc_print_action(f, tb[TCA_BPF_ACT], 0);
+ tc_print_action(tb[TCA_BPF_ACT]);
return 0;
}
@@ -97,7 +97,7 @@ static int cgroup_print_opt(struct filter_util *qu, FILE *f,
}
if (tb[TCA_CGROUP_ACT])
- tc_print_action(f, tb[TCA_CGROUP_ACT], 0);
+ tc_print_action(tb[TCA_CGROUP_ACT]);
return 0;
}
@@ -350,7 +350,7 @@ static int flow_print_opt(struct filter_util *fu, FILE *f, struct rtattr *opt,
tc_print_police(tb[TCA_FLOW_POLICE]);
if (tb[TCA_FLOW_ACT]) {
print_nl();
- tc_print_action(f, tb[TCA_FLOW_ACT], 0);
+ tc_print_action(tb[TCA_FLOW_ACT]);
}
return 0;
}
@@ -3178,7 +3178,7 @@ static int flower_print_opt(struct filter_util *qu, FILE *f,
}
if (tb[TCA_FLOWER_ACT])
- tc_print_action(f, tb[TCA_FLOWER_ACT], 0);
+ tc_print_action(tb[TCA_FLOWER_ACT]);
return 0;
}
@@ -156,7 +156,7 @@ static int fw_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt, __u
if (tb[TCA_FW_ACT]) {
print_nl();
- tc_print_action(f, tb[TCA_FW_ACT], 0);
+ tc_print_action(tb[TCA_FW_ACT]);
}
return 0;
}
@@ -155,7 +155,7 @@ static int matchall_print_opt(struct filter_util *qu, FILE *f,
if (tb[TCA_MATCHALL_ACT])
- tc_print_action(f, tb[TCA_MATCHALL_ACT], 0);
+ tc_print_action(tb[TCA_MATCHALL_ACT]);
return 0;
}
@@ -167,7 +167,7 @@ static int route_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt,
if (tb[TCA_ROUTE4_POLICE])
tc_print_police(tb[TCA_ROUTE4_POLICE]);
if (tb[TCA_ROUTE4_ACT])
- tc_print_action(f, tb[TCA_ROUTE4_ACT], 0);
+ tc_print_action(tb[TCA_ROUTE4_ACT]);
return 0;
}
@@ -1377,7 +1377,7 @@ static int u32_print_opt(struct filter_util *qu, FILE *f, struct rtattr *opt,
}
if (tb[TCA_U32_ACT])
- tc_print_action(f, tb[TCA_U32_ACT], 0);
+ tc_print_action(tb[TCA_U32_ACT]);
return 0;
}
@@ -41,7 +41,7 @@ static void act_usage(void)
*/
fprintf(stderr,
"usage: tc actions <ACTSPECOP>*\n"
- "Where: ACTSPECOP := ACR | GD | FL\n"
+ "Where: ACTSPECOP := ACR | GD | FL\n"
" ACR := add | change | replace <ACTSPEC>*\n"
" GD := get | delete | <ACTISPEC>*\n"
" FL := ls | list | flush | <ACTNAMESPEC>\n"
@@ -360,7 +360,7 @@ bad_val:
return -1;
}
-static int tc_print_one_action(FILE *f, struct rtattr *arg, bool bind)
+static int tc_print_one_action(struct rtattr *arg, bool bind)
{
struct rtattr *tb[TCA_ACT_MAX + 1];
@@ -382,7 +382,7 @@ static int tc_print_one_action(FILE *f, struct rtattr *arg, bool bind)
if (a == NULL)
return err;
- err = a->print_aopt(a, f, tb[TCA_ACT_OPTIONS]);
+ err = a->print_aopt(a, stdout, tb[TCA_ACT_OPTIONS]);
if (err < 0)
return err;
@@ -466,7 +466,7 @@ static int tc_print_one_action(FILE *f, struct rtattr *arg, bool bind)
}
static int
-tc_print_action_flush(FILE *f, const struct rtattr *arg)
+tc_print_action_flush(const struct rtattr *arg)
{
struct rtattr *tb[TCA_MAX + 1];
@@ -486,16 +486,18 @@ tc_print_action_flush(FILE *f, const struct rtattr *arg)
return err;
delete_count = RTA_DATA(tb[TCA_FCNT]);
- fprintf(f, " %s (%d entries)\n", a->id, *delete_count);
+ print_string(PRINT_FP, NULL, " %s ", a->id);
+ open_json_object(a->id);
+ print_int(PRINT_ANY, "entries", "(%d entries)\n", *delete_count);
+ close_json_object();
+
tab_flush = 0;
return 0;
}
static int
-tc_dump_action(FILE *f, const struct rtattr *arg, unsigned short tot_acts,
- bool bind)
+tc_dump_action(const struct rtattr *arg, unsigned short tot_acts, bool bind)
{
-
int i;
if (arg == NULL)
@@ -509,7 +511,7 @@ tc_dump_action(FILE *f, const struct rtattr *arg, unsigned short tot_acts,
parse_rtattr_nested(tb, tot_acts, arg);
if (tab_flush && tb[0] && !tb[1])
- return tc_print_action_flush(f, tb[0]);
+ return tc_print_action_flush(tb[0]);
open_json_array(PRINT_JSON, "actions");
for (i = 0; i <= tot_acts; i++) {
@@ -518,7 +520,7 @@ tc_dump_action(FILE *f, const struct rtattr *arg, unsigned short tot_acts,
print_nl();
print_uint(PRINT_ANY, "order",
"\taction order %u: ", i);
- if (tc_print_one_action(f, tb[i], bind) < 0)
+ if (tc_print_one_action(tb[i], bind) < 0)
fprintf(stderr, "Error printing action\n");
close_json_object();
}
@@ -530,9 +532,9 @@ tc_dump_action(FILE *f, const struct rtattr *arg, unsigned short tot_acts,
}
int
-tc_print_action(FILE *f, const struct rtattr *arg, unsigned short tot_acts)
+tc_print_action(const struct rtattr *arg)
{
- return tc_dump_action(f, arg, tot_acts, true);
+ return tc_dump_action(arg, 0, true);
}
int print_action(struct nlmsghdr *n, void *arg)
@@ -585,7 +587,7 @@ int print_action(struct nlmsghdr *n, void *arg)
}
open_json_object(NULL);
- tc_dump_action(fp, tb[TCA_ACT_TAB], tot_acts ? *tot_acts:0, false);
+ tc_dump_action(tb[TCA_ACT_TAB], tot_acts ? *tot_acts : 0, false);
if (tb[TCA_ROOT_EXT_WARN_MSG]) {
print_string(PRINT_ANY, "warn", "%s",
@@ -110,7 +110,7 @@ int parse_action_control_slash(int *argc_p, char ***argv_p,
int *result1_p, int *result2_p, bool allow_num);
void print_action_control(const char *prefix, int action, const char *suffix);
int police_print_xstats(struct action_util *a, FILE *f, struct rtattr *tb);
-int tc_print_action(FILE *f, const struct rtattr *tb, unsigned short tot_acts);
+int tc_print_action(const struct rtattr *tb);
int parse_action(int *argc_p, char ***argv_p, int tca_id, struct nlmsghdr *n);
void print_tm(const struct tcf_t *tm);
int prio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt);
The file handle is not used, and total actions is always zero. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- tc/f_basic.c | 2 +- tc/f_bpf.c | 2 +- tc/f_cgroup.c | 2 +- tc/f_flow.c | 2 +- tc/f_flower.c | 2 +- tc/f_fw.c | 2 +- tc/f_matchall.c | 2 +- tc/f_route.c | 2 +- tc/f_u32.c | 2 +- tc/m_action.c | 28 +++++++++++++++------------- tc/tc_util.h | 2 +- 11 files changed, 25 insertions(+), 23 deletions(-)