泽畔无材 发表于 2014-05-12 12:54

netlink通信,内核收不到用户态消息

今天在调内核态和用户态的通信,参考的是http://www.ibm.com/developerworks/cn/linux/l-netlink/ 里的代码,使用netlink通信。
我用的是linux 3.10.xx版本,和上面文章用的版本可能相差了很多,很多接口函数都不一样,修改一番后,大致如下:
内核先nlfd = netlink_kernel_create(&init_net, NL_SENDINFO, &_cfg);
在kernel_receive里接收用户态数据。
用户态:
skfd = socket(PF_NETLINK, SOCK_RAW, NL_SENDINFO);//创建socket
bind(skfd, (struct sockaddr*)&local, sizeof(local))//绑定地址
sendto(skfd, &message, message.hdr.nlmsg_len, 0,(struct sockaddr*)&kpeer, sizeof(kpeer));//向内核发送数据(自己的pid)

但是编译运行的结果是:
运行用户态程序后,内核的确进入了对应的kernel_receive函数,
但是,在while((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL)这里直接跳出。
不清楚为什么既然进了接收函数,但是取数据时候为空?
请问大婶们这可能是哪里出问题了呢?

泽畔无材 发表于 2014-05-12 14:15

不好意思,是因为没有把内核的接收函数改回来。。
内核2.6.32之前是static void kernel_receive(struct sock *sk, int len)
之后的版本就是static void kernel_receive(struct sk_buff *skb)了。。。
感觉netlink的接口变得好快。。
页: [1]
查看完整版本: netlink通信,内核收不到用户态消息