[ns] Problem NOAH with wired cum wireless scenario
Naxo
jogissa1 at teleco.upv.es
Tue Mar 6 04:42:37 PST 2007
Hi all !,
I have ns-2 2.30 and I've installed recently NOAH protocol. After succesful test in wireless simple scenario, I add a couple of wired nodes, resulting a topology of two wired nodes, one base station node, and 4 wireless nodes (one of them acts as a repeater that connects the rest of the wireless nodes and base-station node). Problem comes when I send traffic form a wired node to a wireless one, appearing this error:
--- Classfier::no-slot{} default handler (tcl/lib/ns-lib.tcl) ---
_o18: no target for slot -1
_o18 type: Classifier/Hash/Dest
content dump:
classifier _o18
0 offset
0 shift
2147483647 mask
1 slots
slot 1: _o152 (Classifier/Port)
-1 default
---------- Finished standard no-slot{} default handler ----------
I am using cygwin in its latest release, but I think there is no problem with that. If anyone could help me, I ould be very pleased. Thanks in advance!!
I enclose my whole script, if it helps:
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) 4 ;# number of mobilenodes
set val(bs) 1 ;# number of base station nodes
set val(wired) 2 ;# number of wired nodes
set val(rp) NOAH ;# routing protocol
set val(x) 3000
set val(y) 3000
set timefin 5.0
set pi 3.141592654
set incrfase [expr ($pi/($val(nn)-2))]
# ======================================================================
# ======================================================================
# Programa Principal
# ======================================================================
# ======================================================================
#=======================================================================
# Inicializacion de las variables globales y trazas
#=======================================================================
set ns_ [new Simulator]
$ns_ use-newtrace
set tracefd [open prueba.tr w]
$ns_ trace-all $tracefd
set tracenam [open prueba.nam w]
$ns_ namtrace-all-wireless $tracenam $val(x) $val(y)
set perdidos0 [open perdidos0.tr w]
set recibidos0 [open recibidos0.tr w]
#=======================================================================
# Declaracion de la topografia
#=======================================================================
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
#=======================================================================
# Creacion del objeto God
#=======================================================================
set god_ [create-god [expr $val(nn)+$val(bs)]]
#=======================================================================
# Creacion del canal
#=======================================================================
set canal [new $val(chan)]
#=======================================================================
# Configuracion y creacion de nodos
#=======================================================================
# Definimos los nodos cableados (puesto de mando y core network)
set mando [$ns_ node]
$mando set X_ 0
$mando set Y_ 1500
$mando set Z_ 0
set core [$ns_ node]
$core set X_ 50
$core set Y_ 1500
$core set Z_ 0
$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) \
-topoInstance $topo \
-wiredRouting ON \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF \
-channel $canal
# Definimos los parametros de la antena para el puesto avanzado,
# asi como su cobertura (2.933km), potencia...
Antenna/OmniAntenna set X_ 0
Antenna/OmniAntenna set Y_ 0
Antenna/OmniAntenna set Z_ 8
Antenna/OmniAntenna set Gt_ 21
Antenna/OmniAntenna set Gr_ 21
Phy/WirelessPhy set CPThresh_ 10.0
Phy/WirelessPhy set CSThresh_ 8.40163e-21
Phy/WirelessPhy set Pt_ 0.281838
Phy/WirelessPhy set freq_ 2.4e+9
Phy/WirelessPhy set L_ 1.0
Phy/WirelessPhy set RXThresh_ 8.40163e-18
$ns_ node-config -antType $val(ant) \
-phyType $val(netif)
set base [$ns_ node]
$base random-motion 0
$base set X_ 100
$base set Y_ 1500
$base set Z_ 0
$ns_ initial_node_pos $base 10
# Definimos los parametros de la antena para la unidad movil,
# asi como su cobertura (1.466km), potencia...
Antenna/OmniAntenna set X_ 0
Antenna/OmniAntenna set Y_ 0
Antenna/OmniAntenna set Z_ 4
Antenna/OmniAntenna set Gt_ 9.5
Antenna/OmniAntenna set Gr_ 9.5
Phy/WirelessPhy set CPThresh_ 10.0
Phy/WirelessPhy set CSThresh_ 9.4121e-20
Phy/WirelessPhy set Pt_ 0.281838
Phy/WirelessPhy set freq_ 2.4e+9
Phy/WirelessPhy set L_ 1.0
Phy/WirelessPhy set RXThresh_ 9.4121e-17
$ns_ node-config -antType $val(ant) \
-phyType $val(netif) \
-wiredRouting OFF
set unimovil [$ns_ node]
$unimovil random-motion 0
$unimovil set X_ 1000
$unimovil set Y_ 1500
$unimovil set Z_ 0
$ns_ initial_node_pos $unimovil 10
# Definimos los parametros de la antena para los soldados,
# asi como su cobertura (550m), potencia...
Antenna/OmniAntenna set X_ 0
Antenna/OmniAntenna set Y_ 0
Antenna/OmniAntenna set Z_ 1.5
Antenna/OmniAntenna set Gt_ 1
Antenna/OmniAntenna set Gr_ 1
Phy/WirelessPhy set CPThresh_ 10.0
Phy/WirelessPhy set CSThresh_ 2.04815e-19
Phy/WirelessPhy set Pt_ 0.281838
Phy/WirelessPhy set freq_ 2.4e+9
Phy/WirelessPhy set L_ 1.0
Phy/WirelessPhy set RXThresh_ 1.39891e-16
$ns_ node-config -antType $val(ant) \
-phyType $val(netif)
for {set i 0} {$i < [expr $val(nn)-1]} {incr i} {
set soldado($i) [$ns_ node]
$soldado($i) random-motion 0 ;# disable random motion
$soldado($i) set X_ [expr int(1000+200*cos($i*$incrfase-($pi/2)))]
$soldado($i) set Y_ [expr int(1500+200*sin($i*$incrfase-($pi/2)))]
$soldado($i) set Z_ 0
$ns_ initial_node_pos $soldado($i) 10
}
# ======================================================================
# Definicion de las tablas de enrutamiento para el modo NOAH
# ======================================================================
# Definimos las de los soldados
for {set i 0} {$i < [expr $val(nn)-1]} {incr i} {
set cmd "[$soldado($i) set ragent_] routing [expr $val(nn)+$val(bs)+$val(wired)]"
for {set to 0} {$to < [expr $val(nn)+$val(bs)+$val(wired)]} {incr to} {
if {$to < [expr $i+4]} {
set hop 3
} elseif {$to > [expr $i+4]} {
set hop 3
} else {
set hop [expr $i+4]
}
set cmd "$cmd $to $hop"
}
eval $cmd
}
# Definimos la de la base
set cmd "[$base set ragent_] routing [expr $val(nn)+$val(bs)+$val(wired)]"
for {set to 0} {$to < [expr $val(nn)+$val(bs)+$val(wired)]} {incr to} {
if {$to < 2} {
set hop 1
} elseif {$to > 2} {
set hop 3
} else {
set hop 2
}
set cmd "$cmd $to $hop"
}
eval $cmd
# Definimos la de la unidad movil
set cmd "[$unimovil set ragent_] routing [expr $val(nn)+$val(bs)+$val(wired)]"
for {set to 0} {$to < [expr $val(nn)+$val(bs)+$val(wired)]} {incr to} {
if {$to < 3} {
set hop 2
} else {
set hop $to
}
set cmd "$cmd $to $hop"
}
eval $cmd
# Definimos la del puesto de mando
#set cmd "[$mando set ragent_] routing [expr $val(nn)+$val(bs)+$val(wired)]"
# for {set to 0} {$to < [expr $val(nn)+$val(bs)+$val(wired)]} {incr to} {
# if {$to > 0} {
# set hop 1
# } else {
# set hop 0
# }
# set cmd "$cmd $to $hop"
# }
#eval $cmd
# Definimos la de la core network
#set cmd "[$core set ragent_] routing [expr $val(nn)+$val(bs)+$val(wired)]"
# for {set to 0} {$to < [expr $val(nn)+$val(bs)+$val(wired)]} {incr to} {
# if {$to < 1} {
# set hop 0
# } elseif {$to > 1} {
# set hop 2
# } else {
# set hop 1
# }
# set cmd "$cmd $to $hop"
# }
#eval $cmd
# ======================================================================
# Creacion de los enlaces
# ======================================================================
$ns_ duplex-link $mando $core 10Mb 2ms DropTail
$ns_ duplex-link $core $base 10Mb 2ms DropTail
# ======================================================================
# Creacion de Agentes para transferir datos
# ======================================================================
# Empleo de RTP, con trafico de tipo exponencial
set rtp [new Agent/RTP]
set exp [new Application/Traffic/Exponential]
$ns_ attach-agent $core $rtp
$exp attach-agent $rtp
$exp set packetSize_ 512
$exp set burst_time_ 1
$exp set idle_time_ 0
$exp set rate_ 64k
# ======================================================================
# Creacion de agentes monitores
# ======================================================================
# Monitorizamos las perdidas
set monitor0 [new Agent/LossMonitor]
$ns_ attach-agent $unimovil $monitor0
$ns_ connect $rtp $monitor0
$ns_ at 0.0 "comenzar_medidas"
$ns_ at 1.0 "medir"
$ns_ at 2.0 "$exp start"
$ns_ at 4.0 "$exp stop"
# ======================================================================
# Inicializacion de las medidas y proceso de medidas
# ======================================================================
proc comenzar_medidas {} {
global ns_ monitor0
$monitor0 set bytes_ 0
$monitor0 set nlost_ 0
}
proc medir {} {
global ns_ perdidos0 recibidos0 monitor0
set ns_ [Simulator instance]
set frecuencia 0.5
set now [$ns_ now]
set perd0 [expr 8*[$monitor0 set nlost_]]
set rec0 [expr 8*[$monitor0 set bytes_]]
puts $perdidos0 "$now $perd0"
puts $recibidos0 "$now $rec0"
$monitor0 set bytes_ 0
$monitor0 set nlost_ 0
$ns_ at [expr $now+$frecuencia] "medir"
}
# ======================================================================
# Aviso a los nodos de la finalizacion
# ======================================================================
$ns_ at $timefin "$base reset"
$ns_ at $timefin "$unimovil reset"
for {set i 0} {$i < [expr $val(nn)-1] } {incr i} {
$ns_ at $timefin "$soldado($i) reset"
}
# ======================================================================
# Exit Process
# ======================================================================
$ns_ at $timefin "finish"
proc finish {} {
global ns_ tracefd tracenam perdidos0 recibidos0
$ns_ flush-trace
close $tracefd
close $tracenam
close $perdidos0
close $recibidos0
exit 0
}
$ns_ run
More information about the Ns-users
mailing list