我正在编辑NS-3中的AODV模块。
当一个节点将数据包转发到下一个节点时,我想让我的AODV模块监听下一个节点的转发过程,以确保它转发正确。
pcap文件正确地嗅探下一个节点的传输,但我无法从AODV模块获得它。
我猜数据包正在被丢弃,因为它不应该涉及到它,因此我想知道如何改变这一点。
谁能给我一些线索,告诉我在哪里可以更改任何相关的代码?
谢谢
发布于 2017-11-25 05:54:08
窃听可以通过挂接其中一个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“是如何以同样的方法挂接的。
https://stackoverflow.com/questions/47474828
复制相似问题