#Creamos el objeto a simulador
set ns [new Simulator]

#Define los diferentes colores del flujo de datos
$ns color 1 Blue
$ns color 2 Red

#Abrimos el archivo de trazado
set nf [open out.nam w]
$ns namtrace-all $nf

#Defimos el procedimiento 'finish'
proc finish {} {
        global ns nf
        $ns flush-trace
    #Cerramos el archivo de trazado
        close $nf
    #Execumos en NAM el archivo de trazado
        exec nam out.nam &
        exit 0
}

#Creamos los cuatro nodos
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]

#Creamos la union de los distintos nodos
$ns duplex-link $n0 $n2 1Mb 10ms DropTail
$ns duplex-link $n1 $n2 1Mb 10ms DropTail
$ns duplex-link $n3 $n2 1Mb 10ms DropTail

#Le indicamos donde queremos que aparezcan en NAM los nodos
$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right

#Creamos el agente UDP asociado al nodo n0
set udp0 [new Agent/UDP]
$udp0 set class_ 1
$ns attach-agent $n0 $udp0

#Creamos un tráfico CBR de la fuente asociado a udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0

#Creamos el agente UDP asociado con el nodo n1
set udp1 [new Agent/UDP]
$udp1 set class_ 2
$ns attach-agent $n1 $udp1


#Monitor de cola para la union entre el nodo 2 y el nodo 3
$ns duplex-link-op $n2 $n3 queuePos 0.5

#Crear un trafico CBR asociado a la fuante de udp1
set cbr1 [new Application/Traffic/CBR]
$cbr1 set packetSize_ 500
$cbr1 set interval_ 0.005
$cbr1 attach-agent $udp1

#crear un agente nulo (un trafico sink?) asociado al nodo n3
set null0 [new Agent/Null]
$ns attach-agent $n3 $null0

#Conectar las fuentes  de trafico con el alsink
$ns connect $udp0 $null0  
$ns connect $udp1 $null0

#Planificamos la secuencia de sucesos de los agentes CBR
$ns at 0.5 "$cbr0 start"
$ns at 1.0 "$cbr1 start"
$ns at 4.0 "$cbr1 stop"
$ns at 4.5 "$cbr0 stop"

#Llamamos al procedimiento finish despues de 5 segundos de simulacion
$ns at 5.0 "finish"

#Hacemos correr la simulacion
$ns run