我想使用netlink在应用程序和内核空间之间进行通信.我的Linux内核版本是2.6.28,以下是我的错误代码:
nf_sock=netlink_kernel_create(NL_PROTO,0,nl_user_skb,THIS_MODULE);
缩写错误消息是:
error: too few arguments to function 'netlink_kernel_create'
在文件< linux / netlink.h>中,函数netlink_kernel_create()定义为
extern struct sock *netlink_kernel_create(struct net *net,int unit,unsigned int groups,void (*input)(struct sk_buff *skb),struct mutex *cb_mutex,struct module *module)
我不明白第一个参数net用什么.谁能解释一下我应该在这里使用什么?
解决方法:
struct net包含有关网络命名空间的信息,网络命名空间是一组可用于进程的网络资源.请注意,可能有多个网络命名空间(即网络堆栈的多个实例),但大多数驱动程序使用init_net命名空间.
您的电话应该看起来像下面这样
nf_sock = netlink_kernel_create(&init_net,
NETLINK_USERSOCK,
0,
nl_rcv_func,
NULL,
THIS_MODULE);
其中nl_rcv_func是一个以struct sk_buff * skb为唯一参数并处理收到的netlink消息的函数.