diff options
Diffstat (limited to 'include/net/act_api.h')
| -rw-r--r-- | include/net/act_api.h | 27 | 
1 files changed, 26 insertions, 1 deletions
| diff --git a/include/net/act_api.h b/include/net/act_api.h index b5b624c7e488..3049cb69c025 100644 --- a/include/net/act_api.h +++ b/include/net/act_api.h @@ -7,6 +7,7 @@  */  #include <linux/refcount.h> +#include <net/flow_offload.h>  #include <net/sch_generic.h>  #include <net/pkt_sched.h>  #include <net/net_namespace.h> @@ -44,6 +45,7 @@ struct tc_action {  	u8			hw_stats;  	u8			used_hw_stats;  	bool			used_hw_stats_valid; +	u32			in_hw_count;  };  #define tcf_index	common.tcfa_index  #define tcf_refcnt	common.tcfa_refcnt @@ -88,6 +90,16 @@ static inline void tcf_tm_dump(struct tcf_t *dtm, const struct tcf_t *stm)  	dtm->expires = jiffies_to_clock_t(stm->expires);  } +static inline enum flow_action_hw_stats tc_act_hw_stats(u8 hw_stats) +{ +	if (WARN_ON_ONCE(hw_stats > TCA_ACT_HW_STATS_ANY)) +		return FLOW_ACTION_HW_STATS_DONT_CARE; +	else if (!hw_stats) +		return FLOW_ACTION_HW_STATS_DISABLED; + +	return hw_stats; +} +  #ifdef CONFIG_NET_CLS_ACT  #define ACT_P_CREATED 1 @@ -121,6 +133,8 @@ struct tc_action_ops {  	struct psample_group *  	(*get_psample_group)(const struct tc_action *a,  			     tc_action_priv_destructor *destructor); +	int     (*offload_act_setup)(struct tc_action *act, void *entry_data, +				     u32 *index_inc, bool bind);  };  struct tc_action_net { @@ -189,7 +203,7 @@ int tcf_action_exec(struct sk_buff *skb, struct tc_action **actions,  int tcf_action_init(struct net *net, struct tcf_proto *tp, struct nlattr *nla,  		    struct nlattr *est,  		    struct tc_action *actions[], int init_res[], size_t *attr_size, -		    u32 flags, struct netlink_ext_ack *extack); +		    u32 flags, u32 fl_flags, struct netlink_ext_ack *extack);  struct tc_action_ops *tc_action_load_ops(struct nlattr *nla, bool police,  					 bool rtnl_held,  					 struct netlink_ext_ack *extack); @@ -240,6 +254,9 @@ void tcf_action_update_stats(struct tc_action *a, u64 bytes, u64 packets,  			     u64 drops, bool hw);  int tcf_action_copy_stats(struct sk_buff *, struct tc_action *, int); +int tcf_action_update_hw_stats(struct tc_action *action); +int tcf_action_reoffload_cb(flow_indr_block_bind_cb_t *cb, +			    void *cb_priv, bool add);  int tcf_action_check_ctrlact(int action, struct tcf_proto *tp,  			     struct tcf_chain **handle,  			     struct netlink_ext_ack *newchain); @@ -251,6 +268,14 @@ DECLARE_STATIC_KEY_FALSE(tcf_frag_xmit_count);  #endif  int tcf_dev_queue_xmit(struct sk_buff *skb, int (*xmit)(struct sk_buff *skb)); + +#else /* !CONFIG_NET_CLS_ACT */ + +static inline int tcf_action_reoffload_cb(flow_indr_block_bind_cb_t *cb, +					  void *cb_priv, bool add) { +	return 0; +} +  #endif /* CONFIG_NET_CLS_ACT */  static inline void tcf_action_stats_update(struct tc_action *a, u64 bytes, |