I have tried to compile the following netfilter
hook (found in one of the documents listed in the documentation area at www.netfilter.org) and I just can't make
it.
Here's how I tried to compile it:
gcc -c -I/lib/modules/`uname -r`/build/include
./netmod.c -Wall
Here's the error I got:
In file included from
./netfmod.c:4:
/lib/modules/2.4.18-4GB/build/include/linux/netfilter_ipv4.h:53:
`INT_MIN' undeclared here (not in a
function)
/lib/modules/2.4.18-4GB/build/include/linux/netfilter_ipv4.h:53:
enumerator value for `NF_IP_PRI_FIRST' not integer
constant
/lib/modules/2.4.18-4GB/build/include/linux/netfilter_ipv4.h:59:
`INT_MAX' undeclared here (not in a
function)
/lib/modules/2.4.18-4GB/build/include/linux/netfilter_ipv4.h:59:
enumerator value for `NF_IP_PRI_LAST' not integer constant
./netfmod.c:12:
warning: `struct net_device' declared inside parameter list
./netfmod.c:12:
warning: its scope is only this definition or declaration, which is probably not
what you want.
./netfmod.c:12: warning: `struct sk_buff' declared inside
parameter list
./netfmod.c: In function `stupid_hook':
./netfmod.c:14:
dereferencing pointer to incomplete type
./netfmod.c: At top
level:
./netfmod.c:21: variable `stupid_ops' has initializer but incomplete
type
./netfmod.c:21: extra brace group at end of
initializer
./netfmod.c:21: (near initialization for
`stupid_ops')
./netfmod.c:21: `NULL' undeclared here (not in a
function)
./netfmod.c:21: `NULL' undeclared here (not in a
function)
./netfmod.c:21: warning: excess elements in struct
initializer
./netfmod.c:21: warning: (near initialization for
`stupid_ops')
./netfmod.c:21: warning: excess elements in struct
initializer
./netfmod.c:21: warning: (near initialization for
`stupid_ops')
./netfmod.c:21: `PF_INET' undeclared here (not in a
function)
./netfmod.c:21: warning: excess elements in struct
initializer
./netfmod.c:21: warning: (near initialization for
`stupid_ops')
./netfmod.c:21: warning: excess elements in struct
initializer
./netfmod.c:21: warning: (near initialization for
`stupid_ops')
./netfmod.c:21: warning: excess elements in struct
initializer
./netfmod.c:21: warning: (near initialization for
`stupid_ops')
./netfmod.c:23: parse error before `init'
./netfmod.c:24:
warning: return-type defaults to `int'
./netfmod.c: In function
`init':
./netfmod.c:25: warning: implicit declaration of function
`nf_register_hook'
./netfmod.c: At top level:
./netfmod.c:28: parse error
before `fini'
./netfmod.c:29: warning: return-type defaults to
`int'
./netfmod.c: In function `fini':
./netfmod.c:30: warning: implicit
declaration of function `nf_unregister_hook'
./netfmod.c:30: `linuxmag_ops'
undeclared (first use in this function)
./netfmod.c:30: (Each undeclared
identifier is reported only once
./netfmod.c:30: for each function it appears
in.)
./netfmod.c:31: warning: control reaches end of non-void
function
./netfmod.c: At top level:
./netfmod.c:33: warning: type defaults
to `int' in declaration of `module_init'
./netfmod.c:33: warning: parameter
names (without types) in function declaration
./netfmod.c:33: warning: data
definition has no type or storage class
./netfmod.c:34: warning: type
defaults to `int' in declaration of `module_exit'
./netfmod.c:34: warning:
parameter names (without types) in function declaration
./netfmod.c:34:
warning: data definition has no type or storage class
Here is the code in netmod.c:
/* Rusty's Dumb netfilter hook example */
#include
<linux/config.h>
#include <linux/module.h>
#include
<linux/netfilter_ipv4.h>
#include <linux/ip.h>
/* The work
comes in here from netfilter.c. */
static unsigned
int
stupid_hook(unsigned int
hook,
struct
sk_buff **pskb,
const struct net_device
*indev,
const
struct net_device
*outdev,
int
(*okfn)(struct sk_buff *))
{
if
((*pskb)->len ==
200)
return NF_DROP;
return
NF_ACCEPT;
}
static struct nf_hook_ops stupid_ops
= { { NULL, NULL
}, stupid_hook, PF_INET, NF_IP_POST_ROUTING, 0 };
static int __init
init(void)
{
return
nf_register_hook(&stupid_ops);
}
static void __exit
fini(void)
{
nf_unregister_hook(&linuxmag_ops);
}
module_init(init);
module_exit(fini);
I run a SuSE 8.0 Linux, kernel version 2.4.18, gcc
version 2.95.3.
Please help with this as I need it for a school
project and I can't get to actually doing what I have to do because I just can't
make this work.
Thanks.
Bogdan.