第六章 netlink概述
6.1 netlink的创建
netlink是一套IP服务协议, 代表着一种特殊的socket通信方式;对linux内核与用户空间进行双向数据传输是非常好的方式.
用于netlink中socket的使用
地路由过程nl_fib_lookup_init()函数中, 调用netlink_kernel_create()函数创建了netlink结构. 其创建过程如下:
inet_init()-->ip_init()-->ip_rt_init()-->ip_fib_init()-->register_pernet_subsys()->register_pernet_operations()-->fib_net_init()-->nl_fib_lookup_init()-->netlink_kernel_create()-->sock_create_lite()
-->__netlink_create()
sock_create_lite()创建netlink的socket
__netlink_create()为netlink创建一个sock结构并与新建的socket挂钩
6.2 注册路由的netlink
inet_init()-->ip_init()-->ip_rt_init()-->devinet_init()-->rtnl_register()-->__rtnl_register()
6.3 通过netlink通信
以4.4节fn_hash_insert()调用rtmsg_fib()为例分析netlink的通信过程
fn_hash_insert()-->rtmsg_fib()-->nlmsg_new()
-->fib_nlmsg_size()
-->fib_dump_info()-->nlmsg_put()-->__nlmsg_put()
-->nlmsg_data()
-->nla_nest_start()
-->nla_reserve_nohdr()-->__nla_reserve_nohdr()
-->nla_nest_end()
-->rtnl_notify()-->nlmsg_notify()-->nlmsg_multicast()-->netlink_broadcast()-->do_one_broadcast()
阅读(801) | 评论(0) | 转发(0) |