diff options
author | Florian Westphal <fw@strlen.de> | 2016-04-11 15:52:36 -0400 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-04-12 17:01:57 -0400 |
commit | ecdfb48cddfd1096343148113d5b1bd789033aa8 (patch) | |
tree | ebbc8cd73a58be060c0d8640c3963a076636793e | |
parent | 3c435e2e414e82ec6c0e96a1dfc2be3ddc3c23b4 (diff) |
netfilter: conntrack: move expectation event helper to ecache.c
Not performance critical, it is only invoked when an expectation is
added/destroyed.
While at it, kill unused nf_ct_expect_event() wrapper.
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | include/net/netfilter/nf_conntrack_ecache.h | 42 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_ecache.c | 30 |
2 files changed, 33 insertions, 39 deletions
diff --git a/include/net/netfilter/nf_conntrack_ecache.h b/include/net/netfilter/nf_conntrack_ecache.h index 019a5b859868..fa36447371c6 100644 --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h | |||
@@ -130,43 +130,9 @@ int nf_ct_expect_register_notifier(struct net *net, | |||
130 | void nf_ct_expect_unregister_notifier(struct net *net, | 130 | void nf_ct_expect_unregister_notifier(struct net *net, |
131 | struct nf_exp_event_notifier *nb); | 131 | struct nf_exp_event_notifier *nb); |
132 | 132 | ||
133 | static inline void | 133 | void nf_ct_expect_event_report(enum ip_conntrack_expect_events event, |
134 | nf_ct_expect_event_report(enum ip_conntrack_expect_events event, | 134 | struct nf_conntrack_expect *exp, |
135 | struct nf_conntrack_expect *exp, | 135 | u32 portid, int report); |
136 | u32 portid, | ||
137 | int report) | ||
138 | { | ||
139 | struct net *net = nf_ct_exp_net(exp); | ||
140 | struct nf_exp_event_notifier *notify; | ||
141 | struct nf_conntrack_ecache *e; | ||
142 | |||
143 | rcu_read_lock(); | ||
144 | notify = rcu_dereference(net->ct.nf_expect_event_cb); | ||
145 | if (notify == NULL) | ||
146 | goto out_unlock; | ||
147 | |||
148 | e = nf_ct_ecache_find(exp->master); | ||
149 | if (e == NULL) | ||
150 | goto out_unlock; | ||
151 | |||
152 | if (e->expmask & (1 << event)) { | ||
153 | struct nf_exp_event item = { | ||
154 | .exp = exp, | ||
155 | .portid = portid, | ||
156 | .report = report | ||
157 | }; | ||
158 | notify->fcn(1 << event, &item); | ||
159 | } | ||
160 | out_unlock: | ||
161 | rcu_read_unlock(); | ||
162 | } | ||
163 | |||
164 | static inline void | ||
165 | nf_ct_expect_event(enum ip_conntrack_expect_events event, | ||
166 | struct nf_conntrack_expect *exp) | ||
167 | { | ||
168 | nf_ct_expect_event_report(event, exp, 0, 0); | ||
169 | } | ||
170 | 136 | ||
171 | int nf_conntrack_ecache_pernet_init(struct net *net); | 137 | int nf_conntrack_ecache_pernet_init(struct net *net); |
172 | void nf_conntrack_ecache_pernet_fini(struct net *net); | 138 | void nf_conntrack_ecache_pernet_fini(struct net *net); |
@@ -203,8 +169,6 @@ static inline int nf_conntrack_event_report(enum ip_conntrack_events event, | |||
203 | u32 portid, | 169 | u32 portid, |
204 | int report) { return 0; } | 170 | int report) { return 0; } |
205 | static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {} | 171 | static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {} |
206 | static inline void nf_ct_expect_event(enum ip_conntrack_expect_events event, | ||
207 | struct nf_conntrack_expect *exp) {} | ||
208 | static inline void nf_ct_expect_event_report(enum ip_conntrack_expect_events e, | 172 | static inline void nf_ct_expect_event_report(enum ip_conntrack_expect_events e, |
209 | struct nf_conntrack_expect *exp, | 173 | struct nf_conntrack_expect *exp, |
210 | u32 portid, | 174 | u32 portid, |
diff --git a/net/netfilter/nf_conntrack_ecache.c b/net/netfilter/nf_conntrack_ecache.c index a0ebab96a92f..d28011b42845 100644 --- a/net/netfilter/nf_conntrack_ecache.c +++ b/net/netfilter/nf_conntrack_ecache.c | |||
@@ -221,6 +221,36 @@ out_unlock: | |||
221 | } | 221 | } |
222 | EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events); | 222 | EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events); |
223 | 223 | ||
224 | void nf_ct_expect_event_report(enum ip_conntrack_expect_events event, | ||
225 | struct nf_conntrack_expect *exp, | ||
226 | u32 portid, int report) | ||
227 | |||
228 | { | ||
229 | struct net *net = nf_ct_exp_net(exp); | ||
230 | struct nf_exp_event_notifier *notify; | ||
231 | struct nf_conntrack_ecache *e; | ||
232 | |||
233 | rcu_read_lock(); | ||
234 | notify = rcu_dereference(net->ct.nf_expect_event_cb); | ||
235 | if (!notify) | ||
236 | goto out_unlock; | ||
237 | |||
238 | e = nf_ct_ecache_find(exp->master); | ||
239 | if (!e) | ||
240 | goto out_unlock; | ||
241 | |||
242 | if (e->expmask & (1 << event)) { | ||
243 | struct nf_exp_event item = { | ||
244 | .exp = exp, | ||
245 | .portid = portid, | ||
246 | .report = report | ||
247 | }; | ||
248 | notify->fcn(1 << event, &item); | ||
249 | } | ||
250 | out_unlock: | ||
251 | rcu_read_unlock(); | ||
252 | } | ||
253 | |||
224 | int nf_conntrack_register_notifier(struct net *net, | 254 | int nf_conntrack_register_notifier(struct net *net, |
225 | struct nf_ct_event_notifier *new) | 255 | struct nf_ct_event_notifier *new) |
226 | { | 256 | { |