本文简单记录路由初始化调用的相关接口函数
发送路由调用过程:
1、tcp_v4_connect(net/ipv4/tcp_ipv4.c)
传输层连接接口,根据路由表设置原ip地址和发送网络设备接口
2、ip_route_connect (include/net/route.h)
3、__ip_route_output_key (net/ipv4/route.c)
4、__mkroute_output(net/ipv4/route.c)
5、rt_dst_alloc(net/ipv4/route.c)
6、ip_route_output_flow(net/ipv4/route.c)
7、sk_setup_caps(net/core/sock.c)
设置指定sock的dst_entry
接收路由调用过程:
1、ip_rcv(net/ipv4/in_put.c)
网络ip层接收接口
2、ip_rcv_finish(net/ipv4/in_put.c)
3、ip_route_input_noref(net/ipv4/route.c)
以上是ip报文输入处理调用流程
4、ip_route_input_slow(net/ipv4/route.c)
输入路由处理入口
5、ip_mkroute_input(net/ipv4/route.c)
6、__mkroute_input(net/ipv4/route.c)
7、rt_dst_alloc(net/ipv4/route.c)
8、skb_dst_set(skb, &rth->dst);
设置指定sock的dst_entry
路由策略规则表(forward information base)初始化:
1、fib_rules_init(net/core/fib_rules.c)
注册路由策略设置接口回调函数
2、fib_nl_newrule(net/core/fib_rules.c)
路由策略规则(fib_rule)增加
3、int __net_init fib4_rules_init(struct net *net) (net/ipv4/fib_rules.c)
ipv4路由策略规则初始化,注册路由策略规则操作函数和默认路由策略规则
4、fib4_rules_init (net/ipv4/fib_frontend.c)
路由表初始化,不要和路由策略规则初始化混合
5、fib_new_table (net/ipv4/fib_frontend.c)
路由表快速查找算法LC-trie(字典树查找算法,为了提高路由表查找速度,linux3.6版本开始引入字典树路由表查找算法,替换了之前的hash表查找算法)
fib_insert_node (net/ipv4/fib_trie.c)
fib_find_node (net/ipv4/fib_trie.c)