Re: Netfiltering - NF_IP_LOCAL_OUT - how it works???
From: Vishwas Raman
Date: Thu Aug 21 2003 - 11:49:21 EST
Harald Welte wrote:
Hi Vishwas, sorry for the late reply. Most netfilter developers have
been to the netfilter developer workshop, I guess.
you should ask this question on the netfilter-devel mailinglist, where
it is more on-topic than on lkml.
On Thu, Aug 14, 2003 at 03:06:26PM -0700, Vishwas Raman wrote:
While initializing the module, I register a NF_IP_LOCAL_OUT hook for the
outgoing packet and change skb->dst->output to my_ip_output() instead of
ip_output() in that hook function. After loading the module, I see
control being transferred to my_ip_output() for all outgoing packets
which in turn calls ip_output() and everything seems to work well.
The exit function of the module also unregisters the hook that I am using.
The problem is that after I unload the module, which in turn unregisters
the hook, I have a kernel panic happening each time I use TCP.
The panic occurs at the following point, ip_build_and_send_pkt() in
ip_output.c where it is trying to call
NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
output_maybe_reroute);
I thought once the unregistering of the hook is done, it no longer looks
for that hook function. I have no idea why it is failing. May be I am
doing something grossly wrong with netfiltering. Anyone who is familiar
with netfiltering and has registered and unregistered hooks before might
be able to guide me regarding this.
I think either you are doing something wrong while unregistering from
the netfilter hook - or you are running into a race condition. It might
happen, that you assign the skb->dst->output function of a packet to
your function, and then you remove the module before that packet is
actually sent.
Actually I did solve the problem. All I had to do was reset
skb->dst->output() to ip_output() in my_ip_output() which is defined in
my module. The problem was that even after my module was unloaded the
destination cache was still pointing to my_ip_output() which was
non-existent...
Thanks,
-Vishwas.
-Vishwas.
--
--
Vishwas Raman
Software Engineer, Eternal Systems, Inc,
5290 Overpass Rd, Bldg D, Santa Barbara. CA 93111
Email: vishwas@xxxxxxxxxxxxxxxxxxx
Tel: (805) 696-9051 x246
Fax: (805) 696-9083
URL: http://www.eternal-systems.com/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/