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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * routecache.h
  3.  * Copyright (C) 2000 by the University of Southern California
  4.  * $Id: routecache.h,v 1.8 2006/02/21 15:20:18 mahrenho Exp $
  5.  *
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License,
  8.  * version 2, as published by the Free Software Foundation.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License along
  16.  * with this program; if not, write to the Free Software Foundation, Inc.,
  17.  * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  18.  *
  19.  *
  20.  * The copyright of this module includes the following
  21.  * linking-with-specific-other-licenses addition:
  22.  *
  23.  * In addition, as a special exception, the copyright holders of
  24.  * this module give you permission to combine (via static or
  25.  * dynamic linking) this module with free software programs or
  26.  * libraries that are released under the GNU LGPL and with code
  27.  * included in the standard release of ns-2 under the Apache 2.0
  28.  * license or under otherwise-compatible licenses with advertising
  29.  * requirements (or modified versions of such code, with unchanged
  30.  * license).  You may copy and distribute such a system following the
  31.  * terms of the GNU GPL for this module and the licenses of the
  32.  * other code concerned, provided that you include the source code of
  33.  * that other code when and as the GNU GPL requires distribution of
  34.  * source code.
  35.  *
  36.  * Note that people who make modified versions of this module
  37.  * are not obligated to grant this special exception for their
  38.  * modified versions; it is their choice whether to do so.  The GNU
  39.  * General Public License gives permission to release a modified
  40.  * version without this exception; this exception also makes it
  41.  * possible to release a modified version which carries forward this
  42.  * exception.
  43.  *
  44.  */
  45. // Other copyrights might apply to parts of this software and are so
  46. // noted when applicable.
  47. //
  48. // Ported from CMU/Monarch's code, appropriate copyright applies.  
  49. /* -*- c++ -*- 
  50.    routecache.h
  51.    Interface all route caches must support
  52. */
  53. #ifndef _routecache_h
  54. #define _routecache_h
  55. #include <cstdarg>
  56. #include <object.h>
  57. #include <trace.h>
  58. #include "path.h"
  59. #ifdef DSR_CACHE_STATS
  60. class RouteCache;
  61. #include <dsr/cache_stats.h>
  62. #endif
  63. class RouteCache : public TclObject {
  64. public:
  65.   RouteCache();
  66.   ~RouteCache();
  67.   virtual void noticeDeadLink(const ID&from, const ID& to, Time t) = 0;
  68.   // the link from->to isn't working anymore, purge routes containing
  69.   // it from the cache
  70.   virtual void noticeRouteUsed(const Path& route, Time t, 
  71.        const ID& who_from) = 0;
  72.   // tell the cache about a route we saw being used
  73.   // if first tested is set, then we assume the first link was recently
  74.   // known to work
  75.   virtual void addRoute(const Path& route, Time t, const ID& who_from) = 0;
  76.   // add this route to the cache (presumably we did a route request
  77.   // to find this route and don't want to lose it)
  78.   virtual bool findRoute(ID dest, Path& route, int for_use) = 0;
  79.   // if there is a cached path from us to dest returns true and fills in
  80.   // the route accordingly. returns false otherwise
  81.   // if for_use, then we assume that the node really wants to keep 
  82.   // the returned route
  83.   virtual int command(int argc, const char*const* argv);
  84.   void trace(char* fmt, ...);
  85.   // *******************************************************
  86.   int pre_addRoute(const Path& route, Path &rt,
  87.    Time t, const ID& who_from);
  88.   // returns 1 if the Route should be added to the cache, 0 otherwise.
  89.   int pre_noticeRouteUsed(const Path& p, Path& stub,
  90.   Time t, const ID& who_from);
  91.   // returns 1 if the Route should be added to the cache, 0 otherwise.
  92. #ifdef DSR_CACHE_STATS
  93.   MobiHandler mh;
  94.   struct cache_stats stat;
  95.   virtual void periodic_checkCache() = 0;
  96.   int checkRoute_logall(Path *p, int action, int start);
  97. #endif
  98.   //**********************************************************
  99.   ID MAC_id, net_id;
  100.   virtual void dump(FILE *out);
  101. protected:
  102.   Trace *logtarget;
  103. };
  104. RouteCache * makeRouteCache();
  105. // return a ref to the route cache that should be used in this sim
  106. #endif // _routecache_h