I try to develop driver that has to catch all incomming traffic and proceed
it.
I use register_firewall() function that registers three functions:
in_check, out_check, forward_check.
There is call to register_firewall in my driver's init_module().
So, in in_check() I receive packet and give it to my processing function
Parse() that makes decision
regarding to the packet:
- to let it in and calls to ip_rcv(skb, skb->dev, NULL);
- to block it.
Always in_check returns FW_BLOCK.
The problem is when I call to ip_rcv() my computer is hanged up. All I see
is printing log after
function Parse().
Below is cut of my source.
int Parse(struct sk_buff * skb)
{
[ packet analyze ]
if ( packet may enter ) return ip_rcv(skb, skb->dev, NULL);
else
{
kfree_skb(skb);
return BLOCKED;
}
}
int in_check(struct firewall_ops *this, int pf, struct device *dev,
void *phdr, void *arg, struct sk_buff **pskb)
{
int res;
ip_statistics.IpInReceives--;
res = Parse(*pskb);
printk(...);
if(res == BLOCKED)
{
[ something ]
}
return FW_BLOCK;
}
What ip_rcv() has to return? Do I do everything right? Is there maybe
common way to perform such a trik?
Thanks a lot.
Andrey
******************************* IMPORTANT ! **********************************
The content of this email and any attachments are confidential and intended
for the named recipient(s) only.
If you have received this email in error please notify the sender immediately.
Do not disclose the content of this message or make copies.
This email was scanned by eSafe Mail for viruses, vandals and other
malicious content.
******************************************************************************
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/