我正在编辑NS-3中的AODV模块。
当一个节点将数据包转发到下一个节点时,我希望我的AODV模块听到无意中听到的下一个节点的转发过程,以确保它正确转发。
pcap文件正确地嗅探下一个节点的传输,但我无法从AODV模块中获取它。
我猜这个数据包正在被删除,因为它不应该被包含在内,所以我想知道如何改变它。
任何人都可以给我一些关于在哪里寻找更改相关代码的线索吗?
由于
答案 0 :(得分: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级跟踪源&#34; TxErrHeader&#34;同样用同样的方法挂钩。