任意路由¶
在传统的 ns-3 路由类中,路由策略被限制为特定的路由表结构,而 Arbiter 路由 提供了一种更加灵活的路由方式,允许你自定义和实现任何路由策略
Arbiter类本身实现的是一个基础的ECMP,是一个具有普适意义的基类,因此开发者实现自定义类的方式很简单:
直接继承Arbiter类!
构成
- Arbiter: 
model/core/arbiter.c/h- 抽象基类,最基础的类
 - 针对普通的拓扑
 - 任何继承它的类必须实现一个名为 
decide的函数 - 根据源节点、目标节点、数据包、IP 头等信息,决定是否丢弃包或将包转发到哪个接口,目标网关的 IP 地址是多少
 
 - ArbiterPtop: 
model/core/arbiter-ptop.c/h- 继承自Arbiter,不过对于开发者的自定义而言,它还是基类
 - 专门针对点对点拓扑
 - 任何继承它的类必须实现一个名为 
topology_decide的函数 - 不需要网关,只返回下一跳的节点 ID,或者返回 
-1表示丢弃该包 
 
- ArbiterEcmp: 
model/core/arbiter-ecmp.c/h- 继承自 ArbiterPtop
 - 根据 5 元组哈希值来决定路由,并从一组候选的下一跳中选择一个作为最终的路由
 
 - ArbiterEcmpHelper: 
model/arbiter-ecmp-helper.c/h- 辅助类
 - 用于计算 ArbiterEcmp 实例的路由状态,并安装
 
 
- Ipv4ArbiterRouting: 
model/core/ipv4-arbiter-routing.c/h- 路由实例类,
 - 在每次路由决策时调用对应的 Arbiter 实例,从而决定每个数据包的路由路径
 
 - Ipv4ArbiterRoutingHelper: 
helper/core/ipv4-arbiter-routing-helper.c/h- 辅助类
 - 用于将 Ipv4ArbiterRouting 实例安装到节点
 
 
主代码
引入头文件
| C++ | |
|---|---|
1 2  |  | 
安装ECMP路由
回顾一下,在ns-3中创建路由,都是先创建对象,然后将helper施加到这个对象上,这里也不例外
| C++ | |
|---|---|
1 2 3 4  |  |