diff options
| author | WANG Cong <xiyou.wangcong@gmail.com> | 2016-07-25 19:09:41 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2016-07-26 00:49:19 -0400 |
| commit | a85a970af265f156740977168b542234511b28a8 (patch) | |
| tree | 19866c37883917b1ec6964fcbae76335f9de0139 /include/net/tc_act | |
| parent | b93dd49c1a35884864027abd707889b795637f7a (diff) | |
net_sched: move tc_action into tcf_common
struct tc_action is confusing, currently we use it for two purposes:
1) Pass in arguments and carry out results from helper functions
2) A generic representation for tc actions
The first one is error-prone, since we need to make sure we don't
miss anything. This patch aims to get rid of this use, by moving
tc_action into tcf_common, so that they are allocated together
in hashtable and can be cast'ed easily.
And together with the following patch, we could really make
tc_action a generic representation for all tc actions and each
type of action can inherit from it.
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/tc_act')
| -rw-r--r-- | include/net/tc_act/tc_bpf.h | 3 | ||||
| -rw-r--r-- | include/net/tc_act/tc_connmark.h | 3 | ||||
| -rw-r--r-- | include/net/tc_act/tc_csum.h | 3 | ||||
| -rw-r--r-- | include/net/tc_act/tc_defact.h | 3 | ||||
| -rw-r--r-- | include/net/tc_act/tc_gact.h | 5 | ||||
| -rw-r--r-- | include/net/tc_act/tc_ife.h | 3 | ||||
| -rw-r--r-- | include/net/tc_act/tc_ipt.h | 3 | ||||
| -rw-r--r-- | include/net/tc_act/tc_mirred.h | 3 | ||||
| -rw-r--r-- | include/net/tc_act/tc_nat.h | 5 | ||||
| -rw-r--r-- | include/net/tc_act/tc_pedit.h | 3 | ||||
| -rw-r--r-- | include/net/tc_act/tc_skbedit.h | 3 | ||||
| -rw-r--r-- | include/net/tc_act/tc_vlan.h | 3 |
12 files changed, 13 insertions, 27 deletions
diff --git a/include/net/tc_act/tc_bpf.h b/include/net/tc_act/tc_bpf.h index 958d69cfb19c..80a4d6f49773 100644 --- a/include/net/tc_act/tc_bpf.h +++ b/include/net/tc_act/tc_bpf.h | |||
| @@ -23,7 +23,6 @@ struct tcf_bpf { | |||
| 23 | struct sock_filter *bpf_ops; | 23 | struct sock_filter *bpf_ops; |
| 24 | const char *bpf_name; | 24 | const char *bpf_name; |
| 25 | }; | 25 | }; |
| 26 | #define to_bpf(a) \ | 26 | #define to_bpf(a) ((struct tcf_bpf *)a) |
| 27 | container_of(a->priv, struct tcf_bpf, common) | ||
| 28 | 27 | ||
| 29 | #endif /* __NET_TC_BPF_H */ | 28 | #endif /* __NET_TC_BPF_H */ |
diff --git a/include/net/tc_act/tc_connmark.h b/include/net/tc_act/tc_connmark.h index 02caa406611b..8a661135f4ac 100644 --- a/include/net/tc_act/tc_connmark.h +++ b/include/net/tc_act/tc_connmark.h | |||
| @@ -9,7 +9,6 @@ struct tcf_connmark_info { | |||
| 9 | u16 zone; | 9 | u16 zone; |
| 10 | }; | 10 | }; |
| 11 | 11 | ||
| 12 | #define to_connmark(a) \ | 12 | #define to_connmark(a) ((struct tcf_connmark_info *)a) |
| 13 | container_of(a->priv, struct tcf_connmark_info, common) | ||
| 14 | 13 | ||
| 15 | #endif /* __NET_TC_CONNMARK_H */ | 14 | #endif /* __NET_TC_CONNMARK_H */ |
diff --git a/include/net/tc_act/tc_csum.h b/include/net/tc_act/tc_csum.h index fa8f5fac65e9..1a9ef15d573b 100644 --- a/include/net/tc_act/tc_csum.h +++ b/include/net/tc_act/tc_csum.h | |||
| @@ -9,7 +9,6 @@ struct tcf_csum { | |||
| 9 | 9 | ||
| 10 | u32 update_flags; | 10 | u32 update_flags; |
| 11 | }; | 11 | }; |
| 12 | #define to_tcf_csum(a) \ | 12 | #define to_tcf_csum(a) ((struct tcf_csum *)a) |
| 13 | container_of(a->priv,struct tcf_csum,common) | ||
| 14 | 13 | ||
| 15 | #endif /* __NET_TC_CSUM_H */ | 14 | #endif /* __NET_TC_CSUM_H */ |
diff --git a/include/net/tc_act/tc_defact.h b/include/net/tc_act/tc_defact.h index ab9b5d6be67b..e25b4eb4fc66 100644 --- a/include/net/tc_act/tc_defact.h +++ b/include/net/tc_act/tc_defact.h | |||
| @@ -8,7 +8,6 @@ struct tcf_defact { | |||
| 8 | u32 tcfd_datalen; | 8 | u32 tcfd_datalen; |
| 9 | void *tcfd_defdata; | 9 | void *tcfd_defdata; |
| 10 | }; | 10 | }; |
| 11 | #define to_defact(a) \ | 11 | #define to_defact(a) ((struct tcf_defact *)a) |
| 12 | container_of(a->priv, struct tcf_defact, common) | ||
| 13 | 12 | ||
| 14 | #endif /* __NET_TC_DEF_H */ | 13 | #endif /* __NET_TC_DEF_H */ |
diff --git a/include/net/tc_act/tc_gact.h b/include/net/tc_act/tc_gact.h index 93c520b83d10..119cdb418c23 100644 --- a/include/net/tc_act/tc_gact.h +++ b/include/net/tc_act/tc_gact.h | |||
| @@ -13,8 +13,7 @@ struct tcf_gact { | |||
| 13 | atomic_t packets; | 13 | atomic_t packets; |
| 14 | #endif | 14 | #endif |
| 15 | }; | 15 | }; |
| 16 | #define to_gact(a) \ | 16 | #define to_gact(a) ((struct tcf_gact *)a) |
| 17 | container_of(a->priv, struct tcf_gact, common) | ||
| 18 | 17 | ||
| 19 | static inline bool is_tcf_gact_shot(const struct tc_action *a) | 18 | static inline bool is_tcf_gact_shot(const struct tc_action *a) |
| 20 | { | 19 | { |
| @@ -24,7 +23,7 @@ static inline bool is_tcf_gact_shot(const struct tc_action *a) | |||
| 24 | if (a->ops && a->ops->type != TCA_ACT_GACT) | 23 | if (a->ops && a->ops->type != TCA_ACT_GACT) |
| 25 | return false; | 24 | return false; |
| 26 | 25 | ||
| 27 | gact = a->priv; | 26 | gact = to_gact(a); |
| 28 | if (gact->tcf_action == TC_ACT_SHOT) | 27 | if (gact->tcf_action == TC_ACT_SHOT) |
| 29 | return true; | 28 | return true; |
| 30 | 29 | ||
diff --git a/include/net/tc_act/tc_ife.h b/include/net/tc_act/tc_ife.h index c55facd17b7e..7921abe42adc 100644 --- a/include/net/tc_act/tc_ife.h +++ b/include/net/tc_act/tc_ife.h | |||
| @@ -16,8 +16,7 @@ struct tcf_ife_info { | |||
| 16 | /* list of metaids allowed */ | 16 | /* list of metaids allowed */ |
| 17 | struct list_head metalist; | 17 | struct list_head metalist; |
| 18 | }; | 18 | }; |
| 19 | #define to_ife(a) \ | 19 | #define to_ife(a) ((struct tcf_ife_info *)a) |
| 20 | container_of(a->priv, struct tcf_ife_info, common) | ||
| 21 | 20 | ||
| 22 | struct tcf_meta_info { | 21 | struct tcf_meta_info { |
| 23 | const struct tcf_meta_ops *ops; | 22 | const struct tcf_meta_ops *ops; |
diff --git a/include/net/tc_act/tc_ipt.h b/include/net/tc_act/tc_ipt.h index c0f4193f432c..c22ae7ab66ed 100644 --- a/include/net/tc_act/tc_ipt.h +++ b/include/net/tc_act/tc_ipt.h | |||
| @@ -11,7 +11,6 @@ struct tcf_ipt { | |||
| 11 | char *tcfi_tname; | 11 | char *tcfi_tname; |
| 12 | struct xt_entry_target *tcfi_t; | 12 | struct xt_entry_target *tcfi_t; |
| 13 | }; | 13 | }; |
| 14 | #define to_ipt(a) \ | 14 | #define to_ipt(a) ((struct tcf_ipt *)a) |
| 15 | container_of(a->priv, struct tcf_ipt, common) | ||
| 16 | 15 | ||
| 17 | #endif /* __NET_TC_IPT_H */ | 16 | #endif /* __NET_TC_IPT_H */ |
diff --git a/include/net/tc_act/tc_mirred.h b/include/net/tc_act/tc_mirred.h index 6a13a7c74e0c..89aebd22cd79 100644 --- a/include/net/tc_act/tc_mirred.h +++ b/include/net/tc_act/tc_mirred.h | |||
| @@ -12,8 +12,7 @@ struct tcf_mirred { | |||
| 12 | struct net_device __rcu *tcfm_dev; | 12 | struct net_device __rcu *tcfm_dev; |
| 13 | struct list_head tcfm_list; | 13 | struct list_head tcfm_list; |
| 14 | }; | 14 | }; |
| 15 | #define to_mirred(a) \ | 15 | #define to_mirred(a) ((struct tcf_mirred *)a) |
| 16 | container_of(a->priv, struct tcf_mirred, common) | ||
| 17 | 16 | ||
| 18 | static inline bool is_tcf_mirred_redirect(const struct tc_action *a) | 17 | static inline bool is_tcf_mirred_redirect(const struct tc_action *a) |
| 19 | { | 18 | { |
diff --git a/include/net/tc_act/tc_nat.h b/include/net/tc_act/tc_nat.h index 63d8e9ca9d99..a91ad3ad565e 100644 --- a/include/net/tc_act/tc_nat.h +++ b/include/net/tc_act/tc_nat.h | |||
| @@ -13,9 +13,6 @@ struct tcf_nat { | |||
| 13 | u32 flags; | 13 | u32 flags; |
| 14 | }; | 14 | }; |
| 15 | 15 | ||
| 16 | static inline struct tcf_nat *to_tcf_nat(struct tc_action *a) | 16 | #define to_tcf_nat(a) ((struct tcf_nat *)a) |
| 17 | { | ||
| 18 | return container_of(a->priv, struct tcf_nat, common); | ||
| 19 | } | ||
| 20 | 17 | ||
| 21 | #endif /* __NET_TC_NAT_H */ | 18 | #endif /* __NET_TC_NAT_H */ |
diff --git a/include/net/tc_act/tc_pedit.h b/include/net/tc_act/tc_pedit.h index 5b80998879c7..2cccfbaae800 100644 --- a/include/net/tc_act/tc_pedit.h +++ b/include/net/tc_act/tc_pedit.h | |||
| @@ -9,7 +9,6 @@ struct tcf_pedit { | |||
| 9 | unsigned char tcfp_flags; | 9 | unsigned char tcfp_flags; |
| 10 | struct tc_pedit_key *tcfp_keys; | 10 | struct tc_pedit_key *tcfp_keys; |
| 11 | }; | 11 | }; |
| 12 | #define to_pedit(a) \ | 12 | #define to_pedit(a) ((struct tcf_pedit *)a) |
| 13 | container_of(a->priv, struct tcf_pedit, common) | ||
| 14 | 13 | ||
| 15 | #endif /* __NET_TC_PED_H */ | 14 | #endif /* __NET_TC_PED_H */ |
diff --git a/include/net/tc_act/tc_skbedit.h b/include/net/tc_act/tc_skbedit.h index d01a5d40cfb5..9e0548998327 100644 --- a/include/net/tc_act/tc_skbedit.h +++ b/include/net/tc_act/tc_skbedit.h | |||
| @@ -30,8 +30,7 @@ struct tcf_skbedit { | |||
| 30 | u16 queue_mapping; | 30 | u16 queue_mapping; |
| 31 | u16 ptype; | 31 | u16 ptype; |
| 32 | }; | 32 | }; |
| 33 | #define to_skbedit(a) \ | 33 | #define to_skbedit(a) ((struct tcf_skbedit *)a) |
| 34 | container_of(a->priv, struct tcf_skbedit, common) | ||
| 35 | 34 | ||
| 36 | /* Return true iff action is mark */ | 35 | /* Return true iff action is mark */ |
| 37 | static inline bool is_tcf_skbedit_mark(const struct tc_action *a) | 36 | static inline bool is_tcf_skbedit_mark(const struct tc_action *a) |
diff --git a/include/net/tc_act/tc_vlan.h b/include/net/tc_act/tc_vlan.h index 93b70ade1ff3..584b80788d52 100644 --- a/include/net/tc_act/tc_vlan.h +++ b/include/net/tc_act/tc_vlan.h | |||
| @@ -21,7 +21,6 @@ struct tcf_vlan { | |||
| 21 | u16 tcfv_push_vid; | 21 | u16 tcfv_push_vid; |
| 22 | __be16 tcfv_push_proto; | 22 | __be16 tcfv_push_proto; |
| 23 | }; | 23 | }; |
| 24 | #define to_vlan(a) \ | 24 | #define to_vlan(a) ((struct tcf_vlan *)a) |
| 25 | container_of(a->priv, struct tcf_vlan, common) | ||
| 26 | 25 | ||
| 27 | #endif /* __NET_TC_VLAN_H */ | 26 | #endif /* __NET_TC_VLAN_H */ |
