2019-05-04 11:46:21 +00:00
|
|
|
/* 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;
|
|
|
|
|
2020-02-17 10:12:10 +00:00
|
|
|
params = rcu_dereference_protected(police->params,
|
|
|
|
lockdep_is_held(&police->tcf_lock));
|
2019-05-04 11:46:21 +00:00
|
|
|
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;
|
|
|
|
|
2020-02-17 10:12:10 +00:00
|
|
|
params = rcu_dereference_protected(police->params,
|
|
|
|
lockdep_is_held(&police->tcf_lock));
|
2019-05-04 11:46:21 +00:00
|
|
|
return params->tcfp_burst;
|
|
|
|
}
|
|
|
|
|
2020-06-24 09:36:28 +00:00
|
|
|
static inline u32 tcf_police_tcfp_mtu(const struct tc_action *act)
|
|
|
|
{
|
|
|
|
struct tcf_police *police = to_police(act);
|
|
|
|
struct tcf_police_params *params;
|
|
|
|
|
|
|
|
params = rcu_dereference_protected(police->params,
|
|
|
|
lockdep_is_held(&police->tcf_lock));
|
|
|
|
return params->tcfp_mtu;
|
|
|
|
}
|
|
|
|
|
2019-05-04 11:46:21 +00:00
|
|
|
#endif /* __NET_TC_POLICE_H */
|