www.pudn.com > simulation_files.rar > wired_wireless.tcl, change:2004-04-28,size:12591b


#============================================================================
#Ali Hamidian
#=============================================================================
set opt(namfile)         out.nam
set opt(tracefile)       out.tr
set opt(traffic)         "./traffic/cbr-15-1-5-5-e"
set opt(x)               800
set opt(y)               500
set opt(wirelessNodes)   15
set opt(gatewayNodes)    2
set opt(wiredNodes)      4
set opt(mobility)        "./mobility/15-5-10-900-800-500-a"
set opt(stop)            50
set opt(gw_discovery)    hybrid

# ==========================================================================
# Movement trace
# ==========================================================================
proc log-mn-movement { } {
    global logtimer ns
    
    source /home/alexh/ns/ns-allinone-2.1b9a/ns-2.1b9a/tcl/mobility/timer.tcl
    Class LogTimer -superclass Timer
    LogTimer instproc timeout {} {
 	global mobile6 mobile7 mobile8 mobile9 mobile10 mobile11 mobile12 mobile13 mobile14 mobile15 mobile16 mobile17 mobile18 mobile19 mobile20 
	$mobile6 log-movement
	$mobile7 log-movement
	$mobile8 log-movement
	$mobile9 log-movement
	$mobile10 log-movement
	$mobile11 log-movement
	$mobile12 log-movement
	$mobile13 log-movement
	$mobile14 log-movement
	$mobile15 log-movement
	$mobile16 log-movement
	$mobile17 log-movement
	$mobile18 log-movement
	$mobile19 log-movement
	$mobile20 log-movement
	
	$self sched 1 
    }
    set logtimer [new LogTimer]
    $logtimer sched 1  
}
# ==========================================================================
# Main Program
# ==========================================================================
proc create-topo {} {
    global ns opt topo mobile6 mobile7 mobile8 mobile9 mobile10 mobile11 mobile12 mobile13 mobile14 mobile15 mobile16 mobile17 mobile18 mobile19 mobile20 gw1 gw2 router1 router2 host1 host2
    
    #create a topology object and define topology
    set topo [new Topography]
    $topo load_flatgrid $opt(x) $opt(y)
    set god [create-god [expr $opt(wirelessNodes)+$opt(gatewayNodes)]]

    #---------Addressing---------#
    #For mixed simulations we need to use hierarchical routing in order to 
    #route packets. Must be put before addressing starts.
    $ns node-config -addressType hierarchical
    
    #Number of domains
    #4 domains
    AddrParams set domain_num_ 4
    
    #Number of clusters in each domain
    #4 clusters 
    #1 cluster in domain 0 
    #1 cluster in domain 1 
    #1 cluster in domain 2 
    #1 cluster in domain 3 
    AddrParams set cluster_num_ {1 1 1 1}

    #Number of nodes in each cluster
    #21 nodes
    #2 nodes in domain 0 in cluster 0: router1 0.0.0  host1 0.0.1
    #2 nodes in domain 1 in cluster 0: router2 1.0.0  host2 1.0.1
    #9 nodes in domain 2 in cluster 0: gw1 2.0.0  mobile6-mobile13 2.0.1-2.0.8
    #8 nodes in domain 3 in cluster 0: gw2 3.0.0  mobile14-mobile20 3.0.1-3.0.7
    AddrParams set nodes_num_ {2 2 9 8}
    
    #Chooses method for gateway discovery
    #NOTE! This assumes that AODV is used and that GATEWAY_DISCOVERY is defined
    #in aodv.h!!!
    if {$opt(gw_discovery) == "proactive"} {
	Agent/AODV set gw_discovery 0
    }
    if {$opt(gw_discovery) == "hybrid"} {
	Agent/AODV set gw_discovery 1
    }
    
    #--------------------------
    # Create Nodes
    #--------------------------
    ### Create wired nodes
    set router1 [$ns node 0.0.0]
    set host1 [$ns node 0.0.1]
    set router2 [$ns node 1.0.0]
    set host2 [$ns node 1.0.1]
    
    # Configure for mobile nodes and gateways
    $ns node-config -adhocRouting AODV
    $ns node-config -llType LL
    $ns node-config -macType Mac/802_11
    $ns node-config -ifqType Queue/DropTail/PriQueue
    $ns node-config -ifqLen  50
    $ns node-config -antType Antenna/OmniAntenna
    $ns node-config -propType Propagation/TwoRayGround
    $ns node-config -phyType  Phy/WirelessPhy
    $ns node-config -topoInstance $topo
    $ns node-config -channel [new Channel/WirelessChannel]
    $ns node-config -agentTrace ON
    $ns node-config -routerTrace ON
    $ns node-config -macTrace ON
    $ns node-config -movementTrace OFF
    
    # Configure for gateways
    $ns node-config -wiredRouting ON
    
    ### Create gateways
    set gw1 [$ns node 2.0.0]
    set gw2 [$ns node 3.0.0]
    
    $gw1 set X_ 100.0
    $gw1 set Y_ 250.0
    $gw1 set Z_ 0.0
    $gw2 set X_ 700.0
    $gw2 set Y_ 250.0
    $gw2 set Z_ 0.0
    
    $ns at 0.00 "$gw1 setdest 100 250 0"
    $ns at 0.00 "$gw2 setdest 700 250 0"
    
    # Configure for mobile nodes
    $ns node-config -wiredRouting OFF
    
    ### Create mobile nodes
    set temp {2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 \
	3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7}   
    for {set i 6} {$i  $opt(wirelessNodes)+6 } {incr i} {
	set mobile$i [$ns node [lindex $temp [expr $i-6]]]
    }
    
    $mobile6 base-station [AddrParams addr2id [$gw1 node-addr]]
    $mobile7 base-station [AddrParams addr2id [$gw1 node-addr]]
    $mobile8 base-station [AddrParams addr2id [$gw1 node-addr]]
    $mobile9 base-station [AddrParams addr2id [$gw1 node-addr]]
    $mobile10 base-station [AddrParams addr2id [$gw1 node-addr]]
    $mobile11 base-station [AddrParams addr2id [$gw1 node-addr]]
    $mobile12 base-station [AddrParams addr2id [$gw1 node-addr]]
    $mobile13 base-station [AddrParams addr2id [$gw1 node-addr]]
    
    $mobile14 base-station [AddrParams addr2id [$gw2 node-addr]]
    $mobile15 base-station [AddrParams addr2id [$gw2 node-addr]]
    $mobile16 base-station [AddrParams addr2id [$gw2 node-addr]]
    $mobile17 base-station [AddrParams addr2id [$gw2 node-addr]]
    $mobile18 base-station [AddrParams addr2id [$gw2 node-addr]]
    $mobile19 base-station [AddrParams addr2id [$gw2 node-addr]]
    $mobile20 base-station [AddrParams addr2id [$gw2 node-addr]]
    
    # Mobility model generated by setdest
    source $opt(mobility)
    
    $ns at 0.0 "$router1 label \"ROUTER\""
    $ns at 0.0 "$router2 label \"ROUTER\""
    $ns at 0.0 "$host1 label \"HOST\""
    $ns at 0.0 "$host2 label \"HOST\""
    $ns at 0.0 "$gw1 label \"GATEWAY\""
    $ns at 0.0 "$gw2 label \"GATEWAY\""
    $ns at 0.0 "$mobile6 label \"MN 6\""
    $ns at 0.0 "$mobile7 label \"MN 7\""
    $ns at 0.0 "$mobile8 label \"MN 8\""    
    $ns at 0.0 "$mobile9 label \"MN 9\""
    $ns at 0.0 "$mobile10 label \"MN 10\""
    $ns at 0.0 "$mobile11 label \"MN 11\""    
    $ns at 0.0 "$mobile12 label \"MN 12\""
    $ns at 0.0 "$mobile13 label \"MN 13\""
    $ns at 0.0 "$mobile14 label \"MN 14\""    
    $ns at 0.0 "$mobile15 label \"MN 15\""
    $ns at 0.0 "$mobile16 label \"MN 16\""
    $ns at 0.0 "$mobile17 label \"MN 17\""
    $ns at 0.0 "$mobile18 label \"MN 18\""
    $ns at 0.0 "$mobile19 label \"MN 19\""
    $ns at 0.0 "$mobile20 label \"MN 20\"" 

    $ns initial_node_pos $mobile6 20
    $ns initial_node_pos $mobile7 20
    $ns initial_node_pos $mobile8 20
    $ns initial_node_pos $mobile9 20
    $ns initial_node_pos $mobile10 20
    $ns initial_node_pos $mobile11 20
    $ns initial_node_pos $mobile12 20
    $ns initial_node_pos $mobile13 20
    $ns initial_node_pos $mobile14 20
    $ns initial_node_pos $mobile15 20
    $ns initial_node_pos $mobile16 20
    $ns initial_node_pos $mobile17 20
    $ns initial_node_pos $mobile18 20
    $ns initial_node_pos $mobile19 20
    $ns initial_node_pos $mobile20 20
    
    $router1 color blue
    $router2 color blue
    $host1 color blue
    $host2 color blue
    $gw1 color red
    $gw2 color red
    $gw1 shape hexagon
    $gw2 shape hexagon
    $router1 shape square
    $router2 shape square
    $host1 shape box
    $host2 shape box
    
    $ns duplex-link $router1 $router2 100Mb 1.80ms DropTail
    $ns duplex-link-op $router1 $router2 orient right
    $ns duplex-link $router1 $host1 100Mb 1.80ms DropTail
    $ns duplex-link-op $router1 $host1 orient down
    $ns duplex-link $router2 $host2 100Mb 1.80ms DropTail
    $ns duplex-link-op $router2 $host2 orient down
    $ns duplex-link-op $router1 $router2 queuePos 0.5

    $ns duplex-link $router1 $gw1 100Mb 2ms DropTail
    $ns duplex-link-op $router1 $gw1 orient up
    $ns duplex-link $router2 $gw2 100Mb 2ms DropTail
    $ns duplex-link-op $router2 $gw2 orient up
}

################################################################
# End of Simulation
################################################################
proc finish { } {
    global tracef ns namf opt mobile6 mobile7 mobile8 mobile9 mobile10 mobile11 mobile12 mobile13 mobile14 mobile15 mobile16 mobile17 mobile18 mobile19 mobile20 gw1 gw2 router1 router2 host1 host2
    
    $ns at $opt(stop).01 "$router1 reset";
    $ns at $opt(stop).01 "$host1 reset";
    $ns at $opt(stop).01 "$router2 reset";
    $ns at $opt(stop).01 "$host2 reset";
    
    $ns at $opt(stop).01 "$gw1 reset";
    $ns at $opt(stop).01 "$gw2 reset";
    
    $ns at $opt(stop).01 "$mobile6 reset";
    $ns at $opt(stop).01 "$mobile7 reset";
    $ns at $opt(stop).01 "$mobile8 reset";
    $ns at $opt(stop).01 "$mobile9 reset";
    $ns at $opt(stop).01 "$mobile10 reset";
    $ns at $opt(stop).01 "$mobile11 reset";
    $ns at $opt(stop).01 "$mobile12 reset";
    $ns at $opt(stop).01 "$mobile13 reset";
    $ns at $opt(stop).01 "$mobile14 reset";
    $ns at $opt(stop).01 "$mobile15 reset";
    $ns at $opt(stop).01 "$mobile16 reset";
    $ns at $opt(stop).01 "$mobile17 reset";
    $ns at $opt(stop).01 "$mobile18 reset";
    $ns at $opt(stop).01 "$mobile19 reset";
    $ns at $opt(stop).01 "$mobile20 reset";
    
    $ns at $opt(stop).01 "$ns nam-end-wireless $opt(stop)"
    $ns at $opt(stop).0002 "$ns halt"
    
    $ns flush-trace
    flush $tracef
    close $tracef
    close $namf
    puts "Running nam with $opt(namfile) ... "
    exec nam $opt(namfile) &
    exit 0
}

################################################################
# Main 
################################################################
proc main { } {
    global opt ns namf tracef
    
    set ns [new Simulator]
    $ns color 0 Brown
    $ns color 1 Blue
    $ns color 2 Yellow
    $ns color 3 Green
    $ns color 4 Purple
    $ns color 5 Red
    
    #$ns use-newtrace
    exec rm -f $opt(tracefile)
    set tracef [open $opt(tracefile) w]
    $ns trace-all $tracef
    set namf [open $opt(namfile) w]
    $ns namtrace-all-wireless $namf $opt(x) $opt(y)
    create-topo
    log-mn-movement
    set-traffic
    
    #>----------------------- Run Simulation -------------------------<
    $ns at $opt(stop).0001 "finish"
    $ns at 0.0 "$ns set-animation-rate 15ms"
    # For tracegraph
    puts $tracef "mixed12 ip hex"

    puts "Starting simulation..."
    puts "Please wait..."
    $ns run
    
}

set opt(start-src) 1
set opt(stop-src) [expr $opt(stop)-1]
proc set-traffic { } {
    global ns opt mobile6 mobile7 mobile8 mobile9 mobile10 mobile11 mobile12 mobile13 mobile14  mobile15 mobile16 mobile17 mobile18 mobile19 mobile20 router1 router2 host1 host2
     
    
    set opt(agent) cbr-gen
    
    if {$opt(agent) == "cbr-gen"} {
   	source $opt(traffic)
    }
    
    if {$opt(agent) == "cbr-gen-mobile"} {
   	source ./traffic/more_traffic/cbr-15-1-5-5-mobile
    }
    
    if {$opt(agent) == "cbr"} {
	set src [new Agent/UDP]
	set dst [new Agent/Null]
	$ns attach-agent $mobile7 $src 
	$ns attach-agent $host1 $dst
	$ns connect $src $dst       
	
	set cbr [new Application/Traffic/CBR]
        $cbr attach-agent $src
	$cbr set packetSize_ 512
	$cbr set interval_ 0.1
	#$cbr set packetSize_ 1000
	#$cbr set interval_ 0.0178571429
	$ns at $opt(start-src) "$cbr start"
	$ns at $opt(stop-src) "$cbr stop"
    }
    
    if {$opt(agent) == "tcp"} {
	set src [new Agent/TCP]
	set dst [new Agent/TCPSink]
	$ns attach-agent $mobile6 $src
	$ns attach-agent $mobile10 $dst
	$ns connect $src $dst
	
	$src set class_ 2
	set ftp [new Application/FTP]
	$ftp attach-agent $src
	$ns at $opt(start-src) "$ftp start"
	$ns at $opt(stop-src) "$ftp stop"
    }
 
    if {$opt(agent) == "exp" || $opt(agent) == "poi" } {
	set src [new Agent/UDP]
        set dst [new Agent/UDP]
        $ns attach-agent $mobile6 $src
        $ns attach-agent $mobile8 $dst
        $ns connect $src $dst
	
        set exp [new Application/Traffic/Exponential]
        $exp attach-agent $src
        $exp set packetSize_ 210
	$exp set idle_time_ 500ms
	
	if {$opt(agent) == "exp"} {
	    $exp set burst_time_ 0
	    $exp set rate_ 10000k 
	} else {
	    $exp set burst_time_ 500ms
	    $exp set rate_ 100k
	}
	
	$ns at $opt(start-src) "$exp start"
	#$ns at $opt(stop-src) "$exp stop"
    }
} 

main