summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHangbin Liu <liuhangbin@gmail.com>2023-01-17 15:19:25 +0800
committerDavid Ahern <dsahern@kernel.org>2023-01-22 11:01:11 -0700
commit6035995665b7845c8ddf2c3a44f46c283f26f449 (patch)
tree60eecff2e4965d21e3291ac87a92f1d4f9a903d6
parent77d4425560ce6f18f37dbaa6c5657c84e49ae468 (diff)
downloadiproute2-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.c1
-rw-r--r--tc/tc_filter.c1
-rw-r--r--tc/tc_qdisc.c2
-rw-r--r--tc/tc_util.c9
-rw-r--r--tc/tc_util.h2
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