set ns [new Simulator] #Open the nam trace file set nf [open out.nam w] $ns namtrace-all $nf
#Open the Trace file set tf [open out.tr w] $ns trace-all $tf #Define a 'finish' procedure proc finish {} { global ns nf tf $ns flush-trace #Close the trace file close $nf #Close the Trace file close $tf #Execute nam on the trace file exec nam out.nam & exit 0 } #set ip nodes and mpls nodes set node0 [$ns node] set node1 [$ns node] $ns node-config -MPLS ON set LSR2 [$ns mpls-node] $ns node-config -MPLS ON set LSR3 [$ns mpls-node] $ns node-config -MPLS ON set LSR4 [$ns mpls-node] $ns node-config -MPLS ON set LSR5 [$ns mpls-node] $ns node-config -MPLS ON set LSR6 [$ns mpls-node] $ns node-config -MPLS ON set LSR7 [$ns mpls-node] $ns node-config -MPLS ON set LSR8 [$ns mpls-node] $ns node-config -MPLS OFF set node9 [$ns node] set node10 [$ns node] #connect nodes $ns duplex-link $node0 $LSR2 1Mb 10ms DropTail $ns duplex-link $node1 $LSR3 1Mb 10ms DropTail $ns duplex-link $LSR2 $LSR3 1Mb 10ms DropTail $ns duplex-link $LSR3 $LSR4 1Mb 10ms DropTail $ns duplex-link $LSR4 $LSR8 1Mb 10ms DropTail $ns duplex-link $LSR2 $LSR5 1Mb 10ms DropTail $ns duplex-link $LSR5 $LSR6 1Mb 10ms DropTail $ns duplex-link $LSR5 $LSR4 1Mb 10ms DropTail $ns duplex-link $LSR6 $LSR7 1Mb 10ms DropTail $ns duplex-link $LSR6 $LSR8 1Mb 10ms DropTail $ns duplex-link $LSR7 $LSR8 1Mb 10ms DropTail $ns duplex-link $LSR7 $node9 1Mb 10ms DropTail $ns duplex-link $LSR8 $node10 1Mb 10ms DropTail $ns duplex-link-op $node0 $LSR2 orient right $ns duplex-link-op $node1 $LSR3 orient right $ns duplex-link-op $LSR2 $LSR3 orient down $ns duplex-link-op $LSR3 $LSR4 orient right $ns duplex-link-op $LSR4 $LSR8 orient right $ns duplex-link-op $LSR2 $LSR5 orient right $ns duplex-link-op $LSR5 $LSR6 orient right $ns duplex-link-op $LSR5 $LSR4 orient down $ns duplex-link-op $LSR6 $LSR7 orient right-down $ns duplex-link-op $LSR6 $LSR8 orient down $ns duplex-link-op $LSR7 $LSR8 orient left-down $ns duplex-link-op $LSR7 $node9 orient right $ns duplex-link-op $LSR8 $node10 orient right # Adjust loop length to address all LSRs (MPLS nodes). for {set i 2} {$i < 9} {incr i} { for {set j [expr $i+1]} {$j < 9} {incr j} { set a LSR$i set b LSR$j eval $ns LDP-peer $$a $$b } } [$LSR2 get-module "MPLS"] enable-control-driven [$LSR3 get-module "MPLS"] enable-control-driven [$LSR4 get-module "MPLS"] enable-control-driven [$LSR5 get-module "MPLS"] enable-control-driven [$LSR6 get-module "MPLS"] enable-control-driven [$LSR7 get-module "MPLS"] enable-control-driven [$LSR8 get-module "MPLS"] enable-control-driven $ns configure-ldp-on-all-mpls-nodes $ns enable-control-driven $ns ldp-request-color blue $ns ldp-mapping-color red $ns ldp-withdraw-color magenta $ns ldp-release-color orange $ns ldp-notification-color yellow set udp0 [new Agent/UDP] $ns attach-agent $node0 $udp0 set cbr0 [new Application/Traffic/CBR] $cbr0 attach-agent $udp0 set udp1 [new Agent/UDP] $ns attach-agent $node1 $udp1 $udp1 set class_ 1 set cbr1 [new Application/Traffic/CBR] $cbr1 attach-agent $udp1 set null0 [new Agent/Null] $ns attach-agent $node9 $null0 set null1 [new Agent/Null] $ns attach-agent $node10 $null1 $ns connect $udp0 $null0 $ns connect $udp1 $null1 $ns at 0.1 "$cbr0 start" $ns at 0.1 "$cbr1 start" set tcp [new Agent/TCP] $tcp set class_ 2 set sink [new Agent/TCPSink] $ns attach-agent $node0 $tcp $ns attach-agent $node9 $sink $ns connect $tcp $sink set tcp [new Agent/TCP] $tcp set class_ 2 set sink [new Agent/TCPSink] $ns attach-agent $node1 $tcp $ns attach-agent $node10 $sink $ns connect $tcp $sink #connect src and dst #$ns connect $node0 $node9 #$ns connect $node1 $node10 $ns at 0.1 "$node0 start" $ns at 0.1 "$node1 start" $ns at 0.2 "[$LSR7 get-module MPLS] ldp-trigger-by-withdraw 9 -1" $ns at 0.2 "[$LSR8 get-module MPLS] ldp-trigger-by-withdraw 10 -1" $ns at 0.3 "[$LSR2 get-module MPLS] flow-aggregation 9 -1 6 -1" $ns at 0.3 "[$LSR2 get-module MPLS] flow-aggregation 10 -1 6 -1" $ns at 0.5 "[$LSR6 get-module MPLS] ldp-trigger-by-withdraw 6 -1" $ns at 0.7 "$node1 stop" $ns at 0.7 "$LSR2 make-explicit-route 7 5_4_8_6_7 3000" $ns at 0.9 "$LSR2 flow-erlsp-install 9 -1 3000" $ns at 1.1 "$LSR2 ldp-trigger-by-release 3000" $ns at 1.2 "$LSR4 make-explicit-route 8 4_5_6_8 3500" $ns at 1.3 "$LSR2 make-explicit-route 7 2_3_4_3500_7 3600" $ns at 1.4 "$LSR2 flow-erlsp-install 9 -1 3600" $ns at 1.6 "$LSR2 ldp-trigger-by-release 3600" $ns at 1.7 "$LSR4 ldp-trigger-by-release 3500" $ns at 1.8 "$LSR2 enable-data-driven" $ns at 2.0 "$node0 stop" $ns run