Thread (6 messages) 6 messages, 4 authors, 2012-05-22

Why I can't compile a simple netfilter hook module?

From: Dexter <hidden>
Date: 2012-05-08 13:40:44

On Tue, 2012-05-08 at 09:49 +0530, rohan puri wrote:

On Tue, May 8, 2012 at 9:37 AM, Chir0n [off-list ref] wrote:
        I'm using this Makefile:
        
        obj-m += hello.o
        
        all:
               make -C /lib/modules/$(shell uname -r)/build M=$(PWD)
        modules
        
        clean:
               make -C /lib/modules/$(shell uname -r)/build M=$(PWD)
        clean
        
        
        The hello.c is this:
        
        #include <linux/kernel.h>
        #include <linux/module.h>
        #include <linux/netfilter.h>
        #include <linux/netfilter_ipv4.h>
        
        static struct nf_hook_ops nfho;         //struct holding set
        of hook function options
        
        //function to be called by hook
        unsigned int hook_func(unsigned int hooknum, struct sk_buff
        **skb, const struct net_device *in, const struct net_device
        *out, int (*okfn)(struct sk_buff *))
        {
         printk(KERN_INFO "packet dropped\n");
                              //log to var/log/messages
         return NF_DROP;
                              //drops the packet
        }
        
        //Called when module loaded using 'insmod'
        int init_module()
        {
         nfho.hook = hook_func;                       //function to
        call when conditions below met
         nfho.hooknum = NF_IP_PRE_ROUTING;            //called right
        after packet recieved, first hook in Netfilter
         nfho.pf = PF_INET;                           //IPV4 packets
         nfho.priority = NF_IP_PRI_FIRST;             //set to highest
        priority over all other hook functions
         nf_register_hook(&nfho);                     //register hook
        
         return 0;                                    //return 0 for
        success
        }
        
        //Called when module unloaded using 'rmmod'
        void cleanup_module()
        {
         nf_unregister_hook(&nfho);                     //cleanup ?
        unregister hook
        }
        
        
        Here are the error message:
        
        $ make
        make -C /lib/modules/3.3.2-6.fc16.x86_64/build
        M=/home/fabio/Desktop/modules modules
        make[1]: Entering directory
        `/usr/src/kernels/3.3.2-6.fc16.x86_64'
         CC [M]  /home/fabio/Desktop/modules/hello.o
        /home/fabio/Desktop/modules/hello.c: In function
        ?init_module?:
        /home/fabio/Desktop/modules/hello.c:18:13: warning: assignment
        from incompatible pointer type [enabled by default]
        /home/fabio/Desktop/modules/hello.c:19:18: error:
        ?NF_IP_PRE_ROUTING? undeclared (first use in this function)
        /home/fabio/Desktop/modules/hello.c:19:18: note: each
        undeclared identifier is reported only once for each function
        it appears in
        make[2]: *** [/home/fabio/Desktop/modules/hello.o] Error 1
        make[1]: *** [_module_/home/fabio/Desktop/modules] Error 2
        make[1]: Leaving directory
        `/usr/src/kernels/3.3.2-6.fc16.x86_64'
        make: *** [all] Error 2
        
        _______________________________________________
        Kernelnewbies mailing list
        Kernelnewbies at kernelnewbies.org
        http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
        
Hi,


You need to include header which defines "NF_IP_PRE_ROUTING"


- Rohan

Hi,

But I have declared this header:

#include <linux/netfilter_ipv4.h>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help