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

Reply via email to