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>
This commit is contained in:
Hangbin Liu 2023-01-17 15:19:25 +08:00 committed by David Ahern
parent 77d4425560
commit 6035995665
5 changed files with 15 additions and 0 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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();
}

View File

@ -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