代码: 全选
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/timer.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <asm/atomic.h>
#include <asm/semaphore.h>
#include <asm/io.h>
#include <asm/system.h>
#include <linux/string.h>
#include <linux/fs.h>
#include <linux/jiffies.h>
#include <linux/init.h>
#include <linux/net.h>
#include <linux/types.h>
#include <linux/skbuff.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netdevice.h>
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <linux/version.h>
#include <net/udp.h>
#include <net/tcp.h>
#include <net/icmp.h>
spinlock_t mylock;
static int i = 1;
int lock_flags;
static unsigned int
lock_mylock(unsigned int hook,
struct sk_buff **pskb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
{
if(0==i%10)
{
//i++;
printk(KERN_EMERG"lock_mylock : i is %d\n", i);
}
if(0 != spin_trylock(&mylock))
{
spin_unlock(&mylock);
printk(KERN_EMERG"hook locked success: i is %d\n", i);
}
else
{
printk(KERN_EMERG"hook locked failed: i is %d\n", i);
}
i++;
return 0;
}
static struct nf_hook_ops mylock_ops =
{
.hook = lock_mylock,
.owner = THIS_MODULE,
.pf = PF_INET,
.hooknum = NF_IP_PRE_ROUTING,//NF_IP_FORWARD,
.priority = NF_IP_PRI_FIRST,//NF_IP_PRI_FILTER-2,
};
int test_mod_init(void)
{
int ret;
printk("test_mod_init : start\n");
mylock = SPIN_LOCK_UNLOCKED;
lock_flags =1;
spin_lock(&mylock);
ret = nf_register_hook(&mylock_ops);
if (ret < 0)
{
printk("filter_ops ERROR\n");
return ret;
}
spin_unlock(&mylock);
printk("test_mod_init : stop\n");
return 0;
}
void test_mod_exit(void)
{
nf_unregister_hook(&mylock_ops);
}
module_init(test_mod_init);
module_exit(test_mod_exit);
//------------------------------------
//Makefile
MODULE_NAME :=lock_mod
RESMAN_CORE_OBJS :=mod.o
$(MODULE_NAME)-objs := $(RESMAN_CORE_OBJS)
obj-m :=$(MODULE_NAME).o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
#mv ./rule.ko ../../../bin/
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
rm -f ./Module.symvers *~
呜呜呜。。。