电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Linux中与内核通信的Netlink机制VIP免费

Linux中与内核通信的Netlink机制_第1页
1/20
Linux中与内核通信的Netlink机制_第2页
2/20
Linux中与内核通信的Netlink机制_第3页
3/20
Linux 中与内核通信的Netlink 机制 Netlink 在2.6 版本的内核中变化也是很大的,在最新的2.6.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 消息结构,而 skb 的控制块保存了消息的地址信息,前面的宏NETLINK_CB(skb)就用于方便设置该控制块,参数pid 为接收消息进程的pid,参数nonblock表示该函数是否为非阻塞,如果为 1,该函数将在没有接收缓存可利用时立即返回,而如果为 0,该函数在没有接收缓存可利用 定时睡眠。 netlink 的内核实现在.c 文件 net/core/af_netlink.c 中,内核模块要想使用 netlink,也必须包含头文件 linu x /netlink.h。内核使用 netlink 需要专门的API,这完全不同于用户态应用对netlink 的使用。如果用户需要增加新的netlink 协议类型,必须通过修改 linu x /netlink.h 来实现,当然,目前的netlink 实现已经包含了一个通用的协议类型 NETLINK_GENERIC 以方便用户使用,用户可以直接使用它而不必增加新的协议类型。前面讲到,为了增加新的netlink协议类型,用户仅需增加如下定义到linu x /netlink.h 就可以: 只要增加这个定义之后,用户就可以在内核的任何地方引用该协议。 在内核中,为了创建一个netlink socket 用户需要调用如...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

Linux中与内核通信的Netlink机制

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部