[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(" \
\
\
")