From: Zhengchao Shao Date: Fri, 16 Sep 2022 02:02:43 +0000 (+0800) Subject: net/sched: cls_api: add helper for tc cls walker stats dump X-Git-Tag: v6.1-rc5~319^2~158^2~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fe0df81df51eb932a83e0c3844106ac6c0f914db;p=platform%2Fkernel%2Flinux-starfive.git net/sched: cls_api: add helper for tc cls walker stats dump The walk implementation of most tc cls modules is basically the same. That is, the values of count and skip are checked first. If count is greater than or equal to skip, the registered fn function is executed. Otherwise, increase the value of count. So we can reconstruct them. Signed-off-by: Zhengchao Shao Reviewed-by: Jamal Hadi Salim Reviewed-by: Victor Nogueira Tested-by: Victor Nogueira Signed-off-by: Jakub Kicinski --- diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index d9d90e6..d376c99 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -81,6 +81,19 @@ int tcf_classify(struct sk_buff *skb, const struct tcf_proto *tp, struct tcf_result *res, bool compat_mode); +static inline bool tc_cls_stats_dump(struct tcf_proto *tp, + struct tcf_walker *arg, + void *filter) +{ + if (arg->count >= arg->skip && arg->fn(tp, filter, arg) < 0) { + arg->stop = 1; + return false; + } + + arg->count++; + return true; +} + #else static inline bool tcf_block_shared(struct tcf_block *block) {