net/sched: move police action structures to header
authorPieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com>
Sat, 4 May 2019 11:46:21 +0000 (04:46 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 May 2019 04:49:24 +0000 (21:49 -0700)
Move tcf_police_params, tcf_police and tc_police_compat structures to a
header. Making them usable to other code for example drivers that would
offload police actions to hardware.

Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/tc_act/tc_police.h [new file with mode: 0644]
net/sched/act_police.c

diff --git a/include/net/tc_act/tc_police.h b/include/net/tc_act/tc_police.h
new file mode 100644 (file)
index 0000000..8b9ef36
--- /dev/null
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __NET_TC_POLICE_H
+#define __NET_TC_POLICE_H
+
+#include <net/act_api.h>
+
+struct tcf_police_params {
+       int                     tcfp_result;
+       u32                     tcfp_ewma_rate;
+       s64                     tcfp_burst;
+       u32                     tcfp_mtu;
+       s64                     tcfp_mtu_ptoks;
+       struct psched_ratecfg   rate;
+       bool                    rate_present;
+       struct psched_ratecfg   peak;
+       bool                    peak_present;
+       struct rcu_head rcu;
+};
+
+struct tcf_police {
+       struct tc_action        common;
+       struct tcf_police_params __rcu *params;
+
+       spinlock_t              tcfp_lock ____cacheline_aligned_in_smp;
+       s64                     tcfp_toks;
+       s64                     tcfp_ptoks;
+       s64                     tcfp_t_c;
+};
+
+#define to_police(pc) ((struct tcf_police *)pc)
+
+/* old policer structure from before tc actions */
+struct tc_police_compat {
+       u32                     index;
+       int                     action;
+       u32                     limit;
+       u32                     burst;
+       u32                     mtu;
+       struct tc_ratespec      rate;
+       struct tc_ratespec      peakrate;
+};
+
+static inline bool is_tcf_police(const struct tc_action *act)
+{
+#ifdef CONFIG_NET_CLS_ACT
+       if (act->ops && act->ops->id == TCA_ID_POLICE)
+               return true;
+#endif
+       return false;
+}
+
+static inline u64 tcf_police_rate_bytes_ps(const struct tc_action *act)
+{
+       struct tcf_police *police = to_police(act);
+       struct tcf_police_params *params;
+
+       params = rcu_dereference_bh(police->params);
+       return params->rate.rate_bytes_ps;
+}
+
+static inline s64 tcf_police_tcfp_burst(const struct tc_action *act)
+{
+       struct tcf_police *police = to_police(act);
+       struct tcf_police_params *params;
+
+       params = rcu_dereference_bh(police->params);
+       return params->tcfp_burst;
+}
+
+#endif /* __NET_TC_POLICE_H */
index b48e40c69ad0617b8c9c1989044fee648c8f7a0e..e33bcab75d1f20ce3228261e5608a2b63e2fe1e8 100644 (file)
 #include <net/act_api.h>
 #include <net/netlink.h>
 #include <net/pkt_cls.h>
-
-struct tcf_police_params {
-       int                     tcfp_result;
-       u32                     tcfp_ewma_rate;
-       s64                     tcfp_burst;
-       u32                     tcfp_mtu;
-       s64                     tcfp_mtu_ptoks;
-       struct psched_ratecfg   rate;
-       bool                    rate_present;
-       struct psched_ratecfg   peak;
-       bool                    peak_present;
-       struct rcu_head rcu;
-};
-
-struct tcf_police {
-       struct tc_action        common;
-       struct tcf_police_params __rcu *params;
-
-       spinlock_t              tcfp_lock ____cacheline_aligned_in_smp;
-       s64                     tcfp_toks;
-       s64                     tcfp_ptoks;
-       s64                     tcfp_t_c;
-};
-
-#define to_police(pc) ((struct tcf_police *)pc)
-
-/* old policer structure from before tc actions */
-struct tc_police_compat {
-       u32                     index;
-       int                     action;
-       u32                     limit;
-       u32                     burst;
-       u32                     mtu;
-       struct tc_ratespec      rate;
-       struct tc_ratespec      peakrate;
-};
+#include <net/tc_act/tc_police.h>
 
 /* Each policer is serialized by its individual spinlock */