When i compile i get this:
%> gcc -DMODVERSIONS -DMODULE -D__KERNEL__ -DEXPORT_SYMTAB -Wall -Wstrict-prototypes -O6 -c MyModule.c
MyModule1.c:41: macro `_basic_version' used with just one arg
line 41 is X(decide), in my symbol_table.
If I use a symbol that exists (like netif_rx) instead of decide, then I get it to compile but that is not what I want.
I run v. 2.0.33 on a i386
I will be grateful for any clues.
---------------module code------------------------
/* #define __KERNEL__ */
/* #define MODULE */
#include <asm/segment.h>
#include<linux/skbuff.h>
#include<linux/if_ether.h>
#include<linux/in.h>
#include <linux/ip.h>
#include <linux/icmp.h>
#include <linux/config.h>
#ifdef MODULE
#ifdef MODVERSIONS
#include <linux/modversions.h>
#endif
#include <linux/module.h>
#include <linux/version.h>
#else
#define MOD_INC_USE_COUNT
#define MOD_DEC_USE_COUNT
#endif
extern int printk(const char* fmt, ...);
int decide(struct sk_buff *skb) {
struct iphdr *iph = (struct iphdr *)skb->data;
if((ntohs(skb->mac.ethernet->h_proto) == ETH_P_IP)
&& (iph->protocol == IPPROTO_ICMP)) {
printk("Filtering!\n");
return 1;
}
return 0;
}
int init_module(void) {
static struct symbol_table decide_syms = {
#include <linux/symtab_begin.h>
X(decide), /*<<<<<This is the evil line */
#include <linux/symtab_end.h>
};
register_symtab(&decide_syms);
printk("My module is in!\n");
return 0;
}
void cleanup_module(void) {
printk("My module is out!\n");
return;
}
|