diff options
Diffstat (limited to 'include/net/pkt_cls.h')
| -rw-r--r-- | include/net/pkt_cls.h | 108 | 
1 files changed, 105 insertions, 3 deletions
diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 72ffb3120ced..40965fbbcd31 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -81,6 +81,14 @@ void __tcf_block_cb_unregister(struct tcf_block *block,  			       struct tcf_block_cb *block_cb);  void tcf_block_cb_unregister(struct tcf_block *block,  			     tc_setup_cb_t *cb, void *cb_ident); +int __tc_indr_block_cb_register(struct net_device *dev, void *cb_priv, +				tc_indr_block_bind_cb_t *cb, void *cb_ident); +int tc_indr_block_cb_register(struct net_device *dev, void *cb_priv, +			      tc_indr_block_bind_cb_t *cb, void *cb_ident); +void __tc_indr_block_cb_unregister(struct net_device *dev, +				   tc_indr_block_bind_cb_t *cb, void *cb_ident); +void tc_indr_block_cb_unregister(struct net_device *dev, +				 tc_indr_block_bind_cb_t *cb, void *cb_ident);  int tcf_classify(struct sk_buff *skb, const struct tcf_proto *tp,  		 struct tcf_result *res, bool compat_mode); @@ -183,6 +191,32 @@ void tcf_block_cb_unregister(struct tcf_block *block,  {  } +static inline +int __tc_indr_block_cb_register(struct net_device *dev, void *cb_priv, +				tc_indr_block_bind_cb_t *cb, void *cb_ident) +{ +	return 0; +} + +static inline +int tc_indr_block_cb_register(struct net_device *dev, void *cb_priv, +			      tc_indr_block_bind_cb_t *cb, void *cb_ident) +{ +	return 0; +} + +static inline +void __tc_indr_block_cb_unregister(struct net_device *dev, +				   tc_indr_block_bind_cb_t *cb, void *cb_ident) +{ +} + +static inline +void tc_indr_block_cb_unregister(struct net_device *dev, +				 tc_indr_block_bind_cb_t *cb, void *cb_ident) +{ +} +  static inline int tcf_classify(struct sk_buff *skb, const struct tcf_proto *tp,  			       struct tcf_result *res, bool compat_mode)  { @@ -585,8 +619,8 @@ tcf_match_indev(struct sk_buff *skb, int ifindex)  }  #endif /* CONFIG_NET_CLS_IND */ -int tc_setup_cb_call(struct tcf_block *block, struct tcf_exts *exts, -		     enum tc_setup_type type, void *type_data, bool err_stop); +int tc_setup_cb_call(struct tcf_block *block, enum tc_setup_type type, +		     void *type_data, bool err_stop);  enum tc_block_command {  	TC_BLOCK_BIND, @@ -609,6 +643,7 @@ struct tc_cls_common_offload {  struct tc_cls_u32_knode {  	struct tcf_exts *exts; +	struct tcf_result *res;  	struct tc_u32_sel *sel;  	u32 handle;  	u32 val; @@ -787,12 +822,21 @@ enum tc_mq_command {  	TC_MQ_CREATE,  	TC_MQ_DESTROY,  	TC_MQ_STATS, +	TC_MQ_GRAFT, +}; + +struct tc_mq_opt_offload_graft_params { +	unsigned long queue; +	u32 child_handle;  };  struct tc_mq_qopt_offload {  	enum tc_mq_command command;  	u32 handle; -	struct tc_qopt_offload_stats stats; +	union { +		struct tc_qopt_offload_stats stats; +		struct tc_mq_opt_offload_graft_params graft_params; +	};  };  enum tc_red_command { @@ -800,13 +844,16 @@ enum tc_red_command {  	TC_RED_DESTROY,  	TC_RED_STATS,  	TC_RED_XSTATS, +	TC_RED_GRAFT,  };  struct tc_red_qopt_offload_params {  	u32 min;  	u32 max;  	u32 probability; +	u32 limit;  	bool is_ecn; +	bool is_harddrop;  	struct gnet_stats_queue *qstats;  }; @@ -818,6 +865,51 @@ struct tc_red_qopt_offload {  		struct tc_red_qopt_offload_params set;  		struct tc_qopt_offload_stats stats;  		struct red_stats *xstats; +		u32 child_handle; +	}; +}; + +enum tc_gred_command { +	TC_GRED_REPLACE, +	TC_GRED_DESTROY, +	TC_GRED_STATS, +}; + +struct tc_gred_vq_qopt_offload_params { +	bool present; +	u32 limit; +	u32 prio; +	u32 min; +	u32 max; +	bool is_ecn; +	bool is_harddrop; +	u32 probability; +	/* Only need backlog, see struct tc_prio_qopt_offload_params */ +	u32 *backlog; +}; + +struct tc_gred_qopt_offload_params { +	bool grio_on; +	bool wred_on; +	unsigned int dp_cnt; +	unsigned int dp_def; +	struct gnet_stats_queue *qstats; +	struct tc_gred_vq_qopt_offload_params tab[MAX_DPs]; +}; + +struct tc_gred_qopt_offload_stats { +	struct gnet_stats_basic_packed bstats[MAX_DPs]; +	struct gnet_stats_queue qstats[MAX_DPs]; +	struct red_stats *xstats[MAX_DPs]; +}; + +struct tc_gred_qopt_offload { +	enum tc_gred_command command; +	u32 handle; +	u32 parent; +	union { +		struct tc_gred_qopt_offload_params set; +		struct tc_gred_qopt_offload_stats stats;  	};  }; @@ -854,4 +946,14 @@ struct tc_prio_qopt_offload {  	};  }; +enum tc_root_command { +	TC_ROOT_GRAFT, +}; + +struct tc_root_qopt_offload { +	enum tc_root_command command; +	u32 handle; +	bool ingress; +}; +  #endif  |