Tuesday, 8 January 2013

To set nodes destination and color randomly


# Define setting options
set val(chan)           Channel/WirelessChannel    ;# channel type
set val(prop)           Propagation/TwoRayGround   ;# radio-propagation model
set val(netif)          Phy/WirelessPhy            ;# network interface type
set val(mac)            Mac/802_11                 ;# MAC type
set val(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
set val(ll)             LL                         ;# link layer type
set val(ant)            Antenna/OmniAntenna        ;# antenna model
set val(ifqlen)         50                         ;# max packet in ifq
set val(nn)             8                          ;# number of mobilenodes
set val(rp)             AODV                       ;# routing protocol
set val(x)              500                        ;# X dimension of topography
set val(y)              400                        ;# Y dimension of topography 
set val(stop)           10                   ;# time of simulation end
set ns              [new Simulator]
#Creating nam and trace file:
set tracefd       [open wireless2.tr w]
set namtrace      [open wireless2.nam w]   
$ns trace-all $tracefd
$ns namtrace-all-wireless $namtrace $val(x) $val(y)
# set up topography object
set topo       [new Topography]
$topo load_flatgrid $val(x) $val(y)
set god_ [create-god $val(nn)]
# configure the nodes
        $ns node-config -adhocRouting $val(rp) \
                   -llType $val(ll) \
                   -macType $val(mac) \
                   -ifqType $val(ifq) \
                   -ifqLen $val(ifqlen) \
                   -antType $val(ant) \
                   -propType $val(prop) \
                   -phyType $val(netif) \
                   -channelType $val(chan) \
                   -topoInstance $topo \
                   -agentTrace ON \
                   -routerTrace ON \
                   -macTrace OFF \
                   -movementTrace ON
                 
## Creating node objects..         
for {set i 0} {$i < 3 } { incr i } {
            set node_($i) [$ns node]     
      }
      for {set i 0} {$i < 3  } {incr i } {
            $node_($i) color blue
            $ns at 0.0 "$node_($i) color blue"
      }
for {set i 3} {$i < 6 } { incr i } {
            set node_($i) [$ns node]     
      }
      for {set i 3} {$i < 5  } {incr i } {
            $node_($i) color cyan
            $ns at 0.0 "$node_($i) color cyan"
      }
for {set i 5} {$i < 8 } { incr i } {
            set node_($i) [$ns node]     
      }
      for {set i 5} {$i < 8  } {incr i } {
            $node_($i) color red
            $ns at 0.0 "$node_($i) color red"
      }
## Provide initial location of mobilenodes..
            for {set i 0} {$i < $val(nn) } { incr i } {
                  set xx [expr rand()*500]
                  set yy [expr rand()*400]
                  $node_($i) set X_ $xx
                  $node_($i) set Y_ $yy
                 
            }
# Define node initial position in nam
for {set i 0} {$i < $val(nn)} { incr i } {
# 30 defines the node size for nam
$ns initial_node_pos $node_($i) 30
}
# Telling nodes when the simulation ends
for {set i 0} {$i < $val(nn) } { incr i } {
    $ns at $val(stop) "$node_($i) reset";
}
# dynamic destination setting procedure..
$ns at 0.0 "destination"
proc destination {} {
      global ns val node_
      set time 1.0
      set now [$ns now]
      for {set i 0} {$i<$val(nn)} {incr i} {
            set xx [expr rand()*500]
            set yy [expr rand()*400]
            $ns at $now "$node_($i) setdest $xx $yy 10.0"
      }
      $ns at [expr $now+$time] "destination"
}
#stop procedure..
$ns at $val(stop) "stop"
proc stop {} {
    global ns tracefd namtrace
    $ns flush-trace
    close $tracefd
    close $namtrace
exec nam wireless2.nam &
}
$ns run

Monday, 7 January 2013

How to install Cygwin and NS2 in windows?


[Cygwin]
1.      Download the cygwin.rar.

2.      Decompress the cygwin.rar
 

1.      Click the setup.exe to install cygwin.

2.      Because the language of operating system is Traditional Chinese. The text of button is shown in Chinese. But you don’t need to worry about this. I think it is shown in English in your computer. Just click “Next”.

3.      Then choose “Install from Local Directory”

4.      Click “Next”.
(Just keep the settings as they are.)

5.      Click “Next”

6.      Click “Browse” to choose where the software is. (Please choose “ftp%3a%2f%2fftp.nctu.edu.tw%2fWindows%2fcygwin”)

7.      Click “OK”.

8.      Click “Next” and you will see the figure shown as follows. In this window, the cygwin setup program let you choose what software you want to install.

9.      Click “View” first to make the word “Category “change to “Full”.

10.   XFree86-base, XFree86-bin, XFree86-prog, XFree86-lib, XFree86-etc, make, patch, perl, gcc, gcc-g++, gawk, gnuplot, tar and gzip must be chosen. For example, if I want to install XFree-86 base (upper figure), click the “Skip” of “New” column. The “Skip” will be changed to “4.3.0-1” (lower figure).

11.  Click “Next”.
(Please be patient. It may take a long time to finish the installation.)

12.   When setup is done, it will be shown as following figure. Click “Finish”.
 

13.   Click “OK” to finish the cygwin setup program.

[myNS2 setup]
1.      Click the icon on the desktop.

2.      For the first time execution, it will generate some environment parameter setting files. In this example, smallko is my login name to windows system. Therefore, the cygwin will create a folder named “smallko” under home directory. (The actual path for smallko folder is: c:\cygwin\home\smallko) It should be noticed that the login name can not have any space in your name. For example, “A  B” may cause errors when you install NS2.

3.      Download myNS2.

4.      Decompress the ns-allinone-2.28.rar.

5.      Move this folder under c:\cygwin\home\smallko. (P.S. smallko is my login name)

6.      Open a cygwin window

7.      Change the path to ns-allinone-2.28/ns-2.28

8.      Run the command “./configure; make clean; make

9.      Please be patient. It will take some time to finish the compilation.

10.  When it is done, it should look like as follows.

11.  To make sure that you have successfully installed myNS2, you need to check whether you can find ns.exe under ns-allinone-2.28/ns-2.28

12.  Copy the .bashrc to c:/cygwin/home/smallko
13.  Run the example script to test whether you have setup the path or not.
 

14.   If you see the error message like “ns command not found”, no worry about this. Sometimes even you have setup the path, but it does not work. You can copy the ns.exe (nam.exe) to the same place as the simulation script. Run the simulation with “./ns.exe” and it will be ok.



Examples for CBR traffic transmission over EDCF-based wireless networks




# globals and flags
set ns [new Simulator]

#number of nodes
set num_wired_nodes  1
set num_mobile_nodes 1
set num_bs_nodes     1 ;# number of base stations
set num_nodes [expr $num_wired_nodes + $num_mobile_nodes + $num_bs_nodes]
set bs_id $num_wired_nodes

# Parameter for wireless nodes
set opt(chan)           Channel/WirelessChannel    ;# channel type
set opt(prop)           Propagation/TwoRayGround   ;# radio-propagation model
set opt(netif)          Phy/WirelessPhy            ;# network interface type
set opt(mac)            Mac/802_11e                ;# MAC type
set opt(ifq)            Queue/DTail/PriQ           ;# interface queue type
set opt(ifqlen)         50
set opt(ll)             LL                         ;# link layer type
set opt(ant)            Antenna/OmniAntenna        ;# antenna model
set opt(ifqlen)         50                        ;# max packet in ifq
set opt(adhocRouting)   NOAH                      ;# routing protocol
set opt(x)          670  ;# X dimension of the topography
set opt(y)          670          ;# Y dimension of the topography

#smallko add the following two lines
Mac/802_11e set dataRate_  1Mb
Mac/802_11e set basicRate_ 1Mb
Mac/802_11e set backoff_mode_ 1

#set up for hierarchical routing
#(needed for routing over a basestation)
$ns node-config -addressType hierarchical
AddrParams set domain_num_ 2          ;# domain number
lappend cluster_num 1 1               ;# cluster number for each domain
AddrParams set cluster_num_ $cluster_num
lappend eilastlevel $num_wired_nodes [expr $num_mobile_nodes + $num_bs_nodes] ;# number of nodes for each cluster            
AddrParams set nodes_num_ $eilastlevel

#Open the nam trace file
set nf [open out.nam w]
$ns namtrace-all-wireless $nf $opt(x) $opt(y)
set ntr [open out.tr w]
$ns trace-all $ntr

set chan    [new $opt(chan)]
set topo    [new Topography]
$topo load_flatgrid $opt(x) $opt(y)

# Create God
create-god [expr $num_mobile_nodes + $num_bs_nodes]

# creating wired nodes
for {set i 0} {$i < $num_wired_nodes} {incr i} {
        set W($i) [$ns node 0.0.$i]
    puts "wired node $i created"
}


# creating base station
$ns node-config -adhocRouting $opt(adhocRouting) \
                 -llType $opt(ll) \
                 -macType $opt(mac) \
                 -ifqType $opt(ifq) \
                 -ifqLen $opt(ifqlen) \
                 -antType $opt(ant) \
                 -propType $opt(prop)    \
                 -phyType $opt(netif) \
                 -channel $chan      \
                 -topoInstance $topo \
                 -wiredRouting ON \
                 -agentTrace OFF \
                 -routerTrace OFF \
                 -macTrace OFF    \
                 -movementTrace OFF

set BS(0) [$ns node 1.0.0]
$BS(0) random-motion 0
puts "Base-Station node $bs_id created"
#provide some co-ord (fixed) to base station node
$BS(0) set X_ 1.0
$BS(0) set Y_ 2.0
$BS(0) set Z_ 0.0

# creating mobile nodes
$ns node-config -wiredRouting OFF
for {set i 0} {$i < $num_mobile_nodes} {incr i} {
                set wl_node_($i) [$ns node 1.0.[expr $i + 1]]  
                $wl_node_($i) random-motion 0               ;# disable random motion
    puts "wireless node $i created ..."
    $wl_node_($i) base-station [AddrParams addr2id [$BS(0) node-addr]]
    $wl_node_($i) set X_ [expr $i * 10]
    $wl_node_($i) set Y_ [expr $i * 10]
    $wl_node_($i) set Z_ 0.0
}

# linking of root to base-station node
$ns duplex-link $W(0) $BS(0) 10Mb 2ms DropTail

# linking of wired nodes to root node
#for {set i 1} {$i < $num_wired_nodes} {incr i} {
#    $ns duplex-link $W($i) $W(0) 10Mb 2ms DropTail
#}

set src_udp0 [new Agent/UDP]
$src_udp0 set class_ 0
# highest priority
$src_udp0 set prio_ 0
set dst_udp0 [new Agent/Null]
$ns attach-agent $wl_node_(0) $src_udp0
$ns attach-agent $W(0) $dst_udp0
set app0 [new Application/Traffic/CBR]
$app0 attach-agent $src_udp0
$ns connect $src_udp0 $dst_udp0
$ns at 0.0 "$app0 start"

set src_udp1 [new Agent/UDP]
$src_udp1 set class_ 1
$src_udp1 set prio_ 1
set dst_udp1 [new Agent/Null]
$ns attach-agent $wl_node_(0) $src_udp1
$ns attach-agent $W(0) $dst_udp1
set app1 [new Application/Traffic/CBR]
$app1 attach-agent $src_udp1
$ns connect $src_udp1 $dst_udp1
$ns at 0.3 "$app1 start"

set src_udp2 [new Agent/UDP]
$src_udp2 set class_ 2
$src_udp2 set prio_ 2
set dst_udp2 [new Agent/Null]
$ns attach-agent $wl_node_(0) $src_udp2
$ns attach-agent $W(0) $dst_udp2
set app2 [new Application/Traffic/CBR]
$app2 attach-agent $src_udp2
$ns connect $src_udp2 $dst_udp2
$ns at 0.1 "$app2 start"

set src_udp3 [new Agent/UDP]
#lowest priority
$src_udp3 set class_ 3
$src_udp3 set prio_ 3
set dst_udp3 [new Agent/Null]
$ns attach-agent $wl_node_(0) $src_udp3
$ns attach-agent $W(0) $dst_udp3
set app3 [new Application/Traffic/CBR]
$app3 attach-agent $src_udp3
$ns connect $src_udp3 $dst_udp3
$ns at 0.2 "$app3 start"

# Define node initial position in nam
for {set i 0} {$i < $num_mobile_nodes} {incr i} {
    $ns initial_node_pos $wl_node_($i) 20
   }

# Tell nodes when the simulation ends
for {set i 0} {$i < $num_mobile_nodes } {incr i} {
    $ns at 10.0 "$wl_node_($i) reset";
}

$ns at 100.0 "$BS(0) reset";
$ns at 100.0 "$app0 stop"
$ns at 100.0 "$app1 stop"
$ns at 100.0 "$app2 stop"
$ns at 100.0 "$app3 stop"
$ns at 110.0 "puts \"NS EXITING...\" ; $ns halt"

proc stop {} {
    global ns ntr nf
    close $ntr
    close $nf
}

# run the simulation
$ns run
Examples for CBR traffic transmission over DCF-based  wireless networks



# globals and flags
set ns [new Simulator]

#number of nodes
set num_wired_nodes  1
set num_mobile_nodes 1
set num_bs_nodes     1 ;# number of base stations
set num_nodes [expr $num_wired_nodes + $num_mobile_nodes + $num_bs_nodes]
set bs_id $num_wired_nodes

# Parameter for wireless nodes
set opt(chan)           Channel/WirelessChannel    ;# channel type
set opt(prop)           Propagation/TwoRayGround   ;# radio-propagation model
set opt(netif)          Phy/WirelessPhy            ;# network interface type
set opt(mac)            Mac/802_11                 ;# MAC type
set opt(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
set opt(ifqlen)         50
set opt(ll)             LL                         ;# link layer type
set opt(ant)            Antenna/OmniAntenna        ;# antenna model
set opt(ifqlen)         50                        ;# max packet in ifq
set opt(adhocRouting)   NOAH                       ;# routing protocol
set opt(x)          670  ;# X dimension of the topography
set opt(y)          670          ;# Y dimension of the topography

#smallko add the following two lines
Mac/802_11 set dataRate_  1Mb
Mac/802_11 set basicRate_  1Mb

#set up for hierarchical routing
#(needed for routing over a basestation)
$ns node-config -addressType hierarchical
AddrParams set domain_num_ 2          ;# domain number
lappend cluster_num 1 1               ;# cluster number for each domain
AddrParams set cluster_num_ $cluster_num
lappend eilastlevel $num_wired_nodes [expr $num_mobile_nodes + $num_bs_nodes] ;# number of nodes for each cluster            
AddrParams set nodes_num_ $eilastlevel

#Open the nam trace file
set nf [open out.nam w]
$ns namtrace-all-wireless $nf $opt(x) $opt(y)
set ntr [open out.tr w]
$ns trace-all $ntr

set chan    [new $opt(chan)]
set topo    [new Topography]
$topo load_flatgrid $opt(x) $opt(y)

# Create God
create-god [expr $num_mobile_nodes + $num_bs_nodes]

# creating wired nodes
for {set i 0} {$i < $num_wired_nodes} {incr i} {
        set W($i) [$ns node 0.0.$i]
    puts "wired node $i created"
}


# creating base station
$ns node-config -adhocRouting $opt(adhocRouting) \
                 -llType $opt(ll) \
                 -macType $opt(mac) \
                 -ifqType $opt(ifq) \
                 -ifqLen $opt(ifqlen) \
                 -antType $opt(ant) \
                 -propType $opt(prop)    \
                 -phyType $opt(netif) \
                 -channel $chan      \
                 -topoInstance $topo \
                 -wiredRouting ON \
                 -agentTrace OFF \
                 -routerTrace OFF \
                 -macTrace OFF    \
                 -movementTrace OFF

set BS(0) [$ns node 1.0.0]
$BS(0) random-motion 0
puts "Base-Station node $bs_id created"
#provide some co-ord (fixed) to base station node
$BS(0) set X_ 1.0
$BS(0) set Y_ 2.0
$BS(0) set Z_ 0.0

# creating mobile nodes
$ns node-config -wiredRouting OFF
for {set i 0} {$i < $num_mobile_nodes} {incr i} {
    set wl_node_($i) [$ns node 1.0.[expr $i + 1]]  
        $wl_node_($i) random-motion 0               ;# disable random motion
    puts "wireless node $i created ..."
    $wl_node_($i) base-station [AddrParams addr2id [$BS(0) node-addr]]
    $wl_node_($i) set X_ [expr $i * 10]
    $wl_node_($i) set Y_ [expr $i * 10]
    $wl_node_($i) set Z_ 0.0
}

# linking of root to base-station node
$ns duplex-link $W(0) $BS(0) 10Mb 2ms DropTail

# linking of wired nodes to root node
#for {set i 1} {$i < $num_wired_nodes} {incr i} {
#    $ns duplex-link $W($i) $W(0) 10Mb 2ms DropTail
#}

set src_udp0 [new Agent/UDP]
$src_udp0 set class_ 0
#$src_udp0 set prio_ 0
set dst_udp0 [new Agent/Null]
$ns attach-agent $wl_node_(0) $src_udp0
$ns attach-agent $W(0) $dst_udp0
set app0 [new Application/Traffic/CBR]
$app0 attach-agent $src_udp0
$ns connect $src_udp0 $dst_udp0
$ns at 0.0 "$app0 start"

set src_udp1 [new Agent/UDP]
$src_udp1 set class_ 1
#$src_udp1 set prio_ 1
set dst_udp1 [new Agent/Null]
$ns attach-agent $wl_node_(0) $src_udp1
$ns attach-agent $W(0) $dst_udp1
set app1 [new Application/Traffic/CBR]
$app1 attach-agent $src_udp1
$ns connect $src_udp1 $dst_udp1
$ns at 0.3 "$app1 start"

set src_udp2 [new Agent/UDP]
$src_udp2 set class_ 2
#$src_udp2 set prio_ 2
set dst_udp2 [new Agent/Null]
$ns attach-agent $wl_node_(0) $src_udp2
$ns attach-agent $W(0) $dst_udp2
set app2 [new Application/Traffic/CBR]
$app2 attach-agent $src_udp2
$ns connect $src_udp2 $dst_udp2
$ns at 0.1 "$app2 start"

set src_udp3 [new Agent/UDP]
$src_udp3 set class_ 3
#$src_udp3 set prio_ 3
set dst_udp3 [new Agent/Null]
$ns attach-agent $wl_node_(0) $src_udp3
$ns attach-agent $W(0) $dst_udp3
set app3 [new Application/Traffic/CBR]
$app3 attach-agent $src_udp3
$ns connect $src_udp3 $dst_udp3
$ns at 0.2 "$app3 start"

# Define node initial position in nam
for {set i 0} {$i < $num_mobile_nodes} {incr i} {
    $ns initial_node_pos $wl_node_($i) 20
   }

# Tell nodes when the simulation ends
for {set i 0} {$i < $num_mobile_nodes } {incr i} {
    $ns at 10.0 "$wl_node_($i) reset";
}

$ns at 100.0 "$BS(0) reset";
$ns at 100.0 "$app0 stop"
$ns at 100.0 "$app1 stop"
$ns at 100.0 "$app2 stop"
$ns at 100.0 "$app3 stop"
$ns at 110.0 "puts \"NS EXITING...\" ; $ns halt"

proc stop {} {
    global ns ntr nf
    close $ntr
    close $nf
}

# run the simulation
$ns run