From: Richard Whitehouse Date: Fri, 20 May 2011 14:25:40 +0000 (+0100) Subject: Show dropped packets are don't store packets, due to performance considerations X-Git-Url: https://git.richardwhiuk.com/?a=commitdiff_plain;h=1ee8abd2a24900084badb03152c2f84f906dfb8f;p=ns-moose.git Show dropped packets are don't store packets, due to performance considerations --- diff --git a/src/simulation/model/analysis.cc b/src/simulation/model/analysis.cc index cd1c85f..55c3f36 100644 --- a/src/simulation/model/analysis.cc +++ b/src/simulation/model/analysis.cc @@ -48,23 +48,6 @@ Analysis::~Analysis(){ } -void Analysis::printCsma(){ - long i = 0; - for(std::vector::iterator it = traces.begin(); it != traces.end(); ++it, ++i){ - std::cout << "[" << i << "]" << std::endl; - std::cout << '\t' << it->type << std::endl; - std::cout << '\t' << it->time << std::endl; - std::cout << '\t' << it->node << std::endl; - for(std::map >::iterator vit = it->packet.begin(); vit != it->packet.end(); ++vit){ - std::cout << '\t' << vit->first << std::endl; - for(std::map::iterator mit = vit->second.begin(); mit != vit->second.end(); ++mit){ - std::cout << "\t\t" << mit->first << '\t' << mit->second << std::endl; - } - } - } - -} - void Analysis::generateDot(){ dot << "graph G { " << std::endl; dot << "node [shape=box, style=filled];" << std::endl; @@ -224,48 +207,53 @@ void Analysis::analyseCsmaType(csmaParse& parse, csmaAnalysis& analysis){ ++(analysis.removed); } else if(parse.type == "r"){ ++(analysis.received); + } else if(parse.type == "d"){ + ++(analysis.dropped); } else { std::cerr << parse.type << std::endl; assert(false); } } -void Analysis::analyseCsma(){ +void Analysis::analyseCsmaLine(csmaParse& it){ - for(std::vector::iterator it = traces.begin(); it != traces.end(); ++it){ - std::map >::iterator mit; - if((mit = it->packet.find("ns3::ArpHeader")) != it->packet.end()){ - if(it->packet["ns3::EthernetHeader"]["destination"] == "ff:ff:ff:ff:ff:ff"){ - analyseCsmaType(*it, arp.request); - } else { - analyseCsmaType(*it, arp.response); - } + std::map >::iterator mit; - analyseCsmaType(*it, arp.total); + if((mit = it.packet.find("ns3::ArpHeader")) != it.packet.end()){ + if(it.packet["ns3::EthernetHeader"]["destination"] == "ff:ff:ff:ff:ff:ff"){ + analyseCsmaType(it, arp.request); + } else { + analyseCsmaType(it, arp.response); + } - } else if( - ((mit = it->packet.find("ns3::Ipv4Header")) != it->packet.end()) - && - ((mit = it->packet.find("ns3::UdpHeader")) != it->packet.end()) - ) { + analyseCsmaType(it, arp.total); - analyseCsmaType(*it, udp); + } else if( + ((mit = it.packet.find("ns3::Ipv4Header")) != it.packet.end()) + && + ((mit = it.packet.find("ns3::UdpHeader")) != it.packet.end()) + ) { - } else { - mit = it->packet.begin(); ++mit; - std::cerr << mit->first << std::endl; - assert(false); - } + analyseCsmaType(it, udp); - if(it->packet["ns3::EthernetHeader"]["destination"] == "ff:ff:ff:ff:ff:ff"){ - analyseCsmaType(*it, broadcast); - } else { - analyseCsmaType(*it, unicast); - } + } else { + mit = it.packet.begin(); ++mit; + std::cerr << mit->first << std::endl; + assert(false); + } - analyseCsmaType(*it, total); + if(it.packet["ns3::EthernetHeader"]["destination"] == "ff:ff:ff:ff:ff:ff"){ + analyseCsmaType(it, broadcast); + } else { + analyseCsmaType(it, unicast); } + analyseCsmaType(it, total); + +} + +void Analysis::analyseCsma(){ + output << "ARP " << std::endl << "\t Request \t" << arp.request << std::endl << "\t Response \t" << arp.response << std::endl @@ -284,7 +272,9 @@ void Analysis::analyseCsma(){ std::ostream& operator<<(std::ostream& file, Analysis::csmaAnalysis& analysis){ file << "+: " << analysis.added << " -: " << analysis.removed - << " r: " << analysis.received; + << " r: " << analysis.received + << " d: " << analysis.dropped + ; return file; } @@ -377,7 +367,7 @@ void Analysis::parseCsmaLine(std::string& line){ } - traces.push_back(parse); + analyseCsmaLine(parse); } diff --git a/src/simulation/model/analysis.h b/src/simulation/model/analysis.h index 10d42ce..1f194c1 100644 --- a/src/simulation/model/analysis.h +++ b/src/simulation/model/analysis.h @@ -58,6 +58,7 @@ private: void analyseCsmaType(csmaParse& parse, csmaAnalysis& analysis); void parseCsmaLine(std::string& line); + void analyseCsmaLine(csmaParse&); struct csmaParse { std::string type; @@ -68,13 +69,14 @@ private: struct csmaAnalysis { - csmaAnalysis() : added(0), removed(0), received(0){ + csmaAnalysis() : added(0), removed(0), received(0), dropped(0){ } long added; long removed; long received; + long dropped; friend std::ostream& operator<<(std::ostream&, csmaAnalysis&); @@ -128,8 +130,6 @@ private: std::vector states; - std::vector traces; - Topology topology; std::istream& data;