/home/aherms/Code/git/awds-routing/src/awds/RTTMetric.h

00001 #ifndef D__RTTMetric
00002 #define D__RTTMetric
00003 
00004 #include <awds/UCastMetric.h>
00005 
00006 #include <string>
00007 
00008 namespace awds {
00009     
00012     class RTTMetric : public UCastMetric {
00013     protected:
00014 
00015         virtual RTopology::link_quality_t my_get_quality(NodeDescr &ndescr);
00016         virtual unsigned long my_calculate(RTopology::link_quality_t forward,RTopology::link_quality_t backward);
00017 
00018         struct s_rtt_data {
00019             gea::Duration time;
00020             gea::AbsTime lastsend,lastrecv;
00021             bool in_use;
00022             s_rtt_data():time(1),lastsend(0),lastrecv(0),in_use(true) {}
00023         };
00024         typedef std::map<NodeId,s_rtt_data> RTTData;
00025         RTTData rttData;
00026 
00027         typedef std::map<NodeId,std::vector<gea::Duration> > History;
00028         History *history;
00029 
00030         gea::Blocker blocker;
00031     public:
00032         gea::Duration interval;
00033 
00034         bool debug;
00035         double alpha;
00036         unsigned int packetSize;
00037         RTTMetric(Routing *r);
00038         virtual ~RTTMetric();
00039         virtual void on_recv(BasePacket *p);
00040         virtual void on_wait(gea::Handle *h,gea::AbsTime t);
00041     
00042         void go_history() {
00043             history = new History;
00044         }
00045     
00046         void start();
00047 
00048         virtual void addNode(NodeId &nodeId);
00049         virtual void begin_update();
00050         virtual void end_update();
00051 
00052         virtual std::string get_history();
00053         virtual std::string get_values();
00054 
00055         void go_measure();
00056     };
00057 }
00058 
00059 #endif // D__RTTMetric
00060 /* This stuff is for emacs
00061  * Local variables:
00062  * mode:c++
00063  * c-basic-offset: 4
00064  * End:
00065  */

Generated on Tue Dec 11 17:58:48 2007 for AWDS by  doxygen 1.5.3-20071008