A-A+

fib_semantic_match的方法讲解和解决路由的标准

2015年11月25日 站长资讯 暂无评论

fib_semantic_match方法的目的是在参数fib_node相关的路由fib_alias中,查找和搜索key所有字段都匹配的路由项。

packet被路由到的目的IP地址,在调用fib_semantic_match函数之前已经在fib_table_lookup中查找到匹配项。然后在由fib_semantic_match函数来检查其他字段是否匹配。

一旦fib_semantic_match查找到相匹配的fib_alias实例,就从相关的fib_node中提取出路由信息。之后还要选择下一跳。

拒绝路由的标准:

当fib_semantic_match函数遍历fib_alias结构时,拒绝以下路由:

● TOS不匹配。注意当路由项没有配置TOS时,可以路由任意TOS值的报文。

● scope比搜索key更窄的路由项。

例如,如果路由子系统查找scope为RT_SCOPE_UNIVERSE的路由则不能使用scope为RT_SCOPE_LINK的路由项。

而且,该函数必须检查路由项或所期望的下一跳是否无效,此时路由子系统已经设置RTNH_F_DEAD标志来标记该路由项应当被删除。

一旦标识出一个合法的fib_alias实例,并假定相关联的fib_info结构可用(即没有设置RTNH_F_DEAD标志),如果搜索key中给出了egress设备,则fib_semantic_match函数就需要遍历所有下一跳的fib_nh实例,来查找与搜索key中egress设备相匹配的实例。

但实际中可能没有一个下一跳能被使用,这可能是由两种原因引起的:

● 所有的下一跳都不可用(即它们都设置有RTNH_F_DEAD标志)。

● 搜索key指定的egress设备与任何一个下一跳的配置都不匹配。

如果不支持多路径,则只能有一个下一跳。

当fib_semantic_match遍历fib_alias实例时,对满足本小节前面提到的scope和TOS需求的实例设置FA_S_ACCESSED标志。该标志的设置与fib_alias是否被选中无关。当fib_alias实例被删除时,根据该标志来决定是否应当flush缓存。

标签:

给我留言