From d5ddb441a52cc0da65de69a667569aa12f5c30cb Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 9 Jul 2019 14:25:14 -0700 Subject: [PATCH] tc: print all error messages to stderr Many tc modules were printing error messages to stdout. This is problematic if using JSON or other output formats. Change all these places to use fprintf(stderr, ...) instead. Also, remove unnecessary initialization and places where else is used after error return. Signed-off-by: Stephen Hemminger --- tc/m_bpf.c | 2 +- tc/m_connmark.c | 2 +- tc/m_csum.c | 2 +- tc/m_gact.c | 2 +- tc/m_ife.c | 4 +- tc/m_ipt.c | 94 +++++++++++++++++++++++------------------------ tc/m_mirred.c | 2 +- tc/m_nat.c | 2 +- tc/m_pedit.c | 2 +- tc/m_sample.c | 2 +- tc/m_simple.c | 4 +- tc/m_skbedit.c | 4 +- tc/m_skbmod.c | 4 +- tc/m_tunnel_key.c | 3 +- tc/m_vlan.c | 2 +- tc/m_xt.c | 15 ++++---- tc/m_xt_old.c | 92 +++++++++++++++++++++++----------------------- tc/tc_filter.c | 3 +- tc/tc_qdisc.c | 3 +- 19 files changed, 119 insertions(+), 125 deletions(-) diff --git a/tc/m_bpf.c b/tc/m_bpf.c index e247da8d..e8d704b5 100644 --- a/tc/m_bpf.c +++ b/tc/m_bpf.c @@ -167,7 +167,7 @@ static int bpf_print_opt(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_ACT_BPF_MAX, arg); if (!tb[TCA_ACT_BPF_PARMS]) { - fprintf(f, "[NULL bpf parameters]"); + fprintf(stderr, "Missing bpf parameters\n"); return -1; } diff --git a/tc/m_connmark.c b/tc/m_connmark.c index af5ebfc4..eac23489 100644 --- a/tc/m_connmark.c +++ b/tc/m_connmark.c @@ -115,7 +115,7 @@ static int print_connmark(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_CONNMARK_MAX, arg); if (tb[TCA_CONNMARK_PARMS] == NULL) { - print_string(PRINT_FP, NULL, "%s", "[NULL connmark parameters]"); + fprintf(stderr, "Missing connmark parameters\n"); return -1; } diff --git a/tc/m_csum.c b/tc/m_csum.c index 84396d6a..3e3dc251 100644 --- a/tc/m_csum.c +++ b/tc/m_csum.c @@ -172,7 +172,7 @@ print_csum(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_CSUM_MAX, arg); if (tb[TCA_CSUM_PARMS] == NULL) { - fprintf(f, "[NULL csum parameters]"); + fprintf(stderr, "Missing csum parameters\n"); return -1; } sel = RTA_DATA(tb[TCA_CSUM_PARMS]); diff --git a/tc/m_gact.c b/tc/m_gact.c index 32617d4c..dca2a2f9 100644 --- a/tc/m_gact.c +++ b/tc/m_gact.c @@ -177,7 +177,7 @@ print_gact(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_GACT_MAX, arg); if (tb[TCA_GACT_PARMS] == NULL) { - print_string(PRINT_FP, NULL, "%s", "[NULL gact parameters]"); + fprintf(stderr, "Missing gact parameters\n"); return -1; } p = RTA_DATA(tb[TCA_GACT_PARMS]); diff --git a/tc/m_ife.c b/tc/m_ife.c index 67c1df75..7c612c02 100644 --- a/tc/m_ife.c +++ b/tc/m_ife.c @@ -218,7 +218,7 @@ skip_encode: static int print_ife(struct action_util *au, FILE *f, struct rtattr *arg) { - struct tc_ife *p = NULL; + struct tc_ife *p; struct rtattr *tb[TCA_IFE_MAX + 1]; __u16 ife_type = 0; __u32 mmark = 0; @@ -233,7 +233,7 @@ static int print_ife(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_IFE_MAX, arg); if (tb[TCA_IFE_PARMS] == NULL) { - print_string(PRINT_FP, NULL, "%s", "[NULL ife parameters]"); + fprintf(stderr, "Missing ife parameters\n"); return -1; } p = RTA_DATA(tb[TCA_IFE_PARMS]); diff --git a/tc/m_ipt.c b/tc/m_ipt.c index 1d73cb98..cc95eab7 100644 --- a/tc/m_ipt.c +++ b/tc/m_ipt.c @@ -429,6 +429,8 @@ print_ipt(struct action_util *au, FILE * f, struct rtattr *arg) { struct rtattr *tb[TCA_IPT_MAX + 1]; struct ipt_entry_target *t = NULL; + struct xtables_target *m; + __u32 hook; if (arg == NULL) return -1; @@ -440,70 +442,68 @@ print_ipt(struct action_util *au, FILE * f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_IPT_MAX, arg); if (tb[TCA_IPT_TABLE] == NULL) { - fprintf(f, "[NULL ipt table name ] assuming mangle "); + fprintf(stderr, "Missing ipt table name, assuming mangle\n"); } else { fprintf(f, "tablename: %s ", rta_getattr_str(tb[TCA_IPT_TABLE])); } if (tb[TCA_IPT_HOOK] == NULL) { - fprintf(f, "[NULL ipt hook name ]\n "); + fprintf(stderr, "Missing ipt hook name\n "); return -1; - } else { - __u32 hook; - - hook = rta_getattr_u32(tb[TCA_IPT_HOOK]); - fprintf(f, " hook: %s\n", ipthooks[hook]); } + hook = rta_getattr_u32(tb[TCA_IPT_HOOK]); + fprintf(f, " hook: %s\n", ipthooks[hook]); + if (tb[TCA_IPT_TARG] == NULL) { - fprintf(f, "\t[NULL ipt target parameters ]\n"); + fprintf(stderr, "Missing ipt target parameters\n"); return -1; - } else { - struct xtables_target *m = NULL; + } - t = RTA_DATA(tb[TCA_IPT_TARG]); - m = get_target_name(t->u.user.name); - if (m != NULL) { - if (build_st(m, t) < 0) { - fprintf(stderr, " %s error\n", m->name); - return -1; - } - opts = - merge_options(opts, m->extra_opts, - &m->option_offset); - } else { - fprintf(stderr, " failed to find target %s\n\n", - t->u.user.name); + t = RTA_DATA(tb[TCA_IPT_TARG]); + m = get_target_name(t->u.user.name); + if (m != NULL) { + if (build_st(m, t) < 0) { + fprintf(stderr, " %s error\n", m->name); return -1; } - fprintf(f, "\ttarget "); - m->print(NULL, m->t, 0); - if (tb[TCA_IPT_INDEX] == NULL) { - fprintf(f, " [NULL ipt target index ]\n"); - } else { - __u32 index; - - index = rta_getattr_u32(tb[TCA_IPT_INDEX]); - fprintf(f, "\n\tindex %u", index); - } - - if (tb[TCA_IPT_CNT]) { - struct tc_cnt *c = RTA_DATA(tb[TCA_IPT_CNT]); - - fprintf(f, " ref %d bind %d", c->refcnt, c->bindcnt); - } - if (show_stats) { - if (tb[TCA_IPT_TM]) { - struct tcf_t *tm = RTA_DATA(tb[TCA_IPT_TM]); - - print_tm(f, tm); - } - } - fprintf(f, "\n"); + opts = + merge_options(opts, m->extra_opts, + &m->option_offset); + } else { + fprintf(stderr, " failed to find target %s\n\n", + t->u.user.name); + return -1; } + + fprintf(f, "\ttarget "); + m->print(NULL, m->t, 0); + if (tb[TCA_IPT_INDEX] == NULL) { + fprintf(stderr, "Missing ipt target index\n"); + } else { + __u32 index; + + index = rta_getattr_u32(tb[TCA_IPT_INDEX]); + fprintf(f, "\n\tindex %u", index); + } + + if (tb[TCA_IPT_CNT]) { + struct tc_cnt *c = RTA_DATA(tb[TCA_IPT_CNT]); + + fprintf(f, " ref %d bind %d", c->refcnt, c->bindcnt); + } + if (show_stats) { + if (tb[TCA_IPT_TM]) { + struct tcf_t *tm = RTA_DATA(tb[TCA_IPT_TM]); + + print_tm(f, tm); + } + } + fprintf(f, "\n"); + free_opts(opts); return 0; diff --git a/tc/m_mirred.c b/tc/m_mirred.c index 23ba638a..13209523 100644 --- a/tc/m_mirred.c +++ b/tc/m_mirred.c @@ -287,7 +287,7 @@ print_mirred(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_MIRRED_MAX, arg); if (tb[TCA_MIRRED_PARMS] == NULL) { - print_string(PRINT_FP, NULL, "%s", "[NULL mirred parameters]"); + fprintf(stderr, "Missing mirred parameters\n"); return -1; } p = RTA_DATA(tb[TCA_MIRRED_PARMS]); diff --git a/tc/m_nat.c b/tc/m_nat.c index ee0b7520..c4b02a83 100644 --- a/tc/m_nat.c +++ b/tc/m_nat.c @@ -152,7 +152,7 @@ print_nat(struct action_util *au, FILE * f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_NAT_MAX, arg); if (tb[TCA_NAT_PARMS] == NULL) { - print_string(PRINT_FP, NULL, "%s", "[NULL nat parameters]"); + fprintf(stderr, "Missing nat parameters\n"); return -1; } sel = RTA_DATA(tb[TCA_NAT_PARMS]); diff --git a/tc/m_pedit.c b/tc/m_pedit.c index 8eb15f4b..1cd2d162 100644 --- a/tc/m_pedit.c +++ b/tc/m_pedit.c @@ -742,7 +742,7 @@ static int print_pedit(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_PEDIT_MAX, arg); if (!tb[TCA_PEDIT_PARMS] && !tb[TCA_PEDIT_PARMS_EX]) { - fprintf(f, "[NULL pedit parameters]"); + fprintf(stderr, "Missing pedit parameters\n"); return -1; } diff --git a/tc/m_sample.c b/tc/m_sample.c index 3c840d3f..c068e632 100644 --- a/tc/m_sample.c +++ b/tc/m_sample.c @@ -150,7 +150,7 @@ static int print_sample(struct action_util *au, FILE *f, struct rtattr *arg) if (!tb[TCA_SAMPLE_PARMS] || !tb[TCA_SAMPLE_RATE] || !tb[TCA_SAMPLE_PSAMPLE_GROUP]) { - print_string(PRINT_FP, NULL, "%s", "[NULL sample parameters]"); + fprintf(stderr, "Missing sample parameters\n"); return -1; } p = RTA_DATA(tb[TCA_SAMPLE_PARMS]); diff --git a/tc/m_simple.c b/tc/m_simple.c index 34d1bab4..49e25047 100644 --- a/tc/m_simple.c +++ b/tc/m_simple.c @@ -171,13 +171,13 @@ static int print_simple(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_DEF_MAX, arg); if (tb[TCA_DEF_PARMS] == NULL) { - fprintf(f, "[NULL simple parameters]"); + fprintf(stderr, "Missing simple parameters\n"); return -1; } sel = RTA_DATA(tb[TCA_DEF_PARMS]); if (tb[TCA_DEF_DATA] == NULL) { - fprintf(f, "[missing simple string]"); + fprintf(stderr, "Missing simple string\n"); return -1; } diff --git a/tc/m_skbedit.c b/tc/m_skbedit.c index 70e3a2e4..761cad58 100644 --- a/tc/m_skbedit.c +++ b/tc/m_skbedit.c @@ -196,7 +196,7 @@ static int print_skbedit(struct action_util *au, FILE *f, struct rtattr *arg) SPRINT_BUF(b1); __u32 priority; __u16 ptype; - struct tc_skbedit *p = NULL; + struct tc_skbedit *p; if (arg == NULL) return -1; @@ -204,7 +204,7 @@ static int print_skbedit(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_SKBEDIT_MAX, arg); if (tb[TCA_SKBEDIT_PARMS] == NULL) { - print_string(PRINT_FP, NULL, "%s", "[NULL skbedit parameters]"); + fprintf(stderr, "Missing skbedit parameters\n"); return -1; } p = RTA_DATA(tb[TCA_SKBEDIT_PARMS]); diff --git a/tc/m_skbmod.c b/tc/m_skbmod.c index 2dd1bb7e..d38a5c19 100644 --- a/tc/m_skbmod.c +++ b/tc/m_skbmod.c @@ -161,7 +161,7 @@ static int parse_skbmod(struct action_util *a, int *argc_p, char ***argv_p, static int print_skbmod(struct action_util *au, FILE *f, struct rtattr *arg) { - struct tc_skbmod *p = NULL; + struct tc_skbmod *p; struct rtattr *tb[TCA_SKBMOD_MAX + 1]; __u16 skbmod_etype = 0; int has_optional = 0; @@ -174,7 +174,7 @@ static int print_skbmod(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_SKBMOD_MAX, arg); if (tb[TCA_SKBMOD_PARMS] == NULL) { - fprintf(f, "[NULL skbmod parameters]"); + fprintf(stderr, "Missing skbmod parameters\n"); return -1; } diff --git a/tc/m_tunnel_key.c b/tc/m_tunnel_key.c index fd699017..4e65e444 100644 --- a/tc/m_tunnel_key.c +++ b/tc/m_tunnel_key.c @@ -493,8 +493,7 @@ static int print_tunnel_key(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_TUNNEL_KEY_MAX, arg); if (!tb[TCA_TUNNEL_KEY_PARMS]) { - print_string(PRINT_FP, NULL, "%s", - "[NULL tunnel_key parameters]"); + fprintf(stderr, "Missing tunnel_key parameters\n"); return -1; } parm = RTA_DATA(tb[TCA_TUNNEL_KEY_PARMS]); diff --git a/tc/m_vlan.c b/tc/m_vlan.c index 412f6aa1..9c8071e9 100644 --- a/tc/m_vlan.c +++ b/tc/m_vlan.c @@ -188,7 +188,7 @@ static int print_vlan(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_VLAN_MAX, arg); if (!tb[TCA_VLAN_PARMS]) { - print_string(PRINT_FP, NULL, "%s", "[NULL vlan parameters]"); + fprintf(stderr, "Missing vlanparameters\n"); return -1; } parm = RTA_DATA(tb[TCA_VLAN_PARMS]); diff --git a/tc/m_xt.c b/tc/m_xt.c index 29574bd4..bf0db2be 100644 --- a/tc/m_xt.c +++ b/tc/m_xt.c @@ -317,6 +317,7 @@ print_ipt(struct action_util *au, FILE *f, struct rtattr *arg) struct xtables_target *m; struct rtattr *tb[TCA_IPT_MAX + 1]; struct xt_entry_target *t = NULL; + __u32 hook; if (arg == NULL) return -1; @@ -330,27 +331,25 @@ print_ipt(struct action_util *au, FILE *f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_IPT_MAX, arg); if (tb[TCA_IPT_TABLE] == NULL) { - fprintf(f, "[NULL ipt table name ] assuming mangle "); + fprintf(stderr, "Missing ipt table name, assuming mangle\n"); } else { fprintf(f, "tablename: %s ", rta_getattr_str(tb[TCA_IPT_TABLE])); } if (tb[TCA_IPT_HOOK] == NULL) { - fprintf(f, "[NULL ipt hook name ]\n "); + fprintf(stderr, "Missing ipt hook name\n "); return -1; - } else { - __u32 hook; - - hook = rta_getattr_u32(tb[TCA_IPT_HOOK]); - fprintf(f, " hook: %s\n", ipthooks[hook]); } if (tb[TCA_IPT_TARG] == NULL) { - fprintf(f, "\t[NULL ipt target parameters ]\n"); + fprintf(stderr, "Missing ipt target parameters\n"); return -1; } + hook = rta_getattr_u32(tb[TCA_IPT_HOOK]); + fprintf(f, " hook: %s\n", ipthooks[hook]); + t = RTA_DATA(tb[TCA_IPT_TARG]); m = xtables_find_target(t->u.user.name, XTF_TRY_LOAD); if (!m) { diff --git a/tc/m_xt_old.c b/tc/m_xt_old.c index 25d36778..6a4509a9 100644 --- a/tc/m_xt_old.c +++ b/tc/m_xt_old.c @@ -354,6 +354,8 @@ print_ipt(struct action_util *au, FILE * f, struct rtattr *arg) { struct rtattr *tb[TCA_IPT_MAX + 1]; struct xt_entry_target *t = NULL; + struct xtables_target *m; + __u32 hook; if (arg == NULL) return -1; @@ -363,70 +365,66 @@ print_ipt(struct action_util *au, FILE * f, struct rtattr *arg) parse_rtattr_nested(tb, TCA_IPT_MAX, arg); if (tb[TCA_IPT_TABLE] == NULL) { - fprintf(f, "[NULL ipt table name ] assuming mangle "); + fprintf(stderr, "Missing ipt table name, assuming mangle\n"); } else { fprintf(f, "tablename: %s ", rta_getattr_str(tb[TCA_IPT_TABLE])); } if (tb[TCA_IPT_HOOK] == NULL) { - fprintf(f, "[NULL ipt hook name ]\n "); + fprintf(stderr, "Missing ipt hook name\n"); return -1; - } else { - __u32 hook; - - hook = rta_getattr_u32(tb[TCA_IPT_HOOK]); - fprintf(f, " hook: %s\n", ipthooks[hook]); } if (tb[TCA_IPT_TARG] == NULL) { - fprintf(f, "\t[NULL ipt target parameters ]\n"); + fprintf(stderr, "Missing ipt target parameters\n"); return -1; - } else { - struct xtables_target *m = NULL; + } - t = RTA_DATA(tb[TCA_IPT_TARG]); - m = find_target(t->u.user.name, TRY_LOAD); - if (m != NULL) { - if (build_st(m, t) < 0) { - fprintf(stderr, " %s error\n", m->name); - return -1; - } + hook = rta_getattr_u32(tb[TCA_IPT_HOOK]); + fprintf(f, " hook: %s\n", ipthooks[hook]); - opts = - merge_options(opts, m->extra_opts, - &m->option_offset); - } else { - fprintf(stderr, " failed to find target %s\n\n", - t->u.user.name); + t = RTA_DATA(tb[TCA_IPT_TARG]); + m = find_target(t->u.user.name, TRY_LOAD); + if (m != NULL) { + if (build_st(m, t) < 0) { + fprintf(stderr, " %s error\n", m->name); return -1; } - fprintf(f, "\ttarget "); - m->print(NULL, m->t, 0); - if (tb[TCA_IPT_INDEX] == NULL) { - fprintf(f, " [NULL ipt target index ]\n"); - } else { - __u32 index; - - index = rta_getattr_u32(tb[TCA_IPT_INDEX]); - fprintf(f, "\n\tindex %u", index); - } - - if (tb[TCA_IPT_CNT]) { - struct tc_cnt *c = RTA_DATA(tb[TCA_IPT_CNT]); - - fprintf(f, " ref %d bind %d", c->refcnt, c->bindcnt); - } - if (show_stats) { - if (tb[TCA_IPT_TM]) { - struct tcf_t *tm = RTA_DATA(tb[TCA_IPT_TM]); - - print_tm(f, tm); - } - } - fprintf(f, "\n"); + opts = + merge_options(opts, m->extra_opts, + &m->option_offset); + } else { + fprintf(stderr, " failed to find target %s\n\n", + t->u.user.name); + return -1; } + fprintf(f, "\ttarget "); + m->print(NULL, m->t, 0); + if (tb[TCA_IPT_INDEX] == NULL) { + fprintf(f, " [NULL ipt target index ]\n"); + } else { + __u32 index; + + index = rta_getattr_u32(tb[TCA_IPT_INDEX]); + fprintf(f, "\n\tindex %u", index); + } + + if (tb[TCA_IPT_CNT]) { + struct tc_cnt *c = RTA_DATA(tb[TCA_IPT_CNT]); + + fprintf(f, " ref %d bind %d", c->refcnt, c->bindcnt); + } + if (show_stats) { + if (tb[TCA_IPT_TM]) { + struct tcf_t *tm = RTA_DATA(tb[TCA_IPT_TM]); + + print_tm(f, tm); + } + } + fprintf(f, "\n"); + free_opts(opts); return 0; diff --git a/tc/tc_filter.c b/tc/tc_filter.c index e5c7bc46..cd78c244 100644 --- a/tc/tc_filter.c +++ b/tc/tc_filter.c @@ -375,8 +375,7 @@ int print_filter(struct nlmsghdr *n, void *arg) if (q) q->print_fopt(q, fp, tb[TCA_OPTIONS], t->tcm_handle); else - print_string(PRINT_FP, NULL, - "[cannot parse parameters]", NULL); + fprintf(stderr, "cannot parse option parameters\n"); close_json_object(); } } diff --git a/tc/tc_qdisc.c b/tc/tc_qdisc.c index e573a1df..17e39983 100644 --- a/tc/tc_qdisc.c +++ b/tc/tc_qdisc.c @@ -313,8 +313,7 @@ int print_qdisc(struct nlmsghdr *n, void *arg) if (q) q->print_qopt(q, fp, tb[TCA_OPTIONS]); else - print_string(PRINT_FP, NULL, - "[cannot parse qdisc parameters]", NULL); + fprintf(stderr, "Cannot parse qdisc parameters\n"); } close_json_object();