网上有一个ns3.36的解决教程尝试解决NS3报错【aodv-routing-protocol报错】_ns3 adov-CSDN博客,我用的是3.38版本,修改过程中发现有一些区别。
一、修改aodv-protocol.cc文件
第一处:
mac->TraceConnectWithoutContext ("TxErrHeader", m_nb.GetTxErrorCallback ());
改为
mac->TraceConnectWithoutContext ("DroppedMpdu", MakeCallback (&RoutingProtocol::NotifyTxError, this));
并添加
void
RoutingProtocol::NotifyTxError (WifiMacDropReason reason, Ptr<const WifiMacQueueItem> mpdu) //NotifyTxError是tarce sink函数
{
m_nb.GetTxErrorCallback ()(mpdu->GetHeader ());
}
第二处:
mac->TraceDisconnectWithoutContext ("TxErrHeader",
m_nb.GetTxErrorCallback ());
改为
mac->TraceDisconnectWithoutContext ("DroppedMpdu",
m_nb.GetTxErrorCallback ());
第三处:
添加头文件
#include "ns3/wifi-mpdu.h"
#include "ns3/wifi-net-device.h"
二、修改aodv-protocol.h文件
在ns3命名空间后添加
class WifiMpdu;
enum WifiMacDropReason : uint8_t; // opaque enum declaration
在RoutingProtocol类的私有函数里面添加下面声明:
/**
* Notify that an MPDU was dropped.
*
* \param reason the reason why the MPDU was dropped
* \param mpdu the dropped MPDU
*/
void NotifyTxError (WifiMacDropReason reason, Ptr<const WifiMacQueueItem> mpdu);