Show dropped packets are don't store packets, due to performance considerations
authorRichard Whitehouse <github@richardwhiuk.com>
Fri, 20 May 2011 14:25:40 +0000 (15:25 +0100)
committerRichard Whitehouse <github@richardwhiuk.com>
Fri, 20 May 2011 14:25:40 +0000 (15:25 +0100)
src/simulation/model/analysis.cc
src/simulation/model/analysis.h

index cd1c85f497a3f911ba3f6b2dab4e3865ebb72362..55c3f36dafc5ef6c84738affbbb589df3b7aff7b 100644 (file)
@@ -48,23 +48,6 @@ Analysis::~Analysis(){
 
 }
 
-void Analysis::printCsma(){
-       long i = 0;
-       for(std::vector<csmaParse>::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<std::string,std::map<std::string,std::string> >::iterator vit = it->packet.begin(); vit != it->packet.end(); ++vit){
-                       std::cout << '\t' << vit->first << std::endl;
-                       for(std::map<std::string, std::string>::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<csmaParse>::iterator it = traces.begin(); it != traces.end(); ++it){
-               std::map<std::string, std::map<std::string, std::string> >::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<std::string, std::map<std::string, std::string> >::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);
 
 }
 
index 10d42ce906a4d93f01a10c45153090cc67743c0b..1f194c1262f176cad1223e631a479d6d082981dd 100644 (file)
@@ -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<stateParse*> states;
 
-       std::vector<csmaParse> traces;
-
        Topology topology;
 
        std::istream& data;