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
00061
00062
00063
00064
00065