flowmon->CheckForLostPackets ();
Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier> (flowmonHelper.GetClassifier ());
std::map<FlowId, FlowMonitor::FlowStats> stats = flowmon->GetFlowStats ();
for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator iter = stats.begin (); iter != stats.end (); ++iter)
{
Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow (iter->first);
NS_LOG_UNCOND( " Flow " << iter->first << " (" << t.sourceAddress << " -> " << t.destinationAddress << ")\n");
NS_LOG_UNCOND( " Tx Bytes: " << iter->second.txBytes << "\n");
NS_LOG_UNCOND( " Rx Bytes: " << iter->second.rxBytes << "\n");
NS_LOG_UNCOND( " Throughput: " << iter->second.rxBytes * 8.0 / (TotalTime - m_dataStart) / 1000 / 1000 << " Mbps\n");
NS_LOG_UNCOND( " Rx Segments: " << iter->second.rxPackets << "\n");
NS_LOG_UNCOND( " Lost packets: " << iter->second.lostPackets << "\n");
NS_LOG_UNCOND( " Packet Delivery Fraction: " << (float) iter->second.rxBytes / iter->second.txBytes * 100 << " %\n");
NS_LOG_UNCOND( " Average End-to-end Delay: " << iter->second.delaySum / iter->second.rxPackets / 1000 << " us\n");
NS_LOG_UNCOND( " Throughput: " << iter->second.rxBytes * 8.0 / (iter->second.timeLastRxPacket.GetSeconds()-iter->second.timeFirstTxPacket.GetSeconds()) / 1024 / 1024 << " Mbps");
}
flowmon->SerializeToXmlFile ((tr_name + ".flowmon").c_str(), true, true);