I am writing a
simple loadable module which will a register a function in NF_IP_LOCAL_IN
hook .But observed different behavior in 2.4 and 2.6
kernel.
a> in 2.4 kernel,
my function gets the assembled packet (in case of
fragmentation).
static struct
nf_hook_ops test_forwarder
= { { NULL, NULL }, callback_forwarder, PF_INET, NF_IP_LOCAL_IN, NF_IP_PRI_FILTER };
= { { NULL, NULL }, callback_forwarder, PF_INET, NF_IP_LOCAL_IN, NF_IP_PRI_FILTER };
This is working fine .i got the assembled packet in function callback_forwarder(in case of fragmentation).
b> in 2.6 kernel,
my function gets the un-assembled packets (in case of
fragmentation).
static struct
nf_hook_ops test_forwarder = {
.hook = callback_forwarder,
.owner = THIS_MODULE,
.pf = PF_INET,
.hooknum = NF_IP_LOCAL_IN,
.priority = NF_IP_PRI_FILTER, };
This is not working, because i got the unassembled packet here. though udp length shows 1508.but i am getting only 1400 bytes of valid data, rest 108 bytes are something garbage.that i cross check with ethereal.
(I prints in a for loop like skb-data+20 to skb->data[1528])
.hook = callback_forwarder,
.owner = THIS_MODULE,
.pf = PF_INET,
.hooknum = NF_IP_LOCAL_IN,
.priority = NF_IP_PRI_FILTER, };
This is not working, because i got the unassembled packet here. though udp length shows 1508.but i am getting only 1400 bytes of valid data, rest 108 bytes are something garbage.that i cross check with ethereal.
(I prints in a for loop like skb-data+20 to skb->data[1528])
I am not able to understand the behavior and struggled to resolve this issue for last 1 week .
Can anybody help me on this regard ?
Regards,
kanhu