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>
This commit is contained in:
Родитель
3c435e2e41
Коммит
ecdfb48cdd
|
@ -130,43 +130,9 @@ int nf_ct_expect_register_notifier(struct net *net,
|
||||||
void nf_ct_expect_unregister_notifier(struct net *net,
|
void nf_ct_expect_unregister_notifier(struct net *net,
|
||||||
struct nf_exp_event_notifier *nb);
|
struct nf_exp_event_notifier *nb);
|
||||||
|
|
||||||
static inline void
|
void nf_ct_expect_event_report(enum ip_conntrack_expect_events event,
|
||||||
nf_ct_expect_event_report(enum ip_conntrack_expect_events event,
|
struct nf_conntrack_expect *exp,
|
||||||
struct nf_conntrack_expect *exp,
|
u32 portid, int report);
|
||||||
u32 portid,
|
|
||||||
int report)
|
|
||||||
{
|
|
||||||
struct net *net = nf_ct_exp_net(exp);
|
|
||||||
struct nf_exp_event_notifier *notify;
|
|
||||||
struct nf_conntrack_ecache *e;
|
|
||||||
|
|
||||||
rcu_read_lock();
|
|
||||||
notify = rcu_dereference(net->ct.nf_expect_event_cb);
|
|
||||||
if (notify == NULL)
|
|
||||||
goto out_unlock;
|
|
||||||
|
|
||||||
e = nf_ct_ecache_find(exp->master);
|
|
||||||
if (e == NULL)
|
|
||||||
goto out_unlock;
|
|
||||||
|
|
||||||
if (e->expmask & (1 << event)) {
|
|
||||||
struct nf_exp_event item = {
|
|
||||||
.exp = exp,
|
|
||||||
.portid = portid,
|
|
||||||
.report = report
|
|
||||||
};
|
|
||||||
notify->fcn(1 << event, &item);
|
|
||||||
}
|
|
||||||
out_unlock:
|
|
||||||
rcu_read_unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
nf_ct_expect_event(enum ip_conntrack_expect_events event,
|
|
||||||
struct nf_conntrack_expect *exp)
|
|
||||||
{
|
|
||||||
nf_ct_expect_event_report(event, exp, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int nf_conntrack_ecache_pernet_init(struct net *net);
|
int nf_conntrack_ecache_pernet_init(struct net *net);
|
||||||
void nf_conntrack_ecache_pernet_fini(struct net *net);
|
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,
|
||||||
u32 portid,
|
u32 portid,
|
||||||
int report) { return 0; }
|
int report) { return 0; }
|
||||||
static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {}
|
static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {}
|
||||||
static inline void nf_ct_expect_event(enum ip_conntrack_expect_events event,
|
|
||||||
struct nf_conntrack_expect *exp) {}
|
|
||||||
static inline void nf_ct_expect_event_report(enum ip_conntrack_expect_events e,
|
static inline void nf_ct_expect_event_report(enum ip_conntrack_expect_events e,
|
||||||
struct nf_conntrack_expect *exp,
|
struct nf_conntrack_expect *exp,
|
||||||
u32 portid,
|
u32 portid,
|
||||||
|
|
|
@ -221,6 +221,36 @@ out_unlock:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events);
|
EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events);
|
||||||
|
|
||||||
|
void nf_ct_expect_event_report(enum ip_conntrack_expect_events event,
|
||||||
|
struct nf_conntrack_expect *exp,
|
||||||
|
u32 portid, int report)
|
||||||
|
|
||||||
|
{
|
||||||
|
struct net *net = nf_ct_exp_net(exp);
|
||||||
|
struct nf_exp_event_notifier *notify;
|
||||||
|
struct nf_conntrack_ecache *e;
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
|
notify = rcu_dereference(net->ct.nf_expect_event_cb);
|
||||||
|
if (!notify)
|
||||||
|
goto out_unlock;
|
||||||
|
|
||||||
|
e = nf_ct_ecache_find(exp->master);
|
||||||
|
if (!e)
|
||||||
|
goto out_unlock;
|
||||||
|
|
||||||
|
if (e->expmask & (1 << event)) {
|
||||||
|
struct nf_exp_event item = {
|
||||||
|
.exp = exp,
|
||||||
|
.portid = portid,
|
||||||
|
.report = report
|
||||||
|
};
|
||||||
|
notify->fcn(1 << event, &item);
|
||||||
|
}
|
||||||
|
out_unlock:
|
||||||
|
rcu_read_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
int nf_conntrack_register_notifier(struct net *net,
|
int nf_conntrack_register_notifier(struct net *net,
|
||||||
struct nf_ct_event_notifier *new)
|
struct nf_ct_event_notifier *new)
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче