一、背景
1. IOCTL处理程序不能从内核向用户空间发送异步消息。而Netlink套接字可以。
2. 使用IOCTL必须定义IOCTL号。Netlink只需使用套接字API打开并注册一个Netlink套接字,它就会处理与内核Netlink套接字的双向通讯。(通常是通过发送消息,来配置各种系统设置以及获取来自内核的响应)。Netlink也可以用户空间进程间通讯,一般不这样做。
二、优点
1. 使用Netlink套接字时不需要轮询。用户空间应用程序打开套接字,再调用recvmsg()。如果没有来自内核的消息,就进入阻塞状态。
2. 内核可以主动向用户空间发送异步消息,而不需要用户空间来触发。
3. Netlink套接字支持组播传输。
三、使用
1. 用户空间使用系统调用socket().
2. 内核中使用netlink_kernel_create().
3. 无论是内核还是用户空间都将创建一个netlink_sock()对象。
4. 用户空间netlink_create()处理套接字,内核_netlink_kernel_create()处理套接字。最终两种方法都将调用_netlink_create()。
四、Netlink套接字库
libnl
iproute2基于Netlink套接字
net-tools基于IOCTL
五、结构sockaddr_nl(include/uapi/linux/netlink.h)
它表示Netlink套接字的地址。
六、NETLINK_ROUTExiao
精通linux内核网络———第二章Netlink套接字
最新推荐文章于 2022-11-03 19:38:07 发布