peerstats.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* -*-  Mode:C++; -*- */
  2. /*
  3.  * Copyright (c) 2007 Regents of the SIGNET lab, University of Padova.
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. Neither the name of the University of Padova (SIGNET lab) nor the 
  15.  *    names of its contributors may be used to endorse or promote products 
  16.  *    derived from this software without specific prior written permission.
  17.  *
  18.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
  19.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
  20.  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  21.  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
  22.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  23.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  24.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
  25.  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  26.  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
  27.  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  28.  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29.  */
  30. #ifndef PEERSTATS_H
  31. #define PEERSTATS_H
  32. class MR_MAC_MIB;
  33. /**
  34.  * Statistics related to the communications between two 802.11 instances.
  35.  * which is denoted by the pair of mac addresses (src,dest)
  36.  */
  37. class PeerStats
  38. {
  39. public:
  40.   PeerStats(); 
  41.   ~PeerStats();
  42.   virtual void updateSnr(double value)       { snr=value; }
  43.   virtual void updateSnir(double value)      { snir=value; }
  44.   virtual void updateInterf(double value)    { interf=value; }
  45.   virtual double getSnr()    { return snr; }
  46.   virtual double getSnir()   { return snir; }
  47.   virtual double getInterf() { return interf; }
  48.   char* peerstats2string(char* str, int size);
  49.   MR_MAC_MIB* macmib;  /**< holds all the counters for each (src,dest) */
  50. protected:
  51.   /*
  52.    * NOTE: these are last values seen for each (src,dest) 
  53.    * this does not make much sense since values
  54.    * can vary pretty much among subsequent
  55.    * transmissions (especially sinr and interference).
  56.    * These protected member are provided only as the most basic
  57.    * implementation. A better implementation would inherit from
  58.    * PeerStats and overload the virtual public updateValue() and
  59.    * getValue() methods in order to, e.g., return  average values.
  60.    */
  61.   double snr;          /**< Signal to Noise ratio in dB */
  62.   double snir;         /**< Signal to Noise and Interference ratio in dB */
  63.   double interf;       /**< Interference power in W */
  64. };
  65. /**
  66.  * Interface to the database containing PeerStats class instances for each connection.
  67.  * Each implementation of this database must be plugged to MAC
  68.  * instances. Depending on the implementation, a global and omniscient
  69.  * database might be plugged in all MAC instances, or a per-MAC
  70.  * instance of the database can be created.
  71.  * 
  72.  */
  73. class PeerStatsDB : public TclObject 
  74. {
  75. public:
  76.   PeerStatsDB();
  77.   virtual ~PeerStatsDB();
  78.   /** 
  79.    * Returns the PeerStats data related to the communication between
  80.    * src and dst. Note that either src or dst should refer to the MAC
  81.    * calling this method, in order for per-mac PeerStatsDB
  82.    * implementations to implement efficient memory management. 
  83.    * Particular PeerStatsDB implementations might offer a more relaxed
  84.    * behaviour, but the caller of this method should not rely on it if
  85.    * it's not aware of which PeerStatsDB implementation it's using.
  86.    * 
  87.    * @param src MAC address of the sender
  88.    * @param dst MAC address of the receiver
  89.    * 
  90.    * @return pointer to the PeerStats class containing the required stats.
  91.    */
  92.   virtual PeerStats* getPeerStats(u_int32_t src, u_int32_t dst) = 0;
  93.   int command(int argc, const char*const* argv);
  94. protected:
  95.   int VerboseCounters_;
  96. };
  97. #endif /* PEERSTATS_H */