addr-params.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:53:32 haoboy>
  4. //
  5. /*
  6.  * addr-params.cc
  7.  * Copyright (C) 2000 by the University of Southern California
  8.  * $Id: addr-params.cc,v 1.3 2005/08/25 18:58:12 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. // Address parameters. Singleton class
  51. //
  52. // $Header: /cvsroot/nsnam/ns-2/routing/addr-params.cc,v 1.3 2005/08/25 18:58:12 johnh Exp $
  53. #include <stdlib.h>
  54. #include <tclcl.h>
  55. #include "addr-params.h"
  56. AddrParamsClass* AddrParamsClass::instance_ = NULL;
  57. static AddrParamsClass addr_params_class;
  58. void AddrParamsClass::bind()
  59. {
  60. TclClass::bind();
  61. add_method("McastShift");
  62. add_method("McastMask");
  63. add_method("NodeShift");
  64. add_method("NodeMask");
  65. add_method("PortMask");
  66. add_method("PortShift");
  67. add_method("hlevel");
  68. add_method("nodebits");
  69. }
  70. int AddrParamsClass::method(int ac, const char*const* av)
  71. {
  72. Tcl& tcl = Tcl::instance();
  73. int argc = ac - 2;
  74. const char*const* argv = av + 2;
  75. if (argc == 2) {
  76. if (strcmp(argv[1], "McastShift") == 0) {
  77. tcl.resultf("%d", McastShift_);
  78. return (TCL_OK);
  79. } else if (strcmp(argv[1], "McastMask") == 0) {
  80. tcl.resultf("%d", McastMask_);
  81. return (TCL_OK);
  82. } else if (strcmp(argv[1], "PortShift") == 0) {
  83. tcl.resultf("%d", PortShift_);
  84. return (TCL_OK);
  85. } else if (strcmp(argv[1], "PortMask") == 0) {
  86. tcl.resultf("%d", PortMask_);
  87. return (TCL_OK);
  88. } else if (strcmp(argv[1], "hlevel") == 0) {
  89. tcl.resultf("%d", hlevel_);
  90. return (TCL_OK);
  91. } else if (strcmp(argv[1], "nodebits") == 0) {
  92. tcl.resultf("%d", nodebits_);
  93. return (TCL_OK);
  94. }
  95. } else if (argc == 3) {
  96. if (strcmp(argv[1], "McastShift") == 0) {
  97. McastShift_ = atoi(argv[2]);
  98. return (TCL_OK);
  99. } else if (strcmp(argv[1], "McastMask") == 0) {
  100. McastMask_ = atoi(argv[2]);
  101. return (TCL_OK);
  102. } else if (strcmp(argv[1], "PortShift") == 0) {
  103. PortShift_ = atoi(argv[2]);
  104. return (TCL_OK);
  105. } else if (strcmp(argv[1], "PortMask") == 0) {
  106. PortMask_ = atoi(argv[2]);
  107. return (TCL_OK);
  108. } else if (strcmp(argv[1], "hlevel") == 0) {
  109. hlevel_ = atoi(argv[2]);
  110. if (NodeMask_ != NULL)
  111. delete []NodeMask_;
  112. if (NodeShift_ != NULL)
  113. delete []NodeShift_;
  114. NodeMask_ = new int[hlevel_];
  115. NodeShift_ = new int[hlevel_];
  116. return (TCL_OK);
  117. } else if (strcmp(argv[1], "nodebits") == 0) {
  118. nodebits_ = atoi(argv[2]);
  119. return (TCL_OK);
  120. } else if (strcmp(argv[1], "NodeShift") == 0) {
  121. tcl.resultf("%d", node_shift(atoi(argv[2])-1));
  122. return (TCL_OK);
  123. } else if (strcmp(argv[1], "NodeMask") == 0) {
  124. tcl.resultf("%d", node_mask(atoi(argv[2])-1));
  125. return (TCL_OK);
  126. }
  127. } else if (argc == 4) {
  128. if (strcmp(argv[1], "NodeShift") == 0) {
  129. NodeShift_[atoi(argv[2])-1] = atoi(argv[3]);
  130. return (TCL_OK);
  131. } else if (strcmp(argv[1], "NodeMask") == 0) {
  132. NodeMask_[atoi(argv[2])-1] = atoi(argv[3]);
  133. return (TCL_OK);
  134. }
  135. }
  136. return TclClass::method(ac, av);
  137. }