(一)概述路由策略数据库(RPDB)路由部分结构整个路由系统可以分成三部分:IP层调用接口,路由策略数据库,和前后端接口1、IP层调用接口主要是提供一组调用接口给IP层代码:这一部分主要提供了两个供IP层调用的入口函数:intip_route_input(structsk_buff*skb,u32dst,u32src,u8tos,structnet_device*dev);intip_route_output(structrtable**rp,u32daddr,u32saddr,u32tos,intoif)ip_route_input_slow:当ip_route_input查cache不命中时调用此函数,此函数进而调用路由策略数据库的查询接口进行查询,然后更新路由cache
ip_route_output_slow:当ip_route_output查cahe不命中是调用此函数,此函数进而调用路由策略数据库的查询接口进行查询,然后更新路由cache
2、路由策略数据库部分主要包括一个策略库和多张路由表:①策略表fib_rule每个策略是一个fib_rule结构
这个结构有几个重要的域:r_preference这个策略的优先级
r_table这个策略对应的路由表,它是路由表索引表fib_tables的一个索引值
r_action策略的动作,如单播,丢弃,NAT等
r_src,r_srcmask,r_dst,r_dstmask,r_tos等策略的选择器,即描述什么样的IP包匹配这条策略
②路由表fib_table定义如下:structfib_table*local_table;structfib_table*main_table;structfib_table*fib_tables[RT_TABLE_MAX+1];它的数据结构是:structfib_table{unsigned