# VI. Network dynamics

[Previous section] [Next section] [Back to the index]

In this section I am going to show you an example for a dynamic network where the routing adjusts to a link failure. On the way there I'll show you how you can keep a larger number of nodes in a Tcl array instead of giving each node its own name.

VI.1. Creating a larger topology
I suggest you call the Tcl script for this example 'example3.tcl'. You can already insert the template from section IV.1 into the file.

As always, the topology has to be created first, though this time we take a different approach which you will find more comfortable when you want to create larger topologies. The following code creates seven nodes and stores them in the array n().

`
    for {set i 0} {$i < 7} {incr i} {
      set n($i) [$ns node]
    }
`

You have certainly seen 'for' loops in other programming languages before, and I am sure you understand the structure at once. Note that arrays, just like other variables in Tcl, don't have to be declared first.

Now we're going to connect the nodes to create a circular topology. The following piece of code might look a bit more complicated at first.

`
    for {set i 0} {$i < 7} {incr i} {
      $ns duplex-link $n($i) $n([expr ($i+1)%7]) 1Mb 10ms DropTail
    }
`

This 'for' loop connects all nodes with the next node in the array with the exception of the last node, which is being connected with the first node. To accomplish that, I used the '%' (modulo) operator.

When you run the script now, the topology might look a bit strange in nam at first, but after you hit the 're-layout' button it should look like the picture below.

VI.2. Link failure
The next step is to send some data from node n(0) to node n(3).

`
    #Create a UDP agent and attach it to node n(0)
    set udp0 [new Agent/UDP]
    $ns attach-agent $n(0) $udp0

    # Create a CBR traffic source and attach it to udp0
    set cbr0 [new Application/Traffic/CBR]
    $cbr0 set packetSize_ 500
    $cbr0 set interval_ 0.005
    $cbr0 attach-agent $udp0

    set null0 [new Agent/Null]
    $ns attach-agent $n(3) $null0

    $ns connect $udp0 $null0

    $ns at 0.5 "$cbr0 start"
    $ns at 4.5 "$cbr0 stop"
`

The code above should look familiar to you by now. The only difference to the last sections is that now we have to use the node array elements.

If you start the script, you will see that the traffic takes the shortest path from node 0 to node 3 through nodes 1 and 2, as could be expected. Now we add another interesting feature. We let the link between node 1 and 2 (which is being used by the traffic) go down for a second.

`
    $ns rtmodel-at 1.0 down $n(1) $n(2)
    $ns rtmodel-at 2.0 up $n(1) $n(2)
`

It is probably not too hard to understand these two lines. Now you can start the script again and you will see that between the seconds 1.0 and 2.0 the link will be down, and all data that is sent from node 0 is lost.

Now I will show you how to use dynamic routing to solve that 'problem'. Add the following line at the beginning of your Tcl script, after the simulator object has been created.

`
    $ns rtproto DV
`

Start the simulation again, and you will see how at first a lot of small packets run through the network. If you slow nam down enough to click on one of them, you will see that they are 'rtProtoDV' packets which are being used to exchange routing information between the nodes. When the link goes down again at 1.0 seconds, the routing will be updated and the traffic will be re-routed through the nodes 6, 5 and 4.

You can download the full example here.

[Previous section] [Next section] [Back to the index]

ns-users