如何在内核和用户空间之间创建“netlink”?

我想使用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消息的函数.

上一篇:详解Linux用户态与内核态通信的几种方式


下一篇:获取Linux的/ bin / ss工具的源代码