Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c43212bb authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'refactor-tc_action-structs'



Cong Wang says:

====================
net_sched: refactor tc action structures

These two patches factor out the struct tcf_common.

v2: fix a compile warning
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents b93dd49c ec0595cc
Loading
Loading
Loading
Loading
+47 −44
Original line number Diff line number Diff line
@@ -10,34 +10,6 @@
#include <net/net_namespace.h>
#include <net/netns/generic.h>

struct tcf_common {
	struct hlist_node		tcfc_head;
	u32				tcfc_index;
	int				tcfc_refcnt;
	int				tcfc_bindcnt;
	u32				tcfc_capab;
	int				tcfc_action;
	struct tcf_t			tcfc_tm;
	struct gnet_stats_basic_packed	tcfc_bstats;
	struct gnet_stats_queue		tcfc_qstats;
	struct gnet_stats_rate_est64	tcfc_rate_est;
	spinlock_t			tcfc_lock;
	struct rcu_head			tcfc_rcu;
	struct gnet_stats_basic_cpu __percpu *cpu_bstats;
	struct gnet_stats_queue __percpu *cpu_qstats;
};
#define tcf_head	common.tcfc_head
#define tcf_index	common.tcfc_index
#define tcf_refcnt	common.tcfc_refcnt
#define tcf_bindcnt	common.tcfc_bindcnt
#define tcf_capab	common.tcfc_capab
#define tcf_action	common.tcfc_action
#define tcf_tm		common.tcfc_tm
#define tcf_bstats	common.tcfc_bstats
#define tcf_qstats	common.tcfc_qstats
#define tcf_rate_est	common.tcfc_rate_est
#define tcf_lock	common.tcfc_lock
#define tcf_rcu		common.tcfc_rcu

struct tcf_hashinfo {
	struct hlist_head	*htab;
@@ -46,6 +18,44 @@ struct tcf_hashinfo {
	u32			index;
};

struct tc_action_ops;

struct tc_action {
	const struct tc_action_ops	*ops;
	__u32				type; /* for backward compat(TCA_OLD_COMPAT) */
	__u32				order;
	struct list_head		list;
	struct tcf_hashinfo		*hinfo;

	struct hlist_node		tcfa_head;
	u32				tcfa_index;
	int				tcfa_refcnt;
	int				tcfa_bindcnt;
	u32				tcfa_capab;
	int				tcfa_action;
	struct tcf_t			tcfa_tm;
	struct gnet_stats_basic_packed	tcfa_bstats;
	struct gnet_stats_queue		tcfa_qstats;
	struct gnet_stats_rate_est64	tcfa_rate_est;
	spinlock_t			tcfa_lock;
	struct rcu_head			tcfa_rcu;
	struct gnet_stats_basic_cpu __percpu *cpu_bstats;
	struct gnet_stats_queue __percpu *cpu_qstats;
};
#define tcf_act		common.tcfa_act
#define tcf_head	common.tcfa_head
#define tcf_index	common.tcfa_index
#define tcf_refcnt	common.tcfa_refcnt
#define tcf_bindcnt	common.tcfa_bindcnt
#define tcf_capab	common.tcfa_capab
#define tcf_action	common.tcfa_action
#define tcf_tm		common.tcfa_tm
#define tcf_bstats	common.tcfa_bstats
#define tcf_qstats	common.tcfa_qstats
#define tcf_rate_est	common.tcfa_rate_est
#define tcf_lock	common.tcfa_lock
#define tcf_rcu		common.tcfa_rcu

static inline unsigned int tcf_hash(u32 index, unsigned int hmask)
{
	return index & hmask;
@@ -88,15 +98,6 @@ static inline void tcf_tm_dump(struct tcf_t *dtm, const struct tcf_t *stm)
	dtm->expires = jiffies_to_clock_t(stm->expires);
}

struct tc_action {
	void			*priv;
	const struct tc_action_ops	*ops;
	__u32			type; /* for backward compat(TCA_OLD_COMPAT) */
	__u32			order;
	struct list_head	list;
	struct tcf_hashinfo	*hinfo;
};

#ifdef CONFIG_NET_CLS_ACT

#define ACT_P_CREATED 1
@@ -106,17 +107,18 @@ struct tc_action_ops {
	struct list_head head;
	char    kind[IFNAMSIZ];
	__u32   type; /* TBD to match kind */
	size_t	size;
	struct module		*owner;
	int     (*act)(struct sk_buff *, const struct tc_action *,
		       struct tcf_result *);
	int     (*dump)(struct sk_buff *, struct tc_action *, int, int);
	void	(*cleanup)(struct tc_action *, int bind);
	int     (*lookup)(struct net *, struct tc_action *, u32);
	int     (*lookup)(struct net *, struct tc_action **, u32);
	int     (*init)(struct net *net, struct nlattr *nla,
			struct nlattr *est, struct tc_action *act, int ovr,
			struct nlattr *est, struct tc_action **act, int ovr,
			int bind);
	int     (*walk)(struct net *, struct sk_buff *,
			struct netlink_callback *, int, struct tc_action *);
			struct netlink_callback *, int, const struct tc_action_ops *);
	void	(*stats_update)(struct tc_action *, u64, u32, u64);
};

@@ -152,13 +154,14 @@ static inline void tc_action_net_exit(struct tc_action_net *tn)

int tcf_generic_walker(struct tc_action_net *tn, struct sk_buff *skb,
		       struct netlink_callback *cb, int type,
		       struct tc_action *a);
int tcf_hash_search(struct tc_action_net *tn, struct tc_action *a, u32 index);
		       const struct tc_action_ops *ops);
int tcf_hash_search(struct tc_action_net *tn, struct tc_action **a, u32 index);
u32 tcf_hash_new_index(struct tc_action_net *tn);
bool tcf_hash_check(struct tc_action_net *tn, u32 index, struct tc_action *a,
bool tcf_hash_check(struct tc_action_net *tn, u32 index, struct tc_action **a,
		    int bind);
int tcf_hash_create(struct tc_action_net *tn, u32 index, struct nlattr *est,
		    struct tc_action *a, int size, int bind, bool cpustats);
		    struct tc_action **a, const struct tc_action_ops *ops, int bind,
		    bool cpustats);
void tcf_hash_cleanup(struct tc_action *a, struct nlattr *est);
void tcf_hash_insert(struct tc_action_net *tn, struct tc_action *a);

+2 −3
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
#include <net/act_api.h>

struct tcf_bpf {
	struct tcf_common	common;
	struct tc_action	common;
	struct bpf_prog __rcu	*filter;
	union {
		u32		bpf_fd;
@@ -23,7 +23,6 @@ struct tcf_bpf {
	struct sock_filter	*bpf_ops;
	const char		*bpf_name;
};
#define to_bpf(a) \
	container_of(a->priv, struct tcf_bpf, common)
#define to_bpf(a) ((struct tcf_bpf *)a)

#endif /* __NET_TC_BPF_H */
+2 −3
Original line number Diff line number Diff line
@@ -4,12 +4,11 @@
#include <net/act_api.h>

struct tcf_connmark_info {
	struct tcf_common common;
	struct tc_action common;
	struct net *net;
	u16 zone;
};

#define to_connmark(a) \
	container_of(a->priv, struct tcf_connmark_info, common)
#define to_connmark(a) ((struct tcf_connmark_info *)a)

#endif /* __NET_TC_CONNMARK_H */
+2 −3
Original line number Diff line number Diff line
@@ -5,11 +5,10 @@
#include <net/act_api.h>

struct tcf_csum {
	struct tcf_common common;
	struct tc_action common;

	u32 update_flags;
};
#define to_tcf_csum(a) \
	container_of(a->priv,struct tcf_csum,common)
#define to_tcf_csum(a) ((struct tcf_csum *)a)

#endif /* __NET_TC_CSUM_H */
+2 −3
Original line number Diff line number Diff line
@@ -4,11 +4,10 @@
#include <net/act_api.h>

struct tcf_defact {
	struct tcf_common	common;
	struct tc_action	common;
	u32		tcfd_datalen;
	void		*tcfd_defdata;
};
#define to_defact(a) \
	container_of(a->priv, struct tcf_defact, common)
#define to_defact(a) ((struct tcf_defact *)a)

#endif /* __NET_TC_DEF_H */
Loading