我正在尝试编写一个类似于ping的模块。接收数据包的问题就出现了。代码如下所示:
#include<asm/uaccess.h>
#include<linux/sched.h>
#include<linux/wait.h>
#include<linux/netfilter.h>
#include<linux/netfilter_ipv4.h>
struct net_device *dev;
struct sk_buff *skb;
struct napi_struct *rnapi;
int rrpoll(struct napi_struct *napi,int budget)
{
printk(KERN_ALERT"we are HEARRR%s,%d\n",__func__,__LINE__);
skb = (struct sk_buff *)kmalloc(sizeof(struct sk_buff *),GFP_KERNEL);
netif_receive_skb(skb);
kfree(skb);
return 0;
}
static int rec_init(void)
{
dev = __dev_get_by_name(&init_net,"wlan0");
rnapi = (struct napi_struct *)kmalloc(sizeof(struct napi_struct *),GFP_KERNEL);
netif_napi_add(dev,rnapi,&rrpoll,100);
napi_schedule(rnapi);
return 0;
}
static void rec_exit(void)
{
//napi_complete(rnapi);
netif_napi_del(rnapi);
}
模块编译并运行时没有任何错误,但整个系统会在一段时间后挂起。
答案 0 :(得分:2)
我发现您的示例代码存在一些问题:
迈克尔