Linux 中与内核通信的Netlink 机制 Netlink 在2
6 版本的内核中变化也是很大的,在最新的2
37 内核中,其定义已经改成下面这种形式,传递的参数已经达到6 个
其中第一个参数和 mu tex 参数都是最新添加的
Mu tex也可以为空
这里主要是关于内核空间中的netlink 函数的使用
ex tern stru ct sock *netlink_kernel_create(stru ct net *net, int u nit,u nsigned int grou ps, v oid (*inpu t)(stru ct sk_bu ff *skb), stru ct mu tex *cb_mu tex , stru ct modu le *modu le); stru ct net 是一个网络名字空间 namespace,在不同的名字空间里面可以有自己的转发信息库,有自己的一套 net_dev ice 等等
默认情况下都是使用 init_net 这个全局变量,下面是内核中调用 netlink_kernel_create()函数的一个示例
在内核中, au dit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, 0, au dit_receiv e, NULL, THIS_MODULE); 模块调用函数 netlink_u nicast 来发送单播消息: int netlink_u nicast(stru ct sock *ssk, stru ct sk_bu ff *skb, u 32 pid, int nonblock) 参数ssk 为函数 netlink_kernel_create()返回的socket,参数skb 存放消息,它的data 字段指向要发送的netlink 消息结