understanding how conntrack works

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Greetings all, I'm exploring the kernel source trying to understand better how 
the conntrack facility works. I had a couple of questions which I hope 
someone more familiar with the code can answer...

Q: Where in the code does a table entry get added to the conntrack table? 
nf_conntrack_put doesn't seem to contain much code related to that.

Q: Where in the code is the conntrack data lines being written, and using what 
mechanism? (kprintf? procfs?)

I did some ctags jumping and keep coming to the nf_conntrack_put function, 
which I expected to contain the code. Instead it only contains a

<pre>
// ip_conntrack.h:
static inline void
ip_conntrack_put(struct ip_conntrack *ct)
{
	IP_NF_ASSERT(ct);
	nf_conntrack_put(&ct->ct_general);
}

// skbuff.h:
#ifdef CONFIG_NETFILTER
static inline void nf_conntrack_put(struct nf_conntrack *nfct)
{
	if (nfct && atomic_dec_and_test(&nfct->use))
		nfct->destroy(nfct);
}
</pre>

The "destroy" call is an indirect function call, which appears to be a call 
(most of the time) to nf_conntrack_core.c:541
<pre>
static void destroy_conntrack(struct nf_conntrack *nfct)
</pre>

I hope the table updating and kprintf lines are not embedded within the 
destroy code?

Q: What is "master"?

It seems that conntrack data has a concept called "master". When a connection 
is "destroyed", a call to the "master" destroy is also made. What is the 
relationship between the nf_conntrack and the master of an nf_conntrack 
(appears to be a tree or a linked list). It seems to be an ownership 
relationship.




[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux