Проблема беспроводной симуляции

Я не могу запустить эту симуляцию:

set pairs [lindex $argv 0]

# ====================================
# Define 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)             $pairs                     ;# pair of mobilenodes
set val(rp)             DSDV                       ;# routing protocol

# ======================================
# Main Program
# ======================================

#
# Initialize Global Variables
#

set ns [new Simulator]
set tracefd [open wl.tr w]

$ns use-newtrace
$ns trace-all $tracefd 

# set up topography object
set topo [new Topography]
#1000x1000m terrain
$topo load_flatgrid 1000 1000

#
# Create General Operations Director
#

set god_ [ create-god $val(nn) ]

Mac/802_11 set RTSThreshold_ 3000

#
#  Create the specified number of mobilenodes [$val(nn)] and "attach" them
#  to the channel. 

# configure node

        $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) \
             -channel [new $val(chan)] \
             -topoInstance $topo \
             -agentTrace ON \
             -routerTrace ON \
             -macTrace OFF \
             -movementTrace OFF

    for {set i 0} {$i < [expr {2*$val(nn)}] } {incr i} {
        set node_($i) [$ns node]    
        $node_($i) random-motion 0  ;# disable random motion
    }

#
# Provide initial (X,Y, Z=0) co-ordinates for mobilenodes
#
set rng [new RNG]
$rng seed 0

set unit 10.0;
set even_x 50.0;
set even_y 50.0;
set odd_x 50.0;
set odd_y 0.0;
for {set i 0} { $i < [expr {2*$val(nn)}] } {incr i} {
    set residue [expr {$i%2}];
#puts $residue
    set rand [expr [$rng uniform 0 1] + [ns-random 0] % 100];
    if { $residue ==0 } {

        $node_($i) set X_ [expr {$even_x + $rand}];
        $node_($i) set Y_ [expr {$even_y }]
        $node_($i) set Z_ 0.0;
    } else {
        $node_($i) set X_ [expr {$odd_x + $rand}];
        $node_($i) set Y_ [expr {$odd_y}];
        $node_($i) set Z_ 0.0;
    }
}

for {set i 0} { $i < $val(nn) } {incr i} {  
    set null_($i) [new Agent/Null]
    $ns attach-agent $node_([expr {($i*2)+1}]) $null_($i)
    set udp_($i) [new Agent/UDP]
    $ns attach-agent $node_([expr {2*$i}]) $udp_($i)
    set cbr_($i) [new Application/Traffic/CBR]
    $cbr_($i) set packetSize_ 1440  
    $udp_($i) set packetSize_ 1440
    $cbr_($i) set rate_ 500k
    $cbr_($i) attach-agent $udp_($i)
    $ns connect $udp_($i) $null_($i) 
}

for {set i 0} {$i < $val(nn)} {incr i} {
        $ns at 0.0 "$cbr_($i) start"
        $ns at 120.0 "$cbr_($i) stop"
}
$ns at 120.0 "$ns halt"
$ns run
$ns flush-trace
close $tracefd
puts "Starting Simulation..."
$ns run

Я получаю эту ошибку, может кто-нибудь, пожалуйста, помогите мне!!!

MAC_802_11: accessing MAC cache_ array out of range (src 33, dst 32, size 20)!
MAC_802_11: accessing MAC cache_ array out of range (src 33, dst 32, size 20)!
MAC_802_11: accessing MAC cache_ array out of range (src 33, dst 32, size 20)!
MAC_802_11: accessing MAC cache_ array out of range (src 32, dst 33, size 20)!
MAC_802_11: accessing MAC cache_ array out of range (src 32, dst 33, size 20)!
MAC_802_11: accessing MAC cache_ array out of range (src 32, dst 33, size 20)!
MAC_802_11: accessing MAC cache_ array out of range (src 32, dst 33, size 20)!
MAC_802_11: accessing MAC cache_ array out of range (src 32, dst 33, size 20)!
MAC_802_11: accessing MAC cache_ array out of range (src 32, dst 33, size 20)!
MAC_802_11: accessing MAC cache_ array out of range (src 32, dst 33, size 20)!
[suppressing additional MAC cache_ warnings]

person Arash    schedule 31.10.2012    source источник
comment
Ты уверен, что знаешь, что ты здесь делаешь? Способны ли вы понять каждую строку кода и ее назначение?   -  person asprin    schedule 31.10.2012
comment
@asprin Уважаемый asprin! я просто хочу запустить эту симуляцию и изучить ее, и я получил эту ошибку, и когда я искал, у меня ничего не было, не могли бы вы объяснить мне это, пожалуйста?   -  person Arash    schedule 31.10.2012
comment
На догадку (основанную на прочтении сообщений лога) нужно увеличить размер какого-то массива или нужно что-то сказать, что массив не такой большой в первом место. Я правда вообще не знаю ns2 — сетевые дела вообще не моя область — так что я не могу сказать, как это сделать, но глядя на код (и не видя очевидного 20 в это) Я предполагаю, что есть какое-то значение по умолчанию, которое не работает с вашей конфигурацией.   -  person Donal Fellows    schedule 31.10.2012


Ответы (2)


Следующие строки вызывают проблему:

set god_ [создать-бог $val(nn)]

god_ велел подготовиться к nn узлам. но через пару строк:

for {set i 0} {$i ‹ [expr {2*$val(nn)}] } {incr i} {

Вы создаете 2*nn узлов. Либо create-god [expr {2*$val(nn)}], либо избавьтесь от 2* там, где он появляется в коде.

person MLW    schedule 29.11.2012

Согласно http://www.isi.edu/nsnam/archive/ns-users/webarch/2001/msg04753.html, попробуйте

set god_ [создать-бог [выражение $val(nn) + 20]]

или какая-то вариация. Это создает большее количество объектов GOD (+20), строго говоря, вы должны точно определить, сколько вам нужно. Я думаю, что целое число - это количество определенных узлов.

person Tim Crone    schedule 01.11.2012