[General] # Visualize routes: red towards host0 and blue towards host6 *.visualizer.typename = "IntegratedMultiCanvasVisualizer" *.visualizer.numRoutingTableVisualizers = 2 *.visualizer.routingTableVisualizer[*].displayRoutingTables = true *.visualizer.routingTableVisualizer[*].nodeFilter = "router* or host0 or host6" *.visualizer.routingTableVisualizer[*].labelFormat = "%d/%m (%e) -> %g (%n)" *.visualizer.routingTableVisualizer[0].destinationFilter = "host0" *.visualizer.routingTableVisualizer[0].lineColor = "red" *.visualizer.routingTableVisualizer[1].destinationFilter = "host6" *.visualizer.routingTableVisualizer[1].lineColor = "blue" *.visualizer.interfaceTableVisualizer[0].nodeFilter = "not switch*" #*.visualizer.interfaceTableVisualizer[0].placementHint = "top" #*.visualizer.interfaceTableVisualizer[0].displayWiredInterfacesAtConnections = false #*.visualizer.interfaceTableVisualizer[0].format = "%N %a/%l" [Config Step1] description = "Static routing" network = RipNetworkA sim-time-limit = 100s # do not add direct routes *.configurator.addDirectRoutes = false # Application parameters *.host0.numApps = 1 *.host0.app[0].typename = "PingApp" *.host0.app[0].destAddr = "host6" *.*.ipv4.arp.typename = "GlobalArp" # Visualizer settings *.visualizer.interfaceTableVisualizer[0].displayInterfaceTables = true # --------------------------------------------------------------- [Config Step2] description = "Pinging after RIP convergence" network = RipNetworkA sim-time-limit = 100s # adding default routes in all hosts *.configurator.config = xml(" \ \ \ ") *.configurator.addStaticRoutes = true # RIP parameters on routers *.router*.hasRip = true *.router*.rip.startupTime = uniform(0s,1s) # disable advanced features for now! *.router*.rip.ripConfig = xml(" \ \ ") *.router*.rip.triggeredUpdate = false # Application parameters *.host0.numApps = 1 *.host0.app[0].typename = "PingApp" *.host0.app[0].destAddr = "host6" *.host0.app[0].startTime = 50s # turning on global ARP to focus on the RIP messages *.*.ipv4.arp.typename = "GlobalArp" # Visualizer settings *.visualizer.interfaceTableVisualizer[0].displayInterfaceTables = true # --------------------------------------------------------------- [Config Step3] description = "Link breakage" extends = Step2 sim-time-limit = 200s # Enable split horizon in order for the scenario to work properly *.router*.rip.ripConfig = xml(" \ \ ") # Disable ping application *.host0.numApps = 0 *.scenarioManager.script = xml(" \ \ ") # --------------------------------------------------------------- [Config Step4A] description = "RIP timers: Link comes back online before the timeout timer expires" extends = Step2 sim-time-limit = 1000s # Enable split horizon in order for the scenario to work properly *.router*.rip.ripConfig = xml(" \ \ ") # disable ping application *.host0.numApps = 0 # Break the router2 <--> switch1 link at t=50 s. and reconnect at t=150 s. *.scenarioManager.script = xmldoc("scenario5.xml") # --------------------------------------------------------------- [Config Step4B] description = "RIP timers: Link comes back online before the garbage-collection timer expires" extends = Step2 sim-time-limit = 1000s # (garbage-collection timer is also called hold-down timer) # Break the router2 <--> switch1 link at t=50 s. and reconnect at t=300 s. *.scenarioManager.script = xmldoc("scenario6.xml") # --------------------------------------------------------------- [Config Step4C] description = "RIP timers: Link comes back online after the garbage-collection timer expires" extends = Step2 sim-time-limit = 1000s *.scenarioManager.script = xmldoc("scenario7.xml") # --------------------------------------------------------------- [Config Step5] description = "RIP triggered updates" extends = Step3 sim-time-limit = 200s *.router*.rip.triggeredUpdate = true # --------------------------------------------------------------- [Config Step6] description = "Count to infinity (two-node loop instability)" network = RipNetworkB sim-time-limit = 500s # adding default routes in all hosts *.configurator.config = xml(" \ \ \ ") *.configurator.addStaticRoutes = true # RIP parameters on routers *.router*.hasRip = true *.router*.rip.startupTime = uniform(0s,1s) # disable advanced features for now! *.router*.rip.ripConfig = xml(" ") *.router*.rip.triggeredUpdate = false *.scenarioManager.script = xml(" \ \ ") # Visualizer settings *.visualizer.interfaceTableVisualizer[0].displayInterfaceTables = true *.visualizer.routingTableVisualizer[*].nodeFilter = "router* or host0 or host3" *.visualizer.routingTableVisualizer[0].destinationFilter = "host0" *.visualizer.routingTableVisualizer[1].destinationFilter = "host3" # enable ping app to see ping packets bouncing back and forth between the two routers ## Application parameters #*.host0.numApps = 1 #*.host0.app[0].typename = "PingApp" #*.host0.app[0].destAddr = "host3" #*.host0.app[0].startTime = 35s #*.host0.app[0].sendInterval = 15s #*.host0.app[0].hopLimit = 8 # #*.visualizer.packetDropVisualizer[0].displayPacketDrops = true **.arp.typename = "GlobalArp" # --------------------------------------------------------------- [Config Step6DifferentTimings] extends = Step6 description = "Count to infinity: Using different timers, the problem does not surface" sim-time-limit = 200s *.router1.rip.startupTime = 0.5s *.router0.rip.startupTime = 1s # --------------------------------------------------------------- #[Config Step6TriggeredUpdates] #extends = Step6 #description = "Count to infinity: Triggered updates is not a solution" # #*.router*.rip.triggeredUpdate = true # ## --------------------------------------------------------------- [Config Step6Solution1] extends = Step6 description = "Solution to count to infinity problem: Split horizon" sim-time-limit = 200s *.router*.rip.ripConfig = xml(" ") # --------------------------------------------------------------- [Config Step6Solution2] extends = Step6 description = "Solution to count to infinity problem: Split horizon with poison reverse" sim-time-limit = 200s *.router*.rip.ripConfig = xml(" ") # --------------------------------------------------------------- [Config Step7] description = "Count to infinity (loop instability with higher number of nodes)" extends = Step6 network = RipNetworkC sim-time-limit = 500s *.host0.numApps = 0 # --------------------------------------------------------------- [Config Step7SplitHorizon] extends = Step7 sim-time-limit = 500s *.router*.rip.ripConfig = xml(" ") # --------------------------------------------------------------- [Config Step7TriggeredUpdates] extends = Step7 sim-time-limit = 200s *.router*.rip.triggeredUpdate = true *.router*.rip.ripConfig = xml(" ") # --------------------------------------------------------------- [Config Step8] description = "Hold-down timer" extends = Step7 sim-time-limit = 500s *.router*.rip.holdDownTime = 30s # --------------------------------------------------------------- [Config Step9] description = "Measure RIP recovery time" extends = Step2 sim-time-limit = 1500s *.host0.numApps = 1 *.host0.app[0].typename = "UdpBasicApp" *.host0.app[0].destAddresses = "host6" *.host0.app[0].destPort = 1234 *.host0.app[0].sendInterval = 0.5s *.host0.app[0].messageLength = 32 bytes *.host6.numApps = 1 *.host6.app[0].typename = "UdpSink" *.host6.app[0].localPort = 1234 *.router*.rip.startupTime = uniform(0s,1s) *.router*.rip.ripConfig = xml(" ") *.scenarioManager.script = xmldoc("scenario7.xml") *.router*.rip.triggeredUpdate = ${triggeredUpdate = false, true} # --------------------------------------------------------------- [Config Step9NoNetmaskRoutes] extends = Step9 **.netmaskRoutes = "" *.configurator.addDirectRoutes = true # --------------------------------------------------------------- [Config Step10] description = "Configure an interface as NoRIP" extends = Step2 *.router0.rip.ripConfig = xml(" \ \ \ ") *.router2.rip.ripConfig = xml(" \ \ \ ")