Friday, November 23, 2012

Bài 2: Chạy mô phỏng truyền dữ liệu trong NS2

Chủ đề: "Mô phỏng mạng bằng công cụ NS2"

Như ở bài 1 chúng ta đã cùng nhau tạo ra 1 Topo mạng bao gồm: nguồn, đích, các kết nối, đường truyền, hàng đợi...Nhưng mô hình bạn xây dựng vẫn chưa thực hiện được chức năng mô phỏng quá trình gửi dữ liệu. Để thực hiện được điều này ta thêm dòng code dưới đây bên dưới câu lệnh khai báo chiều dài hàng đợi:


#Tham so tien trinh toi nguon s1 lambda1 = 100.0
set lambda1   100.0
#Tham so tien trinh phuc vu m1 = lambda / d
#trong do d =0,8
set m1        120.0
#Tham so tien trinh toi nguon s2 lambda2 = 100.0
set lambda2   100.0
#Tham so tien trinh phuc vu m2
set m2        120.0
#Tham so tien trinh toi nguon s3 lambda3 = 100.0
set lambda3   100.0
#Tham so tien trinh phuc vu m3
set m3        120.0

# Tien trinh toi co khoang thoi gian den tuan theo phan bo ham mu 
set InterArrivalTime1 [ new RandomVariable/Exponential]
            $InterArrivalTime1 set avg_ [expr 1/$lambda1]

# Tien trinh phuc vu co toc do tuan theo phan bo ham mu
set pktSize1 [ new RandomVariable/Exponential]
            $pktSize1 set avg_ [ expr 100000.0/(8*$m1)]

# Thu tuc bat dau gui du lieu
proc sendpacket1 {} {
        global ns tcp1 InterArrivalTime1 pktSize1 flag1
        set time [$ns now]
        if [expr $flag1 == 0] {             
               $ns  at  [ expr $time + [$InterArrivalTime1  value]] "sendpacket1"
               set bytes [ expr round ([$pktSize1  value])]
               $tcp1 send $bytes
         }                         
                                    }
# Tien trinh toi co toc do tuan theo phan bo ham mu
set InterArrivalTime2 [ new RandomVariable/Exponential]
 $InterArrivalTime2 set avg_ [expr 1/$lambda2]

# Tien trinh phuc vu co toc do tuan theo phan bo ham mu
set pktSize2 [ new RandomVariable/Exponential]
 $pktSize2 set avg_ [ expr 100000.0/(8*$m2)]

# Thu tuc bat dau gui du lieu
proc sendpacket2 {} {
        global ns tcp2 InterArrivalTime2 pktSize2 flag2
        set time [$ns now]
            if [expr $flag2 == 0] {
              $ns  at  [ expr $time + [$InterArrivalTime2  value]] "sendpacket2"
              set bytes [ expr round ([$pktSize2  value])]
              $tcp2 send $bytes
         }                         
                                    }
# Tien trinh toi co toc do tuan theo phan bo ham mu
set InterArrivalTime3 [ new RandomVariable/Exponential]
 $InterArrivalTime3 set avg_ [expr 1/$lambda3]

# Tien trinh phuc vu co toc do tuan theo phan bo ham mu
set pktSize3 [ new RandomVariable/Exponential]
 $pktSize3 set avg_ [ expr 100000.0/(8*$m3)]

# Thu tuc bat dau gui du lieu
proc sendpacket3 {} {
         global ns tcp3 InterArrivalTime3 pktSize3 flag3
               set time [$ns now]
         if [expr $flag3 == 0] {           
               $ns  at  [ expr $time + [$InterArrivalTime3  value]] "sendpacket3"
               set bytes [ expr round ([$pktSize3  value])]
               $tcp3 send $bytes
         }                         
                                    }
 Đồng thời ngay trước câu lệnh thiết lập thời gian mô phỏng các bạn thêm dòng lệnh:
$ns at 0.0 "sendpacket1"
$ns at 0.0 "sendpacket2"
$ns at 0.0 "sendpacket3"

Lưu lại file BTL.tcl và chạy thì ta được mô hình sau:


Tài liệu tham khảo tiếng Việt về mô phỏng trong NS2:
 -> Tài liệu 1: Tải về 
 -> Tài liệu 2: Tải về

Bài 3: Cách vẽ đồ thị bằng công cụ Xgraph bằng công cụ NS2
 -> Download file chạy .tcl và file .awk của Project này:
-> Download file .awk: Tải về
-> Download file .tcl: Tải về

Chú ý: Để máy tính hoạt động trơn tru và được bảo dưỡng tự động thường xuyên, các bạn nên cài một số phần mềm chăm sóc hệ thống. Mình đã và đang sử dụng phần mềm chăm sóc hệ thống Glary Utilities Pro và thấy rất tốt, các bạn có thể Download và cài đặt bản full có kèm theo Key (serial) đầy đủ ( đã test) rất đơn giản tại đây: Tải về 
- Để bảo vệ máy tính tốt hơn chống lại các phần mềm gián điệp, virus độc hại mà không ngốn quá nhiều tài nguyên máy tính ngay cả ở chế độ hoạt động và chế độ chờ, mình khuyến nghị các bạn cài đặt và sử dụng phần mềm diệt Virus Avast internet security( Kèm theo key/Serial đã test): Tại đây

Click Yes nếu bạn cảm thấy bài viết này hữu ích.- Thanks!

26 comments:

  1. cảm ơn bạn nhiều.đúng lúc đang cần

    ReplyDelete
  2. cam on anh!!! chuc a luon thanh cong trong cuoc song.

    ReplyDelete
  3. các bạn cho mình hỏi là tại sao khi mình viết code lưu ở định dạng tenfile.tcl rồi ở lưu ngoài window, nhưng khi copy dán đoạn code vào trong ubutun ko được hả các bạn , hay là 2 hệ điều hành này ko cho phép lẫn nhau . ctrl + c ko được

    ReplyDelete
    Replies
    1. Bạn có thể dùng USB làm phương tiện để trung chuyển!

      Delete
  4. mở file code ns2 sao vay xin chi dum

    ReplyDelete
    Replies
    1. Bạn nên tham khảo một chút về tập lệnh trong Linux đã nhé( Google nhiều lắm). Trước tiên bạn sẽ phải tạo và lưu project của mình ở một thư mục nào đó. Giả sử file BTL.tcl của mình được tạo nằm thư mục: Home/ArganSv/Project , để thức hiện chạy file này bạn thực hiện hai công việc sau:
      1. Mở cửa sổ dòng lệnh Terminal và gõ mở thư mục chứa file cần chạy: cd Home/ArganSv/Project
      2. Chạy file BTL.tcl bằng cách gõ lệnh ns BTL.tcl

      Delete
    2. mình cài ns2 trên win 7 bạn oi minh cài bằng Cygwin nên làm xong mô phỏng có file nam va file ns nhưng bung file nam bằng notepd ko dc

      Delete
  5. mình đang làm về đánh giá hiệu suất tcp trong manet, mình muốn đánh giá hiệu suất của tcp-door so với tcp chuẩn, hiện tại mình đang mắc phần viết code và mô phỏng nó, bạn có thể chỉ dùm mình viết code mô phỏng nó như thế nào được không?

    ReplyDelete
  6. bạn có tài liệu hướng dẫn mô phỏng các giao thức cải thiện hiệu suất tcp trong mạng manet không cho mình xin?

    ReplyDelete
  7. Bạn có thể hướng dẫn mình demo 1 số kỹ thuật xác thực trong mạng MANET dùng công cụ NS2 này được không .. Tks bạn nhiều.

    ReplyDelete
  8. diennd@ubuntu:~$ ns BTL.tcl
    ns: sendpacket1: wrong # args: should be {_o10 message ?args...?}
    while executing
    "$InterArrivalTime1"
    invoked from within
    "if [expr $flag1==0] {
    $ns at [expr $time + [$InterArrivalTime1]] "sendpacket1"
    set bytes [expr round ([$pktSize1 value])]
    $tcp1 s..."
    (procedure "sendpacket1" line 4)
    invoked from within
    "sendpacket1"

    Minh add cai nay vao chuong trinh nhu o bai 1 thi thay bao loi nay? Cac ban co biet do la loi gi khong chi cho minh cach sua voi!!!

    ReplyDelete
  9. Mình đang cần mô phỏng mạng bằng ns2 mà không mô phỏng được, bạn Thứ Lễ hay bạn nào giúp mình với, mình cảm ơn nhiều.
    Mail của mình: vinhnv.sicom@gmail.com
    SĐT: 0973 313 893
    Mình cảm ơn và hậu tạ. Hi, mình đang cần rất gấp

    ReplyDelete
  10. This comment has been removed by the author.

    ReplyDelete
  11. Rất cảm ơn những kiến thức của bạn
    Mình đang cần làm bài tập điều kiện và thi cuối kỳ
    Đề bài:
    Câu 1: Sử dụng công cụ jperf để đo hiệu năng của 1 mạng LAN, 1 mạng WiFi với mô hình như sau:
    - 1 luồng TCP
    - 2 luồng TCP
    - 1 luồng TCP + UDP với tốc độ 1Mbps, 10Mbps, 30Mbps
    Mỗi mô hình như trên thay đổi tham số:
    Window size (100KB, 500KB) , MTU= 500, 1K, 2K.
    Yêu cầu mỗi thí nghiệm phải có nhận định của tác giả.

    Câu 2: Đề tài cuối kỳ (thay cho thi cuối kỳ)
    Thực hiện Bài tập thực hành NS-2 trong file Bai tap thuc hanh NS-2.
    Đề tài cuối kỳ là chạy được mô phỏng (phải hiểu được) từ bài 8 đến bài 10 trong file trên.

    Chân thành cảm ơn và hậu tạ
    Name: Mr. Tuấn
    Phone: 0933.397.428
    Email: tuananh84pt@gmail.com

    ReplyDelete
  12. Mình đang mô phỏng chương trình Tính độ Trễ Wlan nhưng sao khi chạy file tcl thì file ou1.tr và out2.tr không chạy trên xgraph, còn file out0.tr và out50ms.tr thì chạy được. Mong các bạn giúp Mình kiểm tra code thử. thank!
    #Mã nguồn chương trình tính độ trễ kênh voice theo tải. File: vwqos.tcl
    #----------------Khởi tạo thông số------------------------------------------------------
    global opt
    set opt(chan) Channel/WirelessChannel
    set opt(prop) Propagation/TwoRayGround ;# mô hình truyền sóng
    set opt(netif) Phy/WirelessPhy
    set opt(mac) Mac/802_11
    set opt(ifq) Queue/DropTail/PriQueue ;# interface queue
    set opt(ll) LL ;# link layer
    set opt(ant) Antenna/OmniAntenna
    set opt(x) 1000
    set opt(y) 1000
    set opt(ifqlen) 50 ;# length of queues
    set opt(tr) wcwqos2.tr ;# trace file
    set opt(tr1) wcwqos21.tr
    set opt(namtr) wcwqos2.nam ;# sim file
    set opt(namtr1) wcwqos21.nam
    set opt(nn) 20 ;# numnode
    set opt(adhocRouting) DSDV
    set opt(cp) ""
    set opt(sc) "../mobility/scene/scen-20-test" ;# tạo vị trí các node
    set opt(stop) 2000 ;# thời gian dừng chương trình
    set num_wired_nodes 2
    set num_bs_nodes 2

    #khởi tạo theo dõi
    set f0 [open out0.tr w]
    set f1 [open out1.tr w]
    set f2 [open out2.tr w]
    set f3 [open out50ms.tr w]

    proc init {} {
    global f0 f1 f2 f3
    set f0 [open out0.tr w]
    set f1 [open out1.tr w]
    set f2 [open out2.tr w]
    set f3 [open out50ms.tr w]
    }

    #Other default settings---thong so tang link-----------------------------
    LL set mindelay_ 50us
    LL set delay_ 25us
    LL set bandwidth_ 0
    # ---------------------chế độ hàng đợi--------------------------------------

    Queue/DropTail/PriQueue set Prefer_Routing_Protocols 1

    #unity gain, omni-directional antennas
    #set up the antennas to be centered in the node and 1.5 meters above it
    Antenna/OmniAntenna set X_ 0
    Antenna/OmniAntenna set Y_ 0
    Antenna/OmniAntenna set Z_ 1.5
    Antenna/OmniAntenna set Gt_ 1.0
    Antenna/OmniAntenna set Gr_ 1.0

    #wireless-phy.cc
    #Initialize the SharedMedia interface with parameters to make
    #it work like the 914MHz Lucent WaveLAN DSSS radio interface
    Phy/WirelessPhy set CPThresh_ 10.0 ;#threshold physical,
    Phy/WirelessPhy set CSThresh_ 1.559e-11 ;#connection pattern
    Phy/WirelessPhy set RXThresh_ 3.652e-10
    Phy/WirelessPhy set Rb_ 2*1e6
    Phy/WirelessPhy set Pt_ 0.2818
    Phy/WirelessPhy set freq_ 914e+6 ;#freq being used
    Phy/WirelessPhy set L_ 1.0

    #-pl -std -Pt -fr -Gt -Gr -L -ht -hr -d0 -r -m

    # ----------------------------------------------------------------------------------
    set ns_ [new Simulator]
    $ns_ node-config -addressType hierarchical
    $ns_ color 0 Blue
    $ns_ color 1 green
    $ns_ color 2 Red

    # ----------------------thiết lập các miền kế thừa-----------------------------
    AddrParams set domain_num_ 3 ;#thiet lap 3 domain, hai wireless, mot wired.
    lappend cluster_num 2 1 1 ;#so luong cluster trong moi domain ;#(wired,wireless,wireless)
    AddrParams set cluster_num_ $cluster_num
    lappend eilastlevel 1 1 4 1 ;#so luong node cua moi cluster

    AddrParams set nodes_num_ $eilastlevel
    set tracefd [open $opt(tr) w]
    $ns_ trace-all $tracefd
    set namtracefd [open $opt(namtr) w]

    ReplyDelete
  13. phần tiếp theo của chương trình, mong các bạn giúp dùm.
    #----------theo doi traffic ca wireless va wireline.--------------------------
    $ns_ namtrace-all-wireless $namtracefd 800 600

    #------------------------tạo topo mang-----------------------------------------
    set topo [new Topography]
    $topo load_flatgrid $opt(x) $opt(y)

    # god needs to know the number of all wireless interfaces
    #General Operations Director (GOD) +
    set god_ [create-god [expr $opt(nn) +$num_bs_nodes + $num_wired_nodes ]]

    #create wired nodes, domain=0
    #each cluster each node in just one domain
    set temp {0.0.0 0.1.0}
    for {set q 0} {$q < $num_wired_nodes} {incr q} {
    set W($q) [$ns_ node [lindex $temp $q]]
    $W($q) color "#66660000ffff"
    }

    $W(0) set X_ 00.0
    $W(0) set Y_ 100.0

    #------------------------config BS node------------------------------------------

    $ns_ node-config -adhocRouting $opt(adhocRouting) \
    -llType $opt(ll) \
    -macType $opt(mac) \
    -ifqType $opt(ifq) \
    -ifqLen $opt(ifqlen) \
    -antType $opt(ant) \
    -propInstance [new $opt(prop)] \
    -phyType $opt(netif) \
    -channel [new $opt(chan)] \
    -topoInstance $topo \
    -wiredRouting ON \
    -agentTrace ON \
    -routerTrace ON \
    -macTrace ON

    #$mobilenode start
    set temp {1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.0.10 1.0.11
    1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 }

    #domain.cluster.node for fist wireless domain
    set BS(0) [$ns_ node [lindex $temp 0]] ;#gan cho bs(0)1.0.0
    set BS(1) [$ns_ node 2.0.0] ;#gan cho bs(1)2.0.0
    $BS(0) random-motion 1
    $BS(1) random-motion 1
    $BS(0) color "#ffff00000000"
    $BS(1) color "#ffff00000000"

    $ns_ at 0.0 "$BS(0) label BS(0)"
    $ns_ at 0.0 "$BS(1) label BS(1)"
    #$ns_ initial_node_pos $BS(0) 100 ;#khoi tao kich thuoc cua node
    #$ns_ initial_node_pos $BS(1) 100

    ReplyDelete
  14. #-----------configure for mobilenodes--------------

    $ns_ node-config -wiredRouting OFF\-wirelessRouting ON
    #tao cac mobile node- co dia chi ke thua tu cac station cua no, chi thi trang thai ket noi #do tram nao quan ly

    for {set j 0} {$j < $opt(nn)} {incr j} {
    set node_($j) [ $ns_ node [lindex $temp [expr $j+1]] ] $node_($j) base-station [AddrParams addr2id [$BS(0) node-addr]]
    $node_($j) random-motion 1
    }


    #create links between wired and BS nodes
    $ns_ duplex-link $W(0) $W(1) 11Mb 2ms DropTail ;#delay 2ms
    $ns_ duplex-link $W(1) $BS(0) 11Mb 2ms DropTail ;#
    $ns_ duplex-link $W(1) $BS(1) 11Mb 2ms DropTail

    #create the performance for 4 node
    $ns_ duplex-link-op $W(0) $W(1) orient down
    $ns_ duplex-link-op $W(1) $BS(0) orient left-down
    $ns_ duplex-link-op $W(1) $BS(1) orient right-down

    #khoi tao vi tri cho cac node, kich co cua cac node wireless
    for {set q 0} {$q < $opt(nn)} {incr q} {
    $ns_ initial_node_pos $node_($q) 20;#try to positor
    $node_($q) color "#33339999"
    $ns_ at 0.0 " $node_($q) color #33339999f "
    }

    #-------Define a 'finish' procedure----------------
    proc finish {} {
    global f0 f1 f2 f3 numnode t qe i pktsdelay delaychan loadper sim_interval
    #Close the output files
    close $f0
    close $f1
    close $f2

    puts "so luong node la $numnode"
    puts "so luong tong packet tre vuot qua 50ms : $t"

    #so luong pkts tre cua moi kenh trong tung khoang sim
    for {set k 0} { $k < $numnode} { incr k } {
    puts "so luong packet tre vuot qua 50ms channel$k: $pktsdelay($k)"
    }

    for {set k1 0} { $k1 < $sim_interval} { incr k1 } {
    puts "tai mang trong moi khoang thoi gian mo phong thu $k1 = $loadper($k1)"
    puts "num of channel delay not precede 50ms qe($k1)= $qe($k1)"
    puts $f3 " $loadper($k1) [expr $numnode - $qe($k1)]"
    }
    close $f3
    puts "so i luc nay $i"
    puts "num of channel delay not precede 50ms delaychan= , $delaychan"
    if {$i< $numnode} {puts "so luong packet tre vuot qua 50ms channel$i: $pktsdelay($i)" }

    #Execute NAM on the trace file
    exec nam wcwqos2.nam

    #Call xgraph to display the results
    exec xgraph out0.tr -geometry 600x400 -t "timedelay " -x "secs" -y "secs" -m &
    #exec xgraph out1.tr -geometry 800x400 -t "bandwith" -x "secs" -y "kbps" &
    #exec xgraph out2.tr -geometry 800x200 -t "npkts" -x "secs" -y "pkts" &
    #exec xgraph out50ms.tr -geometry 600x400 -bd "green" -t "number of voice channel with delay 50ms" -x "Load(%)" -y "nvoicechannel" -m &

    exec xgraph out50ms.tr -geometry 600x400 -bd "green" -t "so luong kenh voice thoa delay <50ms" -x "Load(%)" -y "nvoicechannel" -m &

    exit 0
    }

    ReplyDelete
  15. #Define a procedure that attaches a UDP agent to a previously created node
    #'node' and attaches an Expoo traffic generator to the agent with the
    #characteristic values 'size' for packet size 'burst' for burst time,
    #'idle' for idle time and 'rate' for burst peak rate. The procedure connects
    #the source with the previously defined traffic sink 'sink' and returns the
    #source object.

    proc attach-expoo-traffic { node sink size burst idle rate } {
    #Get an instance of the simulator
    set ns_ [Simulator instance]

    #Create a UDP agent and attach it to the node
    set source [new Agent/UDP] ;#using udp protocol
    $ns_ attach-agent $node $source


    #Create an Expoo traffic agent and set its configuration parameters
    set traffic [new Application/Traffic/Exponential]
    $traffic set packetSize_ $size ;#the constant size of the packets generated
    $traffic set burst_time_ $burst ;#the average “on” time for the generator
    $traffic set idle_time_ $idle ;#the average“off”time for the generator
    $traffic set rate_ $rate ;#the sending rate during“on”times
    ;#ttl--> time to live, default = 32
    ;#dung cho traffic khong day, Wlan

    #Attach traffic source to the traffic generator
    $traffic attach-agent $source
    #Connect the source and the sink
    $ns_ connect $source $sink
    return $traffic
    }
    #-----------------------------------------------------------------------------------------

    set numnode 20 ;# so luong node
    set start_rate 0.0 ;# thoi gian bat dau mo phong
    set time_sim 20.0 ;# khoang mo phong
    set load 0.0 ;# tai mang
    set num_chan 0 ;#so kenh thoa man
    set delay 0.0

    for {set i 0} {$i < $numnode} {incr i} {
    set sink($i) [new Agent/LossMonitor]
    $ns_ attach-agent $W(0) $sink($i)
    }

    #kiem tra thoa man timedelay = 50ms,100ms
    proc delaycheck { i timedelay LM startsim endsim} {
    global M1 f0 f1 f2 maxdelay mindelay sink5 sink0 sink1 sink2 t pktsdelay1
    global pktsdelay delaychan sumband

    #Get an instance of the simulator
    set ns_ [Simulator instance]

    #Set the time after which the procedure should be called again
    set time 0.01
    #puts "kiem tra lan thu $i"

    set bw0 [$LM set lastPktTime_ ]
    #set bw1 [$LM set bytes_]
    #set bw2 [$LM set npkts_]
    #Get the current time
    set now [$ns_ now]

    #Calculate the bandwidth (in MBit/s) and write it to the files
    # puts $f0 "$now [expr [expr $now - $bw0]/$time]"

    if {$bw0 > 0} {
    puts $f0 "$now [expr $now - $bw0]"
    }

    #puts $f1 "$now [expr $bw1/$time*8/1000000]"
    #puts $f2 "$now [expr $bw2]"
    puts "$now $bw0 [expr [expr $now - $bw0]*1000 ]"

    if { ($now <= $endsim)& ([expr $now - $bw0] >= $timedelay) & ($bw0 > $startsim )} {
    incr t
    incr pktsdelay($i)
    #puts "so luong packet tre vuot qua 50ms channel$i: $pktsdelay($i)"
    set intervaldelay [expr $now - $bw0]
    #puts "*** $now---- $bw0 ----- $intervaldelay *** "

    }

    #Reset the bytes_ values on the traffic sinks
    $LM set lastPktTime_ 0
    $LM set bytes_ 0
    $LM set npkts_ 0

    #Re-schedule the procedure
    if { ($now <= $endsim)} {
    $ns_ at [expr $now+$time] "delaycheck $i $timedelay $LM $startsim $endsim"
    }
    }

    ReplyDelete
  16. # -----------------lap lich mo phong----------------------------------------------------
    proc segment-sim {start stop size ontime idle rate} {
    global ns_ numnode node_ sink

    for {set i 0} {$i < $numnode} {incr i} {
    set source($i) [attach-expoo-traffic $node_($i) $sink($i) $size $ontime $idle $rate]
    $ns_ at $start "$source($i) start"
    $ns_ at $stop "$source($i) stop"
    }
    }

    #------------tinh so kenh delay trong moi khoang thoi gian mo phong-----------
    proc ndelaychan {numnode so } {
    global pktsdelay qe
    for {set i1 0 } {$i1 < $numnode } {incr i1 } {
    if { $pktsdelay($i1) >0.0 } { incr qe($so) }
    puts "num of channel delay not precede 50ms at sim oder $so = , $qe($so) "
    }
    }

    set sim_interval 8 ;#so lan thuc hien mo phong theo tai
    set start 0 ;# thoi gian bat dau
    set T_sim 20.0 ;# khoang thoi gian
    set end $T_sim
    set rate 64000.0 ;# toc do cua cac kenh
    set size 252 ;#kich co packet
    set ontime 2 ;# thoi gian on cua nguon
    set idle 1 ;# thoi gian off cua nguon
    set t 0 #tong so packet tre
    set delaychan 0 # so kenh tre trong moi lan thuc hien

    for {set l 0} {$l < $sim_interval } { incr l} {
    set qe($l) 0
    $ns_ at $start "reset"
    segment-sim $start $end $size $ontime $idle $rate

    for {set i 0 } {$i < $numnode } {incr i } {
    set pktsdelay($i) 0
    #if {[delaycheck $i 0.05 $sink($i) $start $end]== 1 } { incr numchan};
    delaycheck $i 0.05 $sink($i) $start $end
    }

    set sumband($l) [expr $rate*2/3*$i]
    set loadper($l) [expr $sumband($l)/11000000*100]
    $ns_ at $end " ndelaychan $numnode $l ";

    set start [expr $start + $T_sim + 5.0]
    set end [expr $start + $T_sim]
    set rate [expr $rate + 64000 ]

    }

    #--------------------------------------------------------------------------------------
    #Start logging the received bandwidth
    $ns_ at [expr $end + 1.0] "finish" ;# thoi diem dung
    $ns_ at 0.0 "init"

    #---------reset lai nhung bo dem goi delay---------------------------------------
    proc reset {} {
    global numnode pktsdelay
    for {set i 0 } {$i < $numnode } {incr i } {
    set pktsdelay($i) 0
    }
    }

    # Define node movement model
    puts "Loading scenario file..."
    source $opt(sc)

    #-------------------------dung bien dich--------------------------------------------
    for {set p 0} {$p < $opt(nn) } {incr p} {
    $ns_ at $opt(stop).0000010 "$node_($p) reset";
    }
    $ns_ at $opt(stop).0000010 "$BS(0) reset";

    $ns_ at $opt(stop).1 "puts \"NS EXITING...\" ; $ns_ halt"

    puts "Starting Simulation..."
    $ns_ run

    ReplyDelete
  17. Mn cho hoi lamda xac dinh nhu nao vay :D

    ReplyDelete
  18. bạn cho mk hỏi là câu lệnh khai bái chiều dài hàng đợi là ntn vậy? Mk gõ code như trên nhưng n báo lỗi chỗ lambda

    ReplyDelete
  19. bạn cho mk hỏi là câu lệnh khai bái chiều dài hàng đợi là ntn vậy? Mk gõ code như trên nhưng n báo lỗi chỗ lambda

    ReplyDelete