|
@@ -106,6 +106,7 @@ struct tc_action_ops {
|
|
|
int bind);
|
|
|
int (*walk)(struct net *, struct sk_buff *,
|
|
|
struct netlink_callback *, int, struct tc_action *);
|
|
|
+ void (*stats_update)(struct tc_action *, u64, u32, u64);
|
|
|
};
|
|
|
|
|
|
struct tc_action_net {
|
|
@@ -178,10 +179,21 @@ int tcf_action_copy_stats(struct sk_buff *, struct tc_action *, int);
|
|
|
|
|
|
#define tc_for_each_action(_a, _exts) \
|
|
|
list_for_each_entry(a, &(_exts)->actions, list)
|
|
|
+
|
|
|
+static inline void tcf_action_stats_update(struct tc_action *a, u64 bytes,
|
|
|
+ u64 packets, u64 lastuse)
|
|
|
+{
|
|
|
+ if (!a->ops->stats_update)
|
|
|
+ return;
|
|
|
+
|
|
|
+ a->ops->stats_update(a, bytes, packets, lastuse);
|
|
|
+}
|
|
|
+
|
|
|
#else /* CONFIG_NET_CLS_ACT */
|
|
|
|
|
|
#define tc_no_actions(_exts) true
|
|
|
#define tc_for_each_action(_a, _exts) while (0)
|
|
|
+#define tcf_action_stats_update(a, bytes, packets, lastuse)
|
|
|
|
|
|
#endif /* CONFIG_NET_CLS_ACT */
|
|
|
#endif
|