• Main Page
  • Classes
  • Files
  • File List

/Users/yzchen/ns/ns-allinone-2.33/ns-2.33/diffusion/diff_prob.h

00001 
00002 /*
00003  * diff_prob.h
00004  * Copyright (C) 2000 by the University of Southern California
00005  * $Id: diff_prob.h,v 1.9 2005/08/25 18:58:03 johnh Exp $
00006  *
00007  * This program is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU General Public License,
00009  * version 2, as published by the Free Software Foundation.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License along
00017  * with this program; if not, write to the Free Software Foundation, Inc.,
00018  * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
00019  *
00020  *
00021  * The copyright of this module includes the following
00022  * linking-with-specific-other-licenses addition:
00023  *
00024  * In addition, as a special exception, the copyright holders of
00025  * this module give you permission to combine (via static or
00026  * dynamic linking) this module with free software programs or
00027  * libraries that are released under the GNU LGPL and with code
00028  * included in the standard release of ns-2 under the Apache 2.0
00029  * license or under otherwise-compatible licenses with advertising
00030  * requirements (or modified versions of such code, with unchanged
00031  * license).  You may copy and distribute such a system following the
00032  * terms of the GNU GPL for this module and the licenses of the
00033  * other code concerned, provided that you include the source code of
00034  * that other code when and as the GNU GPL requires distribution of
00035  * source code.
00036  *
00037  * Note that people who make modified versions of this module
00038  * are not obligated to grant this special exception for their
00039  * modified versions; it is their choice whether to do so.  The GNU
00040  * General Public License gives permission to release a modified
00041  * version without this exception; this exception also makes it
00042  * possible to release a modified version which carries forward this
00043  * exception.
00044  *
00045  */
00046 
00047 /****************************************************************/
00048 /* diff_prob.h : Chalermek Intanagonwiwat (USC/ISI)  08/16/99   */
00049 /****************************************************************/
00050 
00051 // Important Note: Work still in progress !!! Major improvement is needed.
00052 
00053 #ifndef ns_diff_prob_h
00054 #define ns_diff_prob_h
00055 
00056 #include <assert.h>
00057 #include <math.h>
00058 #include <stdio.h>
00059 #include <signal.h>
00060 #include <float.h>
00061 #include <stdlib.h>
00062 
00063 #include <tcl.h>
00064 
00065 #include "diff_header.h"
00066 #include "agent.h"
00067 #include "tclcl.h"
00068 #include "ip.h"
00069 #include "config.h"
00070 #include "packet.h"
00071 #include "trace.h"
00072 #include "random.h"
00073 #include "classifier.h"
00074 #include "node.h"
00075 #include "iflist.h"
00076 #include "hash_table.h"
00077 #include "arp.h"
00078 #include "mac.h"
00079 #include "ll.h"
00080 #include "dsr/path.h"
00081 #include "routing_table.h"
00082 #include "diffusion.h"
00083 
00084 
00085 //#define DEBUG_PROB
00086 
00087 #define BACKTRACK_            false
00088 #define ENERGY_CHECK          0.05         // (sec) between energy checks
00089 #define INTEREST_DELAY        0.05         // (sec) bw receive and forward
00090 #define MAX_REINFORCE_COUNTER 10           // (pkts) bw pos reinf
00091 
00092 class DiffusionProb;
00093 
00094 class EnergyTimer : public TimerHandler {
00095 public:
00096         EnergyTimer(DiffusionProb *a, Node *b) : TimerHandler() { 
00097                 a_ = a; 
00098                 node_ = b;
00099                 init_eng_ = node_->energy_model()->energy();
00100                 threshold_ = init_eng_ / 2;
00101         }
00102         virtual void expire(Event *e);
00103 protected:
00104         DiffusionProb *a_;
00105         Node *node_;
00106         double init_eng_;
00107         double threshold_;
00108 };
00109 
00110 
00111 class InterestTimer : public TimerHandler {
00112 public:
00113   InterestTimer(DiffusionProb *a, Pkt_Hash_Entry *hashPtr, Packet *pkt) : 
00114     TimerHandler() 
00115   { 
00116       a_ = a; 
00117       hashPtr_ = hashPtr;
00118       pkt_ = pkt;
00119   }
00120 
00121   virtual ~InterestTimer() {
00122     if (pkt_ != NULL) 
00123       Packet::free(pkt_);
00124   }
00125 
00126   virtual void expire(Event *e);
00127 protected:
00128   DiffusionProb *a_;
00129   Pkt_Hash_Entry *hashPtr_;
00130   Packet *pkt_;
00131 };
00132 
00133 
00134 
00135 class DiffusionProb : public DiffusionAgent {
00136  public:
00137   DiffusionProb();
00138   void recv(Packet*, Handler*);
00139 
00140  protected:
00141 
00142   int num_neg_bcast_send;
00143   int num_neg_bcast_rcv;
00144 
00145   EnergyTimer *energy_timer;
00146   bool is_low_power;
00147 
00148   void Start();
00149   void consider_old(Packet *);
00150   void consider_new(Packet *);
00151   void add_outlist(unsigned int, From_List *);
00152   void data_request_all(unsigned int dtype);
00153 
00154   void CreateIOList(Pkt_Hash_Entry *, unsigned int);
00155   void UpdateIOList(From_List *, unsigned int);
00156   void Print_IOlist();
00157 
00158   void CalGradient(unsigned int);
00159   void IncGradient(unsigned int, ns_addr_t);
00160   void DecGradient(unsigned int, ns_addr_t);
00161 
00162   void ForwardData(Packet *);
00163   void ForwardTxFailed(Packet *);
00164   void ReTxData(Packet *);
00165 
00166   void GenPosReinf(unsigned int);
00167   void FwdPosReinf(unsigned int, Packet *);
00168   void InterfaceDown(int, ns_addr_t);
00169   void SendInhibit(int);
00170   void SendNegReinf();
00171 
00172   void InterestPropagate(Packet *pkt, Pkt_Hash_Entry *hashPtr);
00173   void xmitFailed(Packet *pkt);
00174 
00175   friend class InterestTimer;
00176   friend class EnergyTimer;
00177 };
00178 
00179 #endif

Generated on Tue Aug 10 2010 16:16:06 for ns-2.33 by  doxygen 1.7.1