1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
|
#
# Copyright (c) 1996-1997 Regents of the University of California.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by the MASH Research
# Group at the University of California Berkeley.
# 4. Neither the name of the University nor of the Research Group may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# @(#) $Header: /cvsroot/nsnam/ns-2/tcl/lib/ns-agent.tcl,v 1.25 2009/01/15 06:23:49 tom_henderson Exp $
#
#
# OTcl methods for the Agent base class
#
#
# The following overload was added to inform users of the backward
# compatibility issues resulted from having a 32-bit addressing space.
#
Agent instproc set args {
if { [lindex $args 0] == "dst_" } {
puts "Warning dst_ is no longer being supported in NS. $args"
puts "Use dst_addr_ and dst_port_ instead"
$self instvar dst_addr_ dst_port_
set addr [lindex $args 1]
set baseAddr [Simulator set McastBaseAddr_]
if { $addr >= $baseAddr } {
$self set dst_addr_ $addr
$self set dst_port_ 0
} else {
$self set dst_addr_ [expr ($addr >> 8) ]
$self set dst_port_ [expr ($addr % 256) ]
exit
}
return
}
eval $self next $args
}
# Debo
Agent instproc init {} {
#$self instvar nodeid_
#$self set nodeid_ -1
}
Agent instproc nodeid {} {
[$self set node_] id
}
Agent instproc port {} {
$self instvar agent_port_
return $agent_port_
}
#
# Lower 8 bits of dst_ are portID_. this proc supports setting the interval
# for delayed acks
#
Agent instproc dst-port {} {
$self instvar dst_port_
return [expr $dst_port_]
}
#
# Add source of type s_type to agent and return the source
# Source objects are obsolete; use attach-app instead
#
Agent instproc attach-source {s_type} {
set source [new Source/$s_type]
$source attach $self
$self set type_ $s_type
return $source
}
#
# Add application of type s_type to agent and return the app
# Note that s_type must be defined as a packet type in packet.h
#
Agent instproc attach-app {s_type} {
set app_ [new Application/$s_type]
$app_ attach-agent $self
$self set type_ $s_type
return $app_
}
#
# Attach tbf to an agent
#
Agent instproc attach-tbf { tbf } {
$tbf target [$self target]
$self target $tbf
}
#
# OTcl support for classes derived from Agent
#
Class Agent/Null -superclass Agent
Agent/Null instproc init args {
eval $self next $args
}
Agent/LossMonitor instproc log-loss {} {
}
#Signalling agent attaches tbf differently as none of its signalling mesages
#go via the tbf
Agent/CBR/UDP/SA instproc attach-tbf { tbf } {
$tbf target [$self target]
$self target $tbf
$self ctrl-target [$tbf target]
}
#
# A lot of agents want to store the maxttl locally. However,
# setting a class variable based on the Agent::ttl_ variable
# does not help if the user redefines Agent::ttl_. Therefore,
# Agents interested in the maxttl_ should call this function
# with the name of their class variable, and it is set to the
# maximum of the current/previous value.
#
# The function itself returns the value of ttl_ set.
#
# I use this function from agent constructors to set appropriate vars:
# for instance to set Agent/rtProto/DV::INFINITY, or
# Agent/SRM/SSM::ttlGroupScope_
#
Agent proc set-maxttl {objectOrClass var} {
if { [catch "$objectOrClass set $var" value] || \
($value < [Agent set ttl_]) } {
$objectOrClass set $var [Agent set ttl_]
}
$objectOrClass set $var
}
Agent/TCP instproc init {} {
eval $self next
set ns [Simulator instance]
$ns create-eventtrace Event $self
}
#Agent instproc init args {
# $self next $args
#}
#Agent/rtProto instproc init args {
# puts "DOWN HERE 2"
# $self next $args
#}
#Agent/rtProto/TORA -superclass Agent
Agent/TORA instproc init args {
$self next $args
}
Agent/TORA set sport_ 0
Agent/TORA set dport_ 0
Agent/AODV instproc init args {
$self next $args
}
Agent/AODV set sport_ 0
Agent/AODV set dport_ 0
# AOMDV patch
Agent/AOMDV set sport_ 0
Agent/AOMDV set dport_ 0
Agent/AOMDV set aomdv_prim_alt_path_len_diff_ 1
Agent/AOMDV set aomdv_max_paths_ 3
|