my hook function code, called at : unsigned int in_hook(unsigned int hooknum, struct sk_buff **skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *)) { print_string("Packet reached IN_HOOK."); struct iphdr *my_ipheader; //u32 this_address; if (out) { if(out->name) { print_string("out is: "); print_string(out->name); // compare the out device with the list of rules // TODO: replace by matches_rule() if (strcmp(out->name, "eth1") == 0) { print_string("packet matches rule"); if(skb == NULL) { return -1; } my_ipheader = skb->nh->iph; print_string("printk-ing saddr..."); //this_address = *my_ipheader->saddr; //printk("the ip is : %d.%d.%d.%d\n",NIPQUAD(*my_ipheader->saddr)); } } else { print_string("out is null"); } } return NF_QUEUE; /* Drop ALL packets */ } line 150 is my_ipheader = skb->nh->iph; on compile, I get this error: [root@whatever spider]# make -C /usr/src/kernels/`uname -r`-i686 SUBDIRS=$PWD modules make: Entering directory `/usr/src/kernels/2.6.12-1.1447_FC4-i686' CC [M] /home/jc/code/spider/spider.o /home/jc/code/spider/spider.c: In function 'in_hook': /home/jc/code/spider/spider.c:126: warning: ISO C90 forbids mixed declarations and code /home/jc/code/spider/spider.c:134: warning: passing argument 1 of 'print_string' discards qualifiers from pointer target type /home/jc/code/spider/spider.c:150: error: request for member 'nh' in something not a structure or union I've seen that statement being made more than a number of times, so what am I doing wrong?? I need to change the saddr (source address) in that if to another one (basicly, NATing it). How will I commit that change to the skb and then send it back into the stack? thanx in advance... John