0

我正在 NS-3 中编辑 AODV 模块。

当一个节点将数据包转发到下一个节点时,我希望我的 AODV 模块监听下一个节点的转发过程,以确保它正确转发它。

pcap 文件正确地嗅探下一个节点的传输,但我无法从 AODV 模块得到它。

我猜这个数据包被丢弃了,因为它不应该参与其中,因此我想知道如何改变它。

谁能给我关于在哪里寻找更改任何相关代码的线索?

谢谢

4

1 回答 1

0

可以通过挂钩其中一个 Wi-Fi 设备跟踪源来完成窃听。WifiPhy 对象中的 MonitorSnifferRx 可能就是您想要的。有两个步骤:1) 以某种方式获取指向 Wi-Fi Phy 的指针,以及 2) 将回调函数附加到该跟踪源。

步骤 1) 已经在 Aodv 中以现有方法完成:

RoutingProtocol::NotifyInterfaceUp ()
...
// Allow neighbor manager use this interface for layer 2 feedback if possible
Ptr<WifiNetDevice> wifi = dev->GetObject<WifiNetDevice> ();

至此,可以得到一个 Phy 对象指针:

Ptr<WifiPhy> phy = wifi->GetPhy();

从这里开始,您将需要使用 TraceConnectWithoutContext() 来挂钩跟踪源,并使用具有与 MonitorSniffRx 跟踪预期匹配的函数签名的回调。

phy->TraceConnectWithoutContext ("MonitorSniffRx", MakeCallback (&InsertYourCallbackFunctionHere));

看看 Mac 级别的跟踪源“TxErrHeader”是如何类似地挂在同一方法中的。

于 2017-11-24T21:54:08.243 回答