2007年5月2日 星期三

destroy_conntrack 的call 法

destroy_conntrack 的call 法如下
net/ipv4/netfilter/ip_conntrack_core.c
inline void
ip_conntrack_put(struct ip_conntrack *ct)
{
IP_NF_ASSERT(ct);
nf_conntrack_put(&ct->ct_general);
}
include/linux/skbuff.h
static inline void nf_conntrack_put(struct nf_conntrack *nfct)
{
if (nfct && atomic_dec_and_test(&nfct->use))
nfct->destroy(nfct);
}
因為在 init_conntrack 時, 有做 use 的atomic set 動作, 所以必須call ip_conntrack_put 來
作 decrease use 的動作
net/ipv4/netfilter/ip_conntrack_core.c
init_conntrack(const struct ip_conntrack_tuple *tuple,
struct ip_conntrack_protocol *protocol,
struct sk_buff *skb) {
..
[略]
atomic_set(&conntrack->ct_general.use, 1);
conntrack->ct_general.destroy = destroy_conntrack;

沒有留言: