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

通讯编程

开发平台:

Visual C++

  1. // -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*-
  2. //
  3. // Time-stamp: <2000-09-15 12:52:53 haoboy>
  4. //
  5. /*
  6.  * parentnode.cc
  7.  * Copyright (C) 2000 by the University of Southern California
  8.  * $Id: parentnode.cc,v 1.2 2005/08/25 18:58:02 johnh Exp $
  9.  *
  10.  * This program is free software; you can redistribute it and/or
  11.  * modify it under the terms of the GNU General Public License,
  12.  * version 2, as published by the Free Software Foundation.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License along
  20.  * with this program; if not, write to the Free Software Foundation, Inc.,
  21.  * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  22.  *
  23.  *
  24.  * The copyright of this module includes the following
  25.  * linking-with-specific-other-licenses addition:
  26.  *
  27.  * In addition, as a special exception, the copyright holders of
  28.  * this module give you permission to combine (via static or
  29.  * dynamic linking) this module with free software programs or
  30.  * libraries that are released under the GNU LGPL and with code
  31.  * included in the standard release of ns-2 under the Apache 2.0
  32.  * license or under otherwise-compatible licenses with advertising
  33.  * requirements (or modified versions of such code, with unchanged
  34.  * license).  You may copy and distribute such a system following the
  35.  * terms of the GNU GPL for this module and the licenses of the
  36.  * other code concerned, provided that you include the source code of
  37.  * that other code when and as the GNU GPL requires distribution of
  38.  * source code.
  39.  *
  40.  * Note that people who make modified versions of this module
  41.  * are not obligated to grant this special exception for their
  42.  * modified versions; it is their choice whether to do so.  The GNU
  43.  * General Public License gives permission to release a modified
  44.  * version without this exception; this exception also makes it
  45.  * possible to release a modified version which carries forward this
  46.  * exception.
  47.  *
  48.  */
  49. //
  50. // Other copyrights might apply to parts of this software and are so
  51. // noted when applicable.
  52. //
  53. #include "parentnode.h"
  54. class BcastAddressClassifier;
  55. static class LanNodeClass : public TclClass {
  56. public:
  57. LanNodeClass() : TclClass("LanNode") {}
  58. TclObject* create(int, const char*const*) {
  59.                 return (new LanNode);
  60.         }
  61. } class_lan_node;
  62. static class AbsLanNodeClass : public TclClass {
  63. public:
  64. AbsLanNodeClass() : TclClass("AbsLanNode") {}
  65. TclObject* create(int, const char*const*) {
  66.                 return (new AbsLanNode);
  67.         }
  68. } class_abslan_node;
  69. static class BroadcastNodeClass : public TclClass {
  70. public:
  71. BroadcastNodeClass() : TclClass("Node/Broadcast") {}
  72. TclObject* create(int, const char*const*) {
  73.                 return (new BroadcastNode);
  74.         }
  75. } class_broadcast_node;
  76. int LanNode::command(int argc, const char*const* argv) {
  77.   if (argc == 3) {
  78.     if (strcmp(argv[1], "addr") == 0) {
  79.       address_ = Address::instance().str2addr(argv[2]);
  80.       return TCL_OK;
  81.     } else if (strcmp(argv[1], "nodeid") == 0) {
  82.       nodeid_ = atoi(argv[2]);
  83.       return TCL_OK;
  84.     }
  85.   }
  86.   return ParentNode::command(argc,argv);
  87. }
  88. int AbsLanNode::command(int argc, const char*const* argv) {
  89.   if (argc == 3) {
  90.     if (strcmp(argv[1], "addr") == 0) {
  91.       address_ = Address::instance().str2addr(argv[2]);
  92.       return TCL_OK;
  93.     } else if (strcmp(argv[1], "nodeid") == 0) {
  94.       nodeid_ = Address::instance().str2addr(argv[2]);
  95.       return TCL_OK;
  96.     }
  97.   }
  98.   return ParentNode::command(argc,argv);
  99. }
  100. int BroadcastNode::command(int argc, const char*const* argv) {
  101.   Tcl& tcl = Tcl::instance();
  102.   if (argc == 3) {
  103.     if (strcmp(argv[1], "addr") == 0) {
  104.       address_ = Address::instance().str2addr(argv[2]);
  105.       return TCL_OK;
  106.     } 
  107.     else if (strcmp(argv[1], "nodeid") == 0) {
  108.       nodeid_ = Address::instance().str2addr(argv[2]);
  109.       return TCL_OK;
  110.     } 
  111.     else if (strcmp(argv[1], "attach-classifier") == 0) {
  112.       classifier_ = (BcastAddressClassifier*)(TclObject::lookup(argv[2]));
  113.       if (classifier_ == NULL) {
  114. tcl.add_errorf("Wrong object name %s",argv[2]);
  115. return TCL_ERROR;
  116.       }
  117.       return TCL_OK;
  118.     }
  119.   }
  120.   return ParentNode::command(argc,argv);
  121. }
  122. void BroadcastNode::add_route(char *dst, NsObject *target) {
  123.   classifier_->do_install(dst,target);
  124. }
  125. void BroadcastNode::delete_route(char *dst, NsObject *nullagent) {
  126.   classifier_->do_install(dst, nullagent); 
  127. }