[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" # ---------------------------------------------------------------