diff options
author | Hangbin Liu <liuhangbin@gmail.com> | 2023-01-17 15:19:25 +0800 |
---|---|---|
committer | David Ahern <dsahern@kernel.org> | 2023-01-22 11:01:11 -0700 |
commit | 6035995665b7845c8ddf2c3a44f46c283f26f449 (patch) | |
tree | 60eecff2e4965d21e3291ac87a92f1d4f9a903d6 | |
parent | 77d4425560ce6f18f37dbaa6c5657c84e49ae468 (diff) | |
download | iproute2-6035995665b7845c8ddf2c3a44f46c283f26f449.tar.gz |
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 <liuhangbin@gmail.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
-rw-r--r-- | tc/m_action.c | 1 | ||||
-rw-r--r-- | tc/tc_filter.c | 1 | ||||
-rw-r--r-- | tc/tc_qdisc.c | 2 | ||||
-rw-r--r-- | tc/tc_util.c | 9 | ||||
-rw-r--r-- | tc/tc_util.h | 2 |
5 files changed, 15 insertions, 0 deletions
diff --git a/tc/m_action.c b/tc/m_action.c index 7b12b6fc..0400132c 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 9617d28a..700a09f6 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 b97f2182..92ceb4c2 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 f72a19ca..d9dd5a81 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 a3fa7360..c535dccb 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 |