Skip to content

Instantly share code, notes, and snippets.

@edigreat
Last active December 15, 2015 22:35
Show Gist options
  • Select an option

  • Save edigreat/1e6cc1d85a290d1747a4 to your computer and use it in GitHub Desktop.

Select an option

Save edigreat/1e6cc1d85a290d1747a4 to your computer and use it in GitHub Desktop.
Simulacion de un Router como un buffer
set ns [new Simulator]
set numeroNodos 5
#Creamos un archivo de trace
set mytrace [open out.tr w]
$ns trace-all $mytrace
#Creamos un trace de nam
set myNam [open out.nam w]
$ns namtrace-all $myNam
#Procedimiento de finalizacion
proc finish {} {
global ns mytrace myNam
$ns flush-trace
close $mytrace
close $myNam
exec nam out.nam &
exit 0
}
$ns color 1 red ;
$ns color 2 SeaGreen ;
$ns color 3 blue ;
#Creamos nodos fuente
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Creando el nodo fuente n$i"
set n($i) [$ns node]
}
#Creamos nodos "Gateway"
set g1 [$ns node]
set g2 [$ns node]
#Creamos nodos destino
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Creando el nodo destino r$i"
set r($i) [$ns node]
}
# Conectamos los nodos fuentes con g1
# duplex-link src dst bw delay qtype(tipo de cola entre los nodos)
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Conectado el nodo fuente n$i con g1 "
$ns duplex-link $n($i) $g1 1Mb 10ms DropTail
}
#conectados los "Gateway"
$ns duplex-link $g1 $g2 1Mb 10ms DropTail
# Conectamos g2 con los nodos destinos
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Conectado el g2 con nodo destino r($i)"
$ns duplex-link $r($i) $g2 1Mb 10ms DropTail
}
#Posicionamiento para grafico nam
#$ns duplex-link-op $n0 $g1 orient right
#$ns duplex-link-op $n1 $g1 orient right
#$ns duplex-link-op $g1 $g2 orient left
#tamanio de la cola entre g1 y g2 en paquetes
$ns queue-limit $g1 $g2 10
#Verificador de trafico
#$ns duplex-link-op $n0 $g1 queuePos 0.5
#$ns duplex-link-op $n1 $g1 queuePos 0.5
$ns duplex-link-op $g1 $g2 queuePos 0.5
#Creamos los agentes TCP fuente
#Agent/TCP/Reno - a Reno TCP sender
#Agent/TCP/Newreno - Reno with a modification
#Agent/TCP/Sack1 - TCP with selective repeat (follows RFC2018)
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Creando tcp fuente tcp$i"
set tcp($i) [new Agent/TCP/Newreno]
}
#Relacionamos los agentes TCP FUENTE
#con los nodos fuentes
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "relacionando n$i con tcp$i "
$ns attach-agent $n($i) $tcp($i)
}
#Creamos los agentes TCP Destino
#
# Agent/TCPSink - TCP sink with one ACK per packet
# Agent/TCPSink/DelAck - TCP sink with configurable delay per ACK
# Agent/TCPSink/Sack1 - selective ACK sink (follows RFC2018)
# Agent/TCPSink/Sack1/DelAck - Sack1 with DelAck
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Creando tcp Destino sink$i"
set sink($i) [new Agent/TCPSink]
}
#Relacionamos los agentes TCP Destino
#con los nodos Destino
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Relacionamos nodo r$i y con agente sink$i"
$ns attach-agent $r($i) $sink($i)
}
#conectamos tcp fuente y sink (destino)
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Conectamos agentes tcp$i y sink$i"
$ns connect $tcp($i) $sink($i)
}
#asignamos id a tcp fuente
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Asignando id a tcp$i"
$tcp($i) set fid_ $i
}
#Creamos agentes FTP
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Creando ftp ftp$i"
set ftp($i) [new Application/FTP]
}
#Relaciones sesiones ftp a tcp fuente
for {set i 0} {$i < $numeroNodos } {incr i} {
puts "Relacionando ftp$i con tcp$i"
$ftp($i) attach-agent $tcp($i)
}
#Eventos
#$ns at 0.0 "$n0 label $numeroNodos "
for {set i 0} {$i < $numeroNodos } {incr i} {
$ns at 0.0($i) "$ftp($i) start"
}
#$ns at 0.07 "$ftp(1) start"
#$ns at 0.07 "$ftp(2) start"
#$ns at 1.0 "$ftp(0) stop"
#$ns at 1.0 "$ftp(1) stop"
for {set i 0} {$i < $numeroNodos } {incr i} {
$ns at 1.0($i) "$ftp($i) stop"
}
$ns at 1.5 "finish"
#inicia la simulacion
$ns run
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment