omn​​et在路由协议上重传数据包

时间:2018-05-12 05:59:49

标签: omnet++

我正在研究无线路由协议。我在每个节点都创建了一个Queue。在此队列中,每个节点都保留已传输的数据包。如果nexthop没有发送数据包,那么前一个节点将在超时后重新发送数据包。问题是当节点试图通过调用handle函数中的postRotingHook重新传输数据包时,它就没有做任何事情。这个postRoutingHook是在本地创建的,所以它实际上并没有发送数据包。那么如何将此数据包与网络连接以进行重传?

示例:假设我们有3个节点A,B和C.A是源,B是中间,C是目的地。节点A最初发送了一个数据包。现在节点B将它转发到节点C.此时,节点A将听到该数据包,它将取消定时器并从其队列中删除该数据包。 (正常情况下)

假设节点B由于某种原因无法转发数据包,那么节点A应该在超时后重新发送数据包。我无法实现此功能。

我的编程场景是: 我修改了GPSR协议。其中头文件有这5个INetfilterHooks方法的定义。我没有使用任何控制包,例如请求,响应,信标等我直接处理包含一些控制信息的数据包。我已经在datagramPreRoutingHook()方法中实现了我的逻辑(当从较低层接收数据时)和datagramLocalOutHook()方法(当从上层接收数据时)。

源节点(在网络层)在调用datagramLocalOutHook(数据报)时使用handlePacketFromHL() - > datagramLocalOutHook(datagram,destIE,nextHopAddr)== INetfilter :: IHook :: ACCEPT)从IPv4.cc上层接收数据包,destIE,nextHopAddr)然后控制转到我的路由协议。它进行必要的更改,添加源,目标地址,创建选项并将数据包保留在队列中(通过调度计时器进行重新传输)然后返回ACCEP。然后再次控制转到IPv4.cc。

在此过程之后,如果我的协议发生超时,则无法将数据包发送到IPv4.cc.我调用postRoutingHook重新传输数据包,然后它简单地返回ACCEPT(在头文件中定义)并且什么也不做。我试图通过在我的协议中创建IPv4的对象来调用IPv4.cc的一些方法,但这些方法受到保护,因此我无法访问这些方法。 我试着制作一些IPv4.cc的公共方法,但它在进一步的阶段会出错。

我试图让INetfilter :: IHook的对象调用它的postRoutingHook()但是也提供错误,因为无法创建抽象类的对象。

0 个答案:

没有答案