[General] abstract = true network = AutomaticFailureProtectionShowcase sim-time-limit = 0.1s description = "Automatic static stream redundancy configuration with failure protection" # enable network node status for scenario manager *.*.hasStatus = true # all Ethernet interfaces have 100 Mbps speed *.*.eth[*].bitrate = 100Mbps # source application *.source.numApps = 1 *.source.app[0].typename = "UdpSourceApp" *.source.app[0].io.destAddress = "destination" *.source.app[0].io.destPort = 1000 *.source.app[0].source.displayStringTextFormat = "sent %p pk (%l)" *.source.app[0].source.packetLength = 1200B *.source.app[0].source.productionInterval = 1ms # destination application *.destination.numApps = 1 *.destination.app[0].typename = "UdpSinkApp" *.destination.app[0].io.localPort = 1000 # configure node shutdown/startup scenario *.scenarioManager.script = xml("") # visualizer *.visualizer.infoVisualizer.modules = "*.source.app[0].source or *.destination.app[0].sink" [NoFrameReplication] description = "No frame replication - demonstrates single point of failure" [FrameReplication] description = "Automatic frame replication configuration with node failure protection" # disable automatic MAC forwarding table configuration *.macForwardingTableConfigurator.typename = "" # all interfaces must have the same address to accept packets from all streams *.destination.eth[*].address = "0A-AA-12-34-56-78" # enable frame replication and elimination *.*.hasStreamRedundancy = true # enable automatic configurators *.streamRedundancyConfigurator.typename = "StreamRedundancyConfigurator" *.failureProtectionConfigurator.typename = "FailureProtectionConfigurator" # TSN configuration *.failureProtectionConfigurator.gateScheduleConfiguratorModule = "" # 64B = 8B (UDP) + 20B (IP) + 4B (802.1CB R-Tag) + 6B (802.1Q) + 14B + 4B (ETH MAC) + 8B (ETH PHY) *.failureProtectionConfigurator.configuration = [{name: "S1", application: "app[0]", source: "source", destination: "destination", pcp: 0, packetFilter: "*", nodeFailureProtection: [{any: 1, of: "s2a or s2b or s3a or s3b"}], # this link failure protection is somewhat redundant for demonstration purposes linkFailureProtection: [{any: 1, of: "*->* and not source->s1"}, {any: 2, of: "s1->s2a or s2a->s2b or s2b->s3b"}, {any: 2, of: "s1->s2b or s2b->s2a or s2a->s3a"}]}] # visualizer *.visualizer.failureProtectionConfigurationVisualizer.displayTrees = true *.visualizer.failureProtectionConfigurationVisualizer.lineStyle = "dashed" *.visualizer.streamRedundancyConfigurationVisualizer.displayTrees = true *.visualizer.streamRedundancyConfigurationVisualizer.lineColor = "black"