![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux路由
fanxiaoyu321
天道酬勤
展开
-
路由数据库之外部事件响应
当网络设备状态发生变化,或者IP地址发生变化时,路由数据库也应该要做出相应的变化,比如删除无效的路由。这篇笔记就来看看路由数据监听了哪些外部事件,以及在各事件发生时做了哪些处理。源代码路径说明net/ipv4/fib_frontend.c路由数据库的初始化和事件响应处理代码实现net/ipv4/fib_semantics.c路由数据库核心操作实现1. 初始化在路由数据库的初始化函数ip_fib_init()中,IPv4项netdevice通知链和inetaddr通知链原创 2019-08-10 11:42:19 · 375 阅读 · 0 评论 -
路由子系统之概述
这篇笔记开始介绍linux系统中路由子系统的代码实现,路由子系统可以分为三部分:路由数据库;路由缓存;策略路由;后面会分别详细介绍这三部分的代码实现,这篇笔记从整体框架上介绍下着三者之间的关系。路由数据库我们常说的路由表组成了路由数据库,内核可以维护多张路由表。每张路由表中保存的是一条条的基于目的地址的路由,每条路由的基本含义是:要想去XX地址(目的地址)的XX数据包(除目的地址外其它的匹配条件),要通过XX网络设备接口。路由缓存对路由数据库执行的最频繁的操作非查询路由莫属了,为了提高查原创 2019-07-27 22:42:38 · 553 阅读 · 0 评论 -
IPv4路由数据库之hash方式路由表查询
文章目录数据结构路由查询条件: flowi路由查询结果: fib_result路由查询输入路由查询条件输出路由查询条件路由表查询: fn_hash_lookup()路由项匹配: fib_semantic_match()这篇笔记介绍了哈希方式路由表的查询过程。hash方式路由表的路由查询回调为fn_hash_lookup()。涉及的文件有:源代码路径说明include/net/ip_fib.hIPv4路由数据库头文件core/ipv4/fib_hash.c哈希方式的路由数据库原创 2019-08-07 01:54:09 · 4024 阅读 · 0 评论 -
IPv4路由数据库之hash方式路由项的添加
文章目录fn_hash_insert()查找路由结点: fib_find_node()查找路由项: fib_find_alias()新建路由区: fn_new_zone()新建路由项信息: fib_create_info()查找路由项信息: fib_find_info()下一跳地址检查: fib_check_nh()总结这篇笔记从路由项的添加过程来加深对路由表组织方式的理解,hash方式路由表的路由添加回调为fn_hash_insert()。涉及的文件有:源代码路径说明include原创 2019-08-07 01:56:38 · 2068 阅读 · 0 评论 -
IPv4路由数据库之hash方式路由表数据结构
文章目录路由表私有数据对象: fn_hash路由区: fn_zone路由结点: fib_node路由项: fib_alias路由项信息: fib_info下一跳地址: fib_nh之前的笔记介绍过,IPv4路由数据库是支持用不同数据结构组织路由表的,这篇笔记介绍哈希表方式的路由表实现中涉及的数据结构,就是这些数据结构组成了路由表,理解它们之间的组织关系非常重要。涉及的文件有:源代码路径说明include/net/ip_fib.hIPv4路由数据库头文件路由表私有数据对象: f原创 2019-08-07 01:55:31 · 3993 阅读 · 0 评论 -
IPv4路由数据库之Netlink接口
文章目录命令行数据结构路由消息: rtmsgNetlink消息属性路由项配置: fib_configNetlink消息到fib_config转换: rtm_to_fib_config()添加路由项: inet_rtm_newroute()删除路由项: inet_rtm_delroute()路由项的Dump用户空间程序如ip和netstat等工具都是通过Netlink接口实现对内核空间中路由表的增删改查,route是通过ioctl()系统调用与内核交互的,这篇笔记介绍了较新的Netlink路由配置接口实现。原创 2019-08-07 01:50:51 · 2645 阅读 · 0 评论 -
IPv4路由数据库之概述
文章目录数据结构路由表: fib_table初始化ip_fib_init()ip_fib_net_init()路由表查找查找: fib_get_table()查找&&新建: fib_new_table()外部事件监听响应网络设备状态变化: fib_netdev_event()响应IP地址变化: fib_inetaddr_event()fib_add_ifaddr()/fib_del_ifaddr()生成并配置路由项: fib_magic()路由的核心是路由数据库的设计和管理,这篇笔记分析了原创 2019-07-31 01:08:38 · 781 阅读 · 0 评论 -
策略路由之Netlink接口
在笔记策略路由之初始化中有看到,策略路由在初始化时又向路由套接字注册三个子命令:RTM_NEWRULE、RTM_DELRULE和RTM_GETRULE分别用于策略路由规则的添加、删除和查询。这篇笔记就来看看内核是如何实现这些接口的,从这些接口的实现中也可以进一步理解策略路由规则相关数据结构的含义和组织关系。源代码路径说明net/core/fib_rules.c策略路由非协议...原创 2019-08-17 00:36:28 · 1198 阅读 · 3 评论 -
策略路由之概述
策略路由需要分两块来看:非协议相关和协议相关。内核中可以有多个协议族都可以支持策略路由,这部分共性操作可以抽象出来,这就是非协议相关代码要做的是,各个协议族特有的操作通过一组回调函数来实现。这篇笔记就从初始化过程中看看策略路由的实现和组织结构。源代码路径说明net/core/fib_rules.c策略路由非协议相关实现include/net/fib_rules.h策...原创 2019-08-11 14:16:32 · 661 阅读 · 0 评论 -
策略路由之策略路由查询
这篇笔记来看看路由查询过程中,到底是如何根据策略路由规则引导最终的路由数据库查询的。原创 2019-08-18 12:26:05 · 3736 阅读 · 0 评论