linux内核通信-netlink使用例子

linux内核通信-netlink使用例子

ID:40749753

大小:37.94 KB

页数:15页

时间:2019-08-07

linux内核通信-netlink使用例子_第1页
linux内核通信-netlink使用例子_第2页
linux内核通信-netlink使用例子_第3页
linux内核通信-netlink使用例子_第4页
linux内核通信-netlink使用例子_第5页
资源描述:

《linux内核通信-netlink使用例子》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Netlink是一种特殊的socket,它是Linux所特有的,类似于BSD中的AF_ROUTE但又远比它的功能强大,目前在最新的Linux内核(2.6.14)中使用netlink进行应用与内核通信的应用很多,包括:路由daemon(NETLINK_ROUTE),1-wire子系统(NETLINK_W1),用户态socket协议(NETLINK_USERSOCK),防火墙(NETLINK_FIREWALL),socket监视(NETLINK_INET_DIAG),netfilter日志(NETLINK_NFLOG),ipsec安全策略(NETL

2、INK_XFRM),SELinux事件通知(NETLINK_SELINUX),iSCSI子系统(NETLINK_ISCSI),进程审计(NETLINK_AUDIT),转发信息表查询(NETLINK_FIB_LOOKUP),netlinkconnector(NETLINK_CONNECTOR),netfilter子系统(NETLINK_NETFILTER),IPv6防火墙(NETLINK_IP6_FW),DECnet路由信息(NETLINK_DNRTMSG),内核事件向用户态通知(NETLINK_KOBJECT_UEVENT),通用netlink

3、(NETLINK_GENERIC)。Netlink是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的socketAPI就可以使用netlink提供的强大功能,内核态需要使用专门的内核API来使用netlink。Netlink相对于系统调用,ioctl以及/proc文件系统而言具有以下优点:1,为了使用netlink,用户仅需要在include/linux/netlink.h中增加一个新类型的netlink协议定义即可,如#defineNETLINK_MYTEST17然后,内核和用户态应用就可以立即通过socketAPI

4、使用该netlink协议类型进行数据交换。但系统调用需要增加新的系统调用,ioctl则需要增加设备或文件,那需要不少代码,proc文件系统则需要在/proc下添加新的文件或目录,那将使本来就混乱的/proc更加混乱。2.netlink是一种异步通信机制,在内核与用户态应用之间传递的消息保存在socket缓存队列中,发送消息只是把消息保存在接收者的socket的接收队列,而不需要等待接收者收到消息,但系统调用与ioctl则是同步通信机制,如果传递的数据太长,将影响调度粒度。3.使用netlink的内核部分可以采用模块的方式实现,使用netlink

5、的应用部分和内核部分没有编译时依赖,但系统调用就有依赖,而且新的系统调用的实现必须静态地连接到内核中,它无法在模块中实现,使用新系统调用的应用在编译时需要依赖内核。4.netlink支持多播,内核模块或应用可以把消息多播给一个netlink组,属于该neilink组的任何内核模块或应用都能接收到该消息,内核事件向用户态的通知机制就使用了这一特性,任何对内核事件感兴趣的应用都能收到该子系统发送的内核事件,在后面的文章中将介绍这一机制的使用。5.内核可以使用netlink首先发起会话,但系统调用和ioctl只能由用户应用发起调用。6.netlink

6、使用标准的socketAPI,因此很容易使用,但系统调用和ioctl则需要专门的培训才能使用。用户态使用netlink用户态应用使用标准的socketAPIs,socket(),bind(),sendmsg(),recvmsg()和close()就能很容易地使用netlinksocket,查询手册页可以了解这些函数的使用细节,本文只是讲解使用netlink的用户应该如何使用这些函数。注意,使用netlink的应用必须包含头文件linux/netlink.h。当然socket需要的头文件也必不可少,sys/socket.h。为了创建一个netli

7、nksocket,用户需要使用如下参数调用socket():socket(AF_NETLINK,SOCK_RAW,netlink_type)第一个参数必须是AF_NETLINK或PF_NETLINK,在Linux中,它们俩实际为一个东西,它表示要使用netlink,第二个参数必须是SOCK_RAW或SOCK_DGRAM,第三个参数指定netlink协议类型,如前面讲的用户自定义协议类型NETLINK_MYTEST,NETLINK_GENERIC是一个通用的协议类型,它是专门为用户使用的,因此,用户可以直接使用它,而不必再添加新的协议类型。内核预

8、定义的协议类型有:#defineNETLINK_ROUTE0/*Routing/devicehook*/#defineNETLINK_W11/*1-w

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。