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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * rtProtoLS.h
  3.  * Copyright (C) 2000 by the University of Southern California
  4.  * $Id: rtProtoLS.h,v 1.4 2005/08/25 18:58:06 johnh 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. //  Copyright (C) 1998 by Mingzhou Sun. All rights reserved.
  49. //  This software is developed at Rensselaer Polytechnic Institute under 
  50. //  DARPA grant No. F30602-97-C-0274
  51. //  Redistribution and use in source and binary forms are permitted
  52. //  provided that the above copyright notice and this paragraph are
  53. //  duplicated in all such forms and that any documentation, advertising
  54. //  materials, and other materials related to such distribution and use
  55. //  acknowledge that the software was developed by Mingzhou Sun at the
  56. //  Rensselaer  Polytechnic Institute.  The name of the University may not 
  57. //  be used to endorse or promote products derived from this software 
  58. //  without specific prior written permission.
  59. //
  60. // $Header: /cvsroot/nsnam/ns-2/linkstate/rtProtoLS.h,v 1.4 2005/08/25 18:58:06 johnh Exp $
  61. #ifndef ns_rtprotols_h
  62. #define ns_rtprotols_h
  63. #include "packet.h"
  64. #include "agent.h"
  65. #include "ip.h"
  66. #include "ls.h" 
  67. #include "hdr-ls.h"
  68. extern LsMessageCenter messageCenter;
  69. class rtProtoLS : public Agent , public LsNode {
  70. public:
  71.         rtProtoLS() : Agent(PT_RTPROTO_LS) { 
  72. LS_ready_ = 0;
  73. }
  74.         int command(int argc, const char*const* argv);
  75.         void sendpkt(ns_addr_t dst, u_int32_t z, u_int32_t mtvar);
  76.         void recv(Packet* p, Handler*);
  77. protected:
  78. void initialize(); // init nodeState_ and routing_
  79. void setDelay(int nbrId, double delay) {
  80. delayMap_.insert(nbrId, delay);
  81. }
  82. void sendBufferedMessages() { routing_.sendBufferedMessages(); }
  83. void computeRoutes() { routing_.computeRoutes(); }
  84. void intfChanged();
  85. void sendUpdates() { routing_.sendLinkStates(); }
  86. void lookup(int destinationNodeId);
  87. public:
  88. bool sendMessage(int destId, u_int32_t messageId, int size);
  89. void receiveMessage(int sender, u_int32_t msgId);
  90. int getNodeId() { return nodeId_; }
  91. LsLinkStateList* getLinkStateListPtr()  { return &linkStateList_; }
  92. LsNodeIdList* getPeerIdListPtr() { return &peerIdList_; }
  93. LsDelayMap* getDelayMapPtr() { 
  94. return delayMap_.empty() ? (LsDelayMap *)NULL : &delayMap_;
  95. }
  96. void installRoutes() {
  97. Tcl::instance().evalf("%s route-changed", name());
  98. }
  99. private:
  100. typedef LsMap<int, ns_addr_t> PeerAddrMap; // addr for peer Id
  101. PeerAddrMap peerAddrMap_;
  102. int nodeId_;
  103. int LS_ready_; // to differentiate fake and real LS, debug, 0 == no
  104. // needed in recv and sendMessage;
  105. LsLinkStateList linkStateList_;
  106. LsNodeIdList peerIdList_;
  107. LsDelayMap delayMap_;
  108. LsRouting routing_;
  109. int findPeerNodeId(ns_addr_t agentAddr);
  110. };
  111. #endif // ns_rtprotols_h