21 #include "ns3/flow-probe.h"
22 #include "ns3/flow-monitor.h"
27 FlowProbe::~FlowProbe ()
32 FlowProbe::FlowProbe (Ptr<FlowMonitor> flowMonitor)
33 : m_flowMonitor (flowMonitor)
35 m_flowMonitor->AddProbe (
this);
46 FlowProbe::AddPacketStats (FlowId flowId, uint32_t packetSize,
Time delayFromFirstProbe)
48 FlowStats &flow = m_stats[flowId];
49 flow.delayFromFirstProbeSum += delayFromFirstProbe;
50 flow.bytes += packetSize;
55 FlowProbe::AddPacketDropStats (FlowId flowId, uint32_t packetSize, uint32_t reasonCode)
57 FlowStats &flow = m_stats[flowId];
59 if (flow.packetsDropped.size () < reasonCode + 1)
61 flow.packetsDropped.resize (reasonCode + 1, 0);
62 flow.bytesDropped.resize (reasonCode + 1, 0);
64 ++flow.packetsDropped[reasonCode];
65 flow.bytesDropped[reasonCode] += packetSize;
75 FlowProbe::SerializeToXmlStream (std::ostream &os,
int indent, uint32_t index)
const
77 #define INDENT(level) for (int __xpto = 0; __xpto < level; __xpto++) os << ' ';
79 INDENT (indent); os <<
"<FlowProbe index=\"" << index <<
"\">\n";
83 for (Stats::const_iterator iter = m_stats.begin (); iter != m_stats.end (); iter++)
87 <<
" flowId=\"" << iter->first <<
"\""
88 <<
" packets=\"" << iter->second.packets <<
"\""
89 <<
" bytes=\"" << iter->second.bytes <<
"\""
90 <<
" delayFromFirstProbeSum=\"" << iter->second.delayFromFirstProbeSum <<
"\""
93 for (uint32_t reasonCode = 0; reasonCode < iter->second.packetsDropped.size (); reasonCode++)
96 os <<
"<packetsDropped reasonCode=\"" << reasonCode <<
"\""
97 <<
" number=\"" << iter->second.packetsDropped[reasonCode]
100 for (uint32_t reasonCode = 0; reasonCode < iter->second.bytesDropped.size (); reasonCode++)
103 os <<
"<bytesDropped reasonCode=\"" << reasonCode <<
"\""
104 <<
" bytes=\"" << iter->second.bytesDropped[reasonCode]
108 INDENT (indent); os <<
"</FlowStats>\n";
111 INDENT (indent); os <<
"</FlowProbe>\n";
virtual void DoDispose(void)
virtual void DoDispose(void)