[General]
sim-time-limit = 1000s
**.ospf.cmdenv-log-level = trace
**.cmdenv-log-level = off
cmdenv-express-mode = false
*.pcapRecorder.moduleNamePatterns = ".^"
*.pcapRecorder.pcapFile = "${resultdir}/${configname}-${runnumber}.pcap"
**.checksumMode = "computed"
**.fcsMode = "computed"
*.*.ospf.displayStringTextFormat = "routerID: {routerID}\n{interfaces}"
# Enable OSPF on all routers
*.R*.hasOspf = true
*.configurator.addStaticRoutes = false
# Visualizer settings
*.visualizer.interfaceTableVisualizer[0].displayInterfaceTables = true
**.visualizer.interfaceTableVisualizer.nodeFilter = "not fullPath =~ *.N**"
*.visualizer.interfaceTableVisualizer.displayInterfaceTables = true
*.visualizer.numRoutingTableVisualizers = 2
*.visualizer.routingTableVisualizer[*].displayRoutingTables = true
*.visualizer.routingTableVisualizer[0].destinationFilter = "host6"
*.visualizer.routingTableVisualizer[1].destinationFilter = "host0"
*.visualizer.routingTableVisualizer[*].nodeFilter = "R* and not(N*)"
*.visualizer.routingTableVisualizer[0].lineColor = "blue"
*.visualizer.routingTableVisualizer[1].lineColor = "red"
*.visualizer.routingTableVisualizer[*].labelFormat = "%d/%m (%e) -> %g (%n)" # display metric
*.visualizer.routingTableVisualizer[*].lineStyle = "dashed"
*.visualizer**.infoVisualizer.displayInfos = true
*.visualizer**.infoVisualizer.modules = "**ospf"
*.visualizer.networkRouteVisualizer[*].displayRoutes = true
*.visualizer.networkRouteVisualizer[*].packetFilter = "ping* or Udp*"
*.visualizer.networkRouteVisualizer.displayRoutes = true
*.visualizer.networkRouteVisualizer.packetFilter = "ping* or Udp*"
# ---------------------------------------------------------------
[Config Step1]
description = "Pinging after OSPF convergence"
network = OspfNetwork
*.configurator.config = xml(" \
\
\
")
# application parameters
*.host0.numApps = 1
*.host0.app[0].typename = "PingApp"
*.host0.app[0].destAddr = "host6"
*.host0.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step2]
description = "Change link cost"
extends = Step1
# manually overiding the 'output cost' of ppp1 on router R1
# note that the route of ping request will be affected and not ping reply
*.R*.ospf.ospfConfig = xmldoc("ASConfig_cost.xml")
# ---------------------------------------------------------------
[Config Step2a]
description = "Reroute after link breakage"
extends = Step1
# the link between R5 and R4 breaks at t = 60s, and OSPF finds a new route
*.scenarioManager.script = xml(" \
\
")
# ---------------------------------------------------------------
[Config Step3]
description = "OSPF full adjacency establishment and LSDB sync"
network = Network
*.configurator.config = xml(" \
\
\
\
\
\
")
*.visualizer.routingTableVisualizer[*].displayRoutingTables = false
# application parameters
*.host0.numApps = 1
*.host0.app[0].typename = "PingApp"
*.host0.app[0].destAddr = "host3"
*.host0.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step4]
description = "Router LSA"
network = RouterLSA
# what does a router LSA look like?
*.configurator.config = xml(" \
\
\
")
# application parameters
*.host0.numApps = 1
*.host0.app[0].typename = "PingApp"
*.host0.app[0].destAddr = "host6"
*.host0.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step4a]
description = "Advertising loopback interface"
network = RouterLSA
# Loopbacks are considered host routes in OSPF, and they are advertised as /32.
# advertising lo1 in router R1
*.configurator.config = xml(" \
\
\
")
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Loopback.xml")
*.R1.numLoInterfaces = 2
# application parameters
*.host0.numApps = 1
*.host0.app[0].typename = "PingApp"
*.host0.app[0].destAddr = "host6"
*.host0.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step5]
description = "Effect of network type of an interface on routing table routes"
network = InterfaceNetworkType
*.configurator.configureIsolatedNetworksSeparatly = true
*.configurator.config = xml(" \
\
\
")
**.visualizer.interfaceTableVisualizer.displayInterfaceTables = true
**.visualizer.interfaceTableVisualizer.nodeFilter = "not *.N*"
# application parameters
*.host8.numApps = 1
*.host8.app[0].typename = "PingApp"
*.host8.app[0].destAddr = "host11"
*.host8.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step5a]
description = "Mismatched Parameters between two OSPF neighbor"
network = InterfaceNetworkType
# R1 and R2 will not establish full adjacency because of mismatch Hello interval
*.configurator.configureIsolatedNetworksSeparatly = true
*.configurator.config = xml(" \
\
\
")
**.visualizer.interfaceTableVisualizer.displayInterfaceTables = true
**.visualizer.interfaceTableVisualizer.nodeFilter = "not *.N*"
*.visualizer.routingTableVisualizer[0].destinationFilter = "host5"
*.visualizer.routingTableVisualizer[1].destinationFilter = "host0"
*.R*.ospf.ospfConfig = xmldoc("ASConfig_mismatch.xml")
# application parameters
*.host8.numApps = 1
*.host8.app[0].typename = "PingApp"
*.host8.app[0].destAddr = "host11"
*.host8.app[0].startTime = 60s
# TODO: full adjacency forms when it shouln't: R4 and R5 will not establish full adjacency because of mismatch OSPF network type
# ---------------------------------------------------------------
[Config Step6]
description = "OSPF DR/BDR election in a multi-access network (Ethernet)"
network = Network2
*.configurator.config = xml(" \
\
\
")
# application parameters
*.host0.numApps = 1
*.host0.app[0].typename = "PingApp"
*.host0.app[0].destAddr = "host6"
*.host0.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step7]
description = "Influencing OSPF DR/BDR election"
extends = Step6
# increasing the router priority of R3
*.R*.ospf.ospfConfig = xmldoc("ASConfig_priority.xml")
# ---------------------------------------------------------------
[Config Step8]
description = "Setting all router ids to zero"
extends = Step6
# when the router id of a multi-access interface is zero then no Wait timer is started.
# this means that no DR/BDR election will be performed and no Network LSA is exchanged.
# this also means that the Ethernet network will not be recognized by any routers.
*.R*.ospf.ospfConfig = xmldoc("ASConfig_zero_priority.xml")
*.visualizer.routingTableVisualizer.destinationFilter = "R*"
*.visualizer.routingTableVisualizer.nodeFilter = "R* and not *.N*"
# ---------------------------------------------------------------
[Config Step9]
description = "High-priority OSPF router joins after OSPF DR/BDR election"
extends = Step6
# although R6 has the highest priority, but it does not trigger a DR/BDR re-election
*.R6.ospf.startupTime = 60s
# ---------------------------------------------------------------
[Config Step10]
description = "Network Topology Changes"
network = TopologyChange
*.R*.ospf.ospfConfig = xmldoc("ASConfig_tp_priority.xml")
*.visualizer.routingTableVisualizer.displayRoutingTables = true
*.visualizer.routingTableVisualizer.destinationFilter = "*"
*.visualizer.routingTableVisualizer.nodeFilter = "R*"
*.*.hasStatus = true
*.scenarioManager.script = xml(" \
\
")
# application parameters
*.R3.numApps = 1
*.R3.app[0].typename = "PingApp"
*.R3.app[0].destAddr = "R1"
*.R3.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step10a]
description = "Router R4 goes down"
extends = Step10
*.scenarioManager.script = xml(" ")
# ---------------------------------------------------------------
[Config Step10b]
description = "Router R2 (DROTHER) goes down"
extends = Step10
*.scenarioManager.script = xml(" ")
# application parameters
*.R3.numApps = 1
*.R3.app[0].typename = "PingApp"
*.R3.app[0].destAddr = "R4"
*.R3.app[0].startTime = 60s
*.R1.numApps = 1
*.R1.app[0].typename = "PingApp"
*.R1.app[0].destAddr = "R6"
*.R1.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step10d]
description = "Router R1 (DR) goes down"
extends = Step10
*.scenarioManager.script = xml(" ")
# application parameters
*.R3.numApps = 1
*.R3.app[0].typename = "PingApp"
*.R3.app[0].destAddr = "R6"
*.R3.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step11]
description = "Configure an interface as NoOSPF"
extends = Step3
# setting interfaceMode to "NoOSPF" is equal to removing the interface from the XML config
*.R*.ospf.ospfConfig = xmldoc("ASConfig_NoOspf.xml")
# ---------------------------------------------------------------
[Config Step12]
description = "Configure an interface as Passive"
extends = Step3
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Passive.xml")
# ---------------------------------------------------------------
[Config Step13]
description = "Freshness of a LSA"
network = Freshness
*.scenarioManager.script = xml(" \
\
")
# application parameters
*.R7.numApps = 1
*.R7.app[0].typename = "PingApp"
*.R7.app[0].destAddr = "R1"
*.R7.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step14]
description = "Hierarchical OSPF topology and summary LSA"
network = OSPF_AreaTest
*.configurator.config = xml(" \
\
\
\
\
\
\
\
")
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area.xml")
*.visualizer.routingTableVisualizer.displayRoutingTables = true
*.visualizer.routingTableVisualizer.destinationFilter = "R*"
*.visualizer.routingTableVisualizer.nodeFilter = "R*"
# application parameters
*.host1.numApps = 1
*.host1.app[0].typename = "PingApp"
*.host1.app[0].destAddr = "host3"
*.host1.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step15]
description = "Set advertisement of a network to 'false'"
extends = Step14
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_NoAdvertisement.xml")
# application parameters
*.host1.numApps = 1
*.host1.app[0].typename = "PingApp"
*.host1.app[0].destAddr = "host2"
*.host1.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step16]
description = "OSPF topology change in multi-area OSPF"
extends = Step14
*.scenarioManager.script = xml(" \
\
")
*.visualizer.routingTableVisualizer.destinationFilter = "R* or host1"
# application parameters
*.host2.numApps = 1
*.host2.app[0].typename = "PingApp"
*.host2.app[0].destAddr = "host3"
*.host2.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step17]
description = "Loop avoidance in multi-area OSPF topology"
network = OSPF_LoopAvoidance
*.configurator.config = xml(" \
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
")
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_Loop.xml")
# application parameters
*.R5.numApps = 1
*.R5.app[0].typename = "PingApp"
*.R5.app[0].destAddr = "R2"
*.R5.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step17a]
description = "Make R3 an ABR - advertise its loopback to backbone"
extends = Step17
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_Loop_ABR.xml")
# ---------------------------------------------------------------
[Config Step17b]
description = "Make R3 an ABR - create a vitual link between R1 and R3"
extends = Step17
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_Loop_ABR_Virtual.xml")
# ---------------------------------------------------------------
[Config Step18]
description = "AS-External LSAs of 'type 1 metric' with different advertised destination"
network = OSPF_Area_External
# ToDo: R5 has a cost of 13 to the external network
*.configurator.config = xml(" \
\
\
\
\
\
\
\
\
\
\
\
")
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_ExternalRoute_Type1.xml")
# application parameters
*.host*.numApps = 1
*.host*.app[0].typename = "UdpBasicApp"
*.host*.app[0].destAddresses = "N1.host[0]"
*.host*.app[0].destPort = 5000
*.host*.app[0].messageLength = 1024B
*.host*.app[0].sendInterval = 1s
*.host*.app[0].startTime = 10s
*.host*.app[0].stopTime = 100s
# ---------------------------------------------------------------
[Config Step18a]
description = "AS-External LSAs of 'type 1 metric' with the same advertised destination"
extends = Step18
network = OSPF_Area_External_Same_Dest
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_ExternalRoute_Type1_Dest.xml")
*.configurator.config = xml(" \
\
\
\
\
\
\
\
\
\
\
\
")
*.host*.app[0].destAddresses = "N1.host[0]"
*.configurator.assignDisjunctSubnetAddresses = false
# ---------------------------------------------------------------
[Config Step18b]
description = "AS-External LSAs of 'type 2 metric' with different advertised destination"
extends = Step18
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_ExternalRoute_Type2.xml")
# ---------------------------------------------------------------
[Config Step18c]
description = "AS-External LSAs of 'type 2 metric' with the same advertised destination"
extends = Step18
network = OSPF_Area_External_Same_Dest
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_ExternalRoute_Type2_Dest.xml")
# ---------------------------------------------------------------
[Config Step18d]
description = "AS-External LSAs of mixed 'type 1/type 2 metric' with the same advertised destination"
extends = Step18
network = OSPF_Area_External_Same_Dest
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_ExternalRoute_Mixed_Dest.xml")
*.configurator.config = xml(" \
\
\
\
\
\
\
\
\
\
\
\
")
# ---------------------------------------------------------------
[Config Step18e]
description = "Address Forwarding"
network = OSPF_Area_External_Forwarding
# R6 is not an OSPF router.
# forwardingAddress is set to 192.168.22.3 in R5. Other routers forward packets with destination 192.168.22.8
# to R6. If forwardingAddress is unset, packets are forwarded to R5 and then to R6 (packet delivery takes one extra hop).
*.configurator.config = xml(" \
\
\
\
\
\
\
\
\
")
*.R6.hasOspf = false
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_ExternalRoute_Forwarding.xml")
# application parameters
*.host1.numApps = 1
*.host1.app[0].typename = "PingApp"
*.host1.app[0].destAddr = "host3"
*.host1.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step19]
description = "Default-route distribution in OSPF"
network = OSPF_Default_Route_Distribution
*.configurator.config = xml(" \
\
\
\
\
\
\
\
\
\
\
")
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Area_Default_Route.xml")
# application parameters
*.host1.numApps = 1
*.host1.app[0].typename = "PingApp"
*.host1.app[0].destAddr = "host3"
*.host1.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step20]
description = "Stub area"
network = OSPF_Stub
*.configurator.config = xml(" \
\
\
\
\
\
\
\
\
\
\
\
\
")
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Stub_Area.xml")
# application parameters
*.host1.numApps = 1
*.host1.app[0].typename = "PingApp"
*.host1.app[0].destAddr = "N3.host[0]"
*.host1.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step21]
description = "Virtual link - connect two separate parts of a discontinuous backbone"
network = VirtualLink
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Virtual_Discontinuous.xml")
*.R1.numApps = 1
*.R1.app[0].typename = "PingApp"
*.R1.app[0].destAddr = "R4"
*.R1.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step22]
description = "Virtual link - connect a disconnected area to the backbone"
network = VirtualLink_2
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Virtual_Disconnected.xml")
*.R1.numApps = 1
*.R1.app[0].typename = "PingApp"
*.R1.app[0].destAddr = "R3"
*.R1.app[0].startTime = 60s
# ---------------------------------------------------------------
[Config Step23]
description = "OSPF Path Selection"
network = OSPF_Route_Selection
*.configurator.config = xml(" \
\
\
\
\
\
\
")
*.configurator.assignUniqueAddresses = false
*.configurator.assignDisjunctSubnetAddresses = false
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Route_Selection.xml")
*.*.hasStatus = true
*.scenarioManager.script = xml(" \
\
\
")
*.R1.numApps = 1
*.R1.app[0].typename = "PingApp"
*.R1.app[0].destAddr = "1.1.1.1"
*.R1.app[0].startTime = 0s
# ---------------------------------------------------------------
[Config Step24]
description = "OSPF Path Selection - Suboptimal routes"
network = OSPF_Suboptimal
# host0 pings host6 and the following route is used by the OSPF that is not optimal:
# R1--> R2 --> R4 --> R5 --> R3 --> R7 --> 10.0.0.52
# this is because intra-area routes are always prefered by inter-area routes even if
# they have higher total cost.
*.configurator.config = xml(" \
\
\
")
# application parameters
*.host0.numApps = 1
*.host0.app[0].typename = "PingApp"
*.host0.app[0].destAddr = "host6"
*.host0.app[0].startTime = 60s
*.R*.ospf.ospfConfig = xmldoc("ASConfig_Suboptimal.xml")
# ---------------------------------------------------------------
[Config Step25]
description = "PCAP recording"
extends = Step1
**.crcMode = "computed"
**.fcsMode = "computed"
*.R1.numPcapRecorders = 1
*.R1.pcapRecorder[0].moduleNamePatterns = "ppp[0]"
*.R1.pcapRecorder[0].pcapNetwork = 204 # ppp
*.R1.pcapRecorder[0].pcapFile = "results/R1.ppp0.pcap"
*.R5.numPcapRecorders = 1
*.R5.pcapRecorder[0].moduleNamePatterns = "ppp[1]"
*.R5.pcapRecorder[0].pcapNetwork = 204 # ppp
*.R5.pcapRecorder[0].pcapFile = "results/R5.ppp1.pcap"
*.R4.numPcapRecorders = 1
*.R4.pcapRecorder[0].moduleNamePatterns = "eth[0]"
*.R4.pcapRecorder[0].pcapNetwork = 1 # ethernet
*.R4.pcapRecorder[0].pcapFile = "results/R4.eth0.pcap"
# ---------------------------------------------------------------