4路由代理The Routing Agent
protoname/protoname.h
我们定义了一个叫做agent的新类,包含帮助协议完成其工作所需的属性和函数。
为了说明计时器的使用,我们假设质子体是一个主动的路由协议,需要定期发送一些控制数据包。
具体看代码
4.1 TCl 钩子
第 3 节中看到了如何将我们自己的数据包绑定到 Tcl 上。
现在我们将对agent代理类做同样的操作。其目的是让olsr从 Tcl 中实例化
为此,我们必须从下一个代码中描述的类 TclClass 中继承
protoname/protoname.cc
4.2计时器 p277
每指定一个任务,该任务就可能要计时器来结束或者进行别的事情
4.3Agent
4.3.1构造结构
4.3.2命令 p105
//打印rtable的一个实例:
//它假设 ns_包含一个模拟器的实例,而 node_是一个由 ns_创建的节点。我们将 255 作为参数传递,因为这是路由代理附加到的端口数。
//simulation.tcl
//1: $ns_ at 15.0 "[$node_agent255] print_rtable"
4.3.3 recv() p508
只要收到数据包,这个函数就会被调用。它识别接收到的数据包的类型并相应地处理它。
4.3.4 recv_protoname_pkt()
让我们假设路由代理已经收到了一个olsr数据包,从而使得要调用 recv_olsr_pkt()
这个函数的实现将根据具体的协议而有很大的不同
!!!黑洞节点在这里设置
4.3.5 send_protoname_pkt()
数据包是事件,因此需要安排它们。事实上,发送一个数据包相当于在某个时间安排它
4.3.6 reset _protoname_pkt_timer()
我们的数据包发送计时器执行另一个回调(第 4.2 节)来重新安排自己。它是在恢复^质子^pk^计时
器()的功能中完成的。我们将在下一个例子中展示,其中 pkt_timer_被重新安排到五秒后过期。
olsr中没有
4.3.7 forward_data()
//到目前为止,我们主要关注olsr数据包,但现在是时候处理数据包了。
//forward_data()函数决定是否必须将数据包传递到上层代理或转发到其他节点