netlink 是一种基于网络的通信机制,允许在内核内部以及内核与用户层之间进行通信,其正式定义见RFC3549
netlink 相对于 procfs 或 sysfs 具有以下优势:
1.不需要轮询。
2. 简单、容易实现。
3. 内核可以直接向用户层发送信息,而无需用户层事先请求。
netlink 只支持数据报信息,但提供了双向通信。此外,netlink 不仅支持单播信息,也可以进行多播。类似于其他socket机制,netlink的工作方式是异步的。
审计子系统代码: kernle/audit.c
/* Initialize audit support at boot time. */
static int __init audit_init(void)
{
int i;
if (audit_initialized == AUDIT_DISABLED)
return 0;
printk(KERN_INFO "audit: initializing netlink socket (%s)\n",
audit_default ? "enabled" : "disabled");
audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, 0,
audit_receive, NULL, THIS_MODULE);
if (!audit_sock)
audit_panic("cannot initialize netlink socket");
else
audit_sock->sk_sndtimeo = MAX_SCHEDULE_TIMEOUT;
skb_queue_head_init(&audit_skb_queue);
skb_queue_head_init(&audit_s