Table Of Contents
Table Of Contents

Step 7. Counting to Infinity (Loop Instability with Higher Number of Nodes)

Goals

TODO: the same as in the previous step, but with more routers

The model

TODO: description of the problem and the difference from the previous step

This step uses the following network:

network RipNetworkC
{
    @display("bgb=2066.82,862.47003");
    @figure[simtime](type="simTimeText"; pos=1550,60; prefix="SimTime: "; font=,14);
    submodules:
        configurator: Ipv4NetworkConfigurator {
            @display("p=683.76,77.700005");
        }
        visualizer: <default("IntegratedCanvasVisualizer")> like IIntegratedVisualizer {
            @display("p=936.72504,78.9375");
        }
        scenarioManager: ScenarioManager {
            @display("p=1210.375,78.9375");
        }
        host0: StandardHost {
            @display("p=116.55,271.95");
        }
        host1: StandardHost {
            @display("p=116.55,489.51");
        }
        host2: StandardHost {
            @display("p=116.55,717.43");
        }
        router0: Router {
            @display("p=986.79004,271.95");
        }
        router1: Router {
            @display("p=1289.8201,489.51");
        }
        host3: StandardHost {
            @display("p=1924.37,271.95");
        }
        host4: StandardHost {
            @display("p=1924.37,489.51");
        }
        host5: StandardHost {
            @display("p=1924.37,717.43");
        }
        switch0: EtherSwitch {
            @display("p=406.63,486.92");
        }
        switch1: EtherSwitch {
            @display("p=1605.8,486.92");
        }
        router2: Router {
            @display("p=704.48,489.51");
        }
        router3: Router {
            @display("p=986.79004,717.43");
        }
    connections:
        host2.ethg++ <--> Eth100M <--> switch0.ethg++;
        host1.ethg++ <--> Eth100M <--> switch0.ethg++;
        host0.ethg++ <--> Eth100M <--> switch0.ethg++;
        switch0.ethg++ <--> Eth100M <--> router2.ethg++;

        switch1.ethg++ <--> Eth100M <--> host3.ethg++;
        switch1.ethg++ <--> Eth100M <--> host4.ethg++;
        switch1.ethg++ <--> Eth100M <--> host5.ethg++;

        router0.ethg++ <--> Eth100M <--> router1.ethg++;
        router1.ethg++ <--> Eth100M <--> switch1.ethg++;
        router2.ethg++ <--> Eth100M <--> router3.ethg++;
        router2.ethg++ <--> Eth100M <--> router0.ethg++;
        router3.ethg++ <--> Eth100M <--> router0.ethg++;
        router3.ethg++ <--> Eth100M <--> router1.ethg++;
}

The configuration in omnetpp.ini is the following:

[Config Step7]
description = "Count to infinity (loop instability with higher number of nodes)"
extends = Step6
network = RipNetworkC

# Even split horizon with/without poison reverse is not able to solve this loop instability
#*.router*.rip.ripConfig = xml("<config> <interface hosts='router*' mode='SplitHorizon' /> </config>")

# triggered update causes the count to infinity to finish faster!

# one solution is to use garbage-collection timer (next step)

*.host0.numApps = 0

Split Horizon:

[Config Step7SplitHorizon]
extends = Step7

# Even split horizon with/without poison reverse is not able to solve this loop instability
*.router*.rip.ripConfig = xml("<config> <interface hosts='router*' mode='SplitHorizon' /> </config>")

# recovery: takes around 250s

Triggered Update:

[Config Step7TriggeredUpdates]
extends = Step7

# triggered update causes the count to infinity to finish faster!
*.router*.rip.triggeredUpdate = true

*.router*.rip.ripConfig = xml("<config> <interface hosts='router*' mode='SplitHorizon' /> </config>")

# Triggered updates seem to solve the count to infinity problem with
# or without split horizon so not sure this config is needed

Results

TODO: video

RIP update messages are sent every 30 seconds (not visualized here). The route metrics increase incrementally (count-to-infinity):

TODO: what happens

TODO: screenshots of routing tables / RIP packets

Sources: omnetpp.ini, RipNetworkC.ned