出问题的代码如下:
FlowMonitorHelper flowmon;
Ptr<FlowMonitor> monitor = flowmon.InstallAll();
Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier> (flowmon.GetClassifier ());
std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats ();
结果发现命令行报错如下:
terminated with signal SIGSEGV. Run it under a debugger to get more information (./waf --run --command-template=“gdb --args %s ”).
直到我看见论坛时发现!!
原来是实例化FlowMonitor的位置错了,他必须在给节点绑定IP之后。
然后我把代码放在Simulator::Run ()之后,结果当我通过monitor->GetFlowStats ()获取的map内容为空!!
最终解决!!!:
还是代码位置的问题。最后正确代码是这样的:在 Simulator::Stop (Seconds (m_totalTime)); 前面声明FlowMonitorHelper,并将FlowMonitor安装到每个节点上。在 Simulator::Run (); 后面在通过他们俩来获取自己想要的信息。
CreateNodes ();
CreateDevices (tr_name);
SetupMobility ();
InstallInternetStack (tr_name);
InstallApplications ();
std::cout << "\nStarting simulation for " << m_totalTime << " s ...\n";
FlowMonitorHelper flowmon;
Ptr<FlowMonitor> monitor = flowmon.InstallAll();
CheckThroughput ();
Simulator::Stop (Seconds (m_totalTime));
AnimationInterface anim("dsdv.xml");
Simulator::Run ();
Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier> (flowmon.GetClassifier ());
std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats ();