On 9/30/20 12:36 AM, Vlad Buslov wrote: > From: Vlad Buslov <vla...@mellanox.com> > > Implement support for classifier/action terse dump using new TCA_DUMP_FLAGS > tlv with only available flag value TCA_DUMP_FLAGS_TERSE. Set the flag when > user requested it with following example CLI: > >> tc -s filter show terse dev ens1f0 ingress
this should be consistent with ip command which has -br for 'brief' output. so this should be tc -s -br filter show dev ens1f0 ingress Other tc maintainers should weigh in on what data should be presented for this mode. > > In terse mode dump only outputs essential data needed to identify the > filter and action (handle, cookie, etc.) and stats, if requested by the > user. The intention is to significantly improve rule dump rate by omitting > all static data that do not change after rule is created. > > Signed-off-by: Vlad Buslov <vla...@mellanox.com> > Reviewed-by: Jiri Pirko <j...@mellanox.com> > --- > tc/tc_filter.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/tc/tc_filter.c b/tc/tc_filter.c > index c591a19f3123..6a82f9bb42fb 100644 > --- a/tc/tc_filter.c > +++ b/tc/tc_filter.c > @@ -595,6 +595,7 @@ static int tc_filter_list(int cmd, int argc, char **argv) > .t.tcm_parent = TC_H_UNSPEC, > .t.tcm_family = AF_UNSPEC, > }; > + bool terse_dump = false; > char d[IFNAMSIZ] = {}; > __u32 prio = 0; > __u32 protocol = 0; > @@ -687,6 +688,8 @@ static int tc_filter_list(int cmd, int argc, char **argv) > invarg("invalid chain index value", *argv); > filter_chain_index_set = 1; > filter_chain_index = chain_index; > + } else if (matches(*argv, "terse") == 0) { > + terse_dump = true; > } else if (matches(*argv, "help") == 0) { > usage(); > } else { > @@ -721,6 +724,15 @@ static int tc_filter_list(int cmd, int argc, char **argv) > if (filter_chain_index_set) > addattr32(&req.n, sizeof(req), TCA_CHAIN, chain_index); > > + if (terse_dump) { > + struct nla_bitfield32 flags = { > + .value = TCA_DUMP_FLAGS_TERSE, > + .selector = TCA_DUMP_FLAGS_TERSE > + }; > + > + addattr_l(&req.n, MAX_MSG, TCA_DUMP_FLAGS, &flags, > sizeof(flags)); > + } > + > if (rtnl_dump_request_n(&rth, &req.n) < 0) { > perror("Cannot send dump request"); > return 1; >