From: Hangbin Liu Date: Tue, 17 Jan 2023 07:19:25 +0000 (+0800) Subject: tc: add new attr TCA_EXT_WARN_MSG X-Git-Tag: v6.3.0~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6035995665b7845c8ddf2c3a44f46c283f26f449;p=thirdparty%2Fiproute2.git tc: add new attr TCA_EXT_WARN_MSG Currently, when the rule is not to be exclusively executed by the hardware, extack is not passed along and offloading failures don't get logged. Add a new attr TCA_EXT_WARN_MSG to log the extack message so we can monitor the HW failures. e.g. # tc monitor added chain dev enp3s0f1np1 parent ffff: chain 0 added filter dev enp3s0f1np1 ingress protocol all pref 49152 flower chain 0 handle 0x1 ct_state +trk+new not_in_hw action order 1: gact action drop random type none pass val 0 index 1 ref 1 bind 1 mlx5_core: matching on ct_state +new isn't supported. Signed-off-by: Hangbin Liu Signed-off-by: David Ahern --- diff --git a/tc/m_action.c b/tc/m_action.c index 7b12b6fc5..0400132ce 100644 --- a/tc/m_action.c +++ b/tc/m_action.c @@ -586,6 +586,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); + print_ext_msg(tb); close_json_object(); return 0; diff --git a/tc/tc_filter.c b/tc/tc_filter.c index 9617d28a8..700a09f62 100644 --- a/tc/tc_filter.c +++ b/tc/tc_filter.c @@ -366,6 +366,7 @@ int print_filter(struct nlmsghdr *n, void *arg) print_nl(); } + print_ext_msg(tb); close_json_object(); fflush(fp); return 0; diff --git a/tc/tc_qdisc.c b/tc/tc_qdisc.c index b97f21822..92ceb4c2f 100644 --- a/tc/tc_qdisc.c +++ b/tc/tc_qdisc.c @@ -342,6 +342,8 @@ int print_qdisc(struct nlmsghdr *n, void *arg) print_nl(); } } + + print_ext_msg(tb); close_json_object(); fflush(fp); return 0; diff --git a/tc/tc_util.c b/tc/tc_util.c index f72a19ca2..d9dd5a819 100644 --- a/tc/tc_util.c +++ b/tc/tc_util.c @@ -843,3 +843,12 @@ void print_masked_be16(const char *name, struct rtattr *attr, print_masked_type(UINT16_MAX, __rta_getattr_be16_u32, name, attr, mask_attr, newline); } + +void print_ext_msg(struct rtattr **tb) +{ + if (!tb[TCA_EXT_WARN_MSG]) + return; + + print_string(PRINT_ANY, "warn", "%s", rta_getattr_str(tb[TCA_EXT_WARN_MSG])); + print_nl(); +} diff --git a/tc/tc_util.h b/tc/tc_util.h index a3fa7360f..c535dccbc 100644 --- a/tc/tc_util.h +++ b/tc/tc_util.h @@ -133,4 +133,6 @@ void print_masked_u8(const char *name, struct rtattr *attr, struct rtattr *mask_attr, bool newline); void print_masked_be16(const char *name, struct rtattr *attr, struct rtattr *mask_attr, bool newline); + +void print_ext_msg(struct rtattr **tb); #endif