任意路由¶
在传统的 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 |
|