aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2016-04-11 15:52:36 -0400
committerPablo Neira Ayuso <pablo@netfilter.org>2016-04-12 17:01:57 -0400
commitecdfb48cddfd1096343148113d5b1bd789033aa8 (patch)
treeebbc8cd73a58be060c0d8640c3963a076636793e
parent3c435e2e414e82ec6c0e96a1dfc2be3ddc3c23b4 (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.h42
-rw-r--r--net/netfilter/nf_conntrack_ecache.c30
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,
130void nf_ct_expect_unregister_notifier(struct net *net, 130void nf_ct_expect_unregister_notifier(struct net *net,
131 struct nf_exp_event_notifier *nb); 131 struct nf_exp_event_notifier *nb);
132 132
133static inline void 133void nf_ct_expect_event_report(enum ip_conntrack_expect_events event,
134nf_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 }
160out_unlock:
161 rcu_read_unlock();
162}
163
164static inline void
165nf_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
171int nf_conntrack_ecache_pernet_init(struct net *net); 137int nf_conntrack_ecache_pernet_init(struct net *net);
172void nf_conntrack_ecache_pernet_fini(struct net *net); 138void 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; }
205static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {} 171static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {}
206static inline void nf_ct_expect_event(enum ip_conntrack_expect_events event,
207 struct nf_conntrack_expect *exp) {}
208static inline void nf_ct_expect_event_report(enum ip_conntrack_expect_events e, 172static 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}
222EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events); 222EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events);
223 223
224void 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 }
250out_unlock:
251 rcu_read_unlock();
252}
253
224int nf_conntrack_register_notifier(struct net *net, 254int nf_conntrack_register_notifier(struct net *net,
225 struct nf_ct_event_notifier *new) 255 struct nf_ct_event_notifier *new)
226{ 256{