[General] description = "Combining frame replication with time-aware shaping" network = FrerAndTasShowcase sim-time-limit = 5s # disable automatic MAC forwarding table configuration *.macForwardingTableConfigurator.typename = "" # disable all non frame replication related TSN features in all network nodes *.*.hasTimeSynchronization = false *.*.hasIngressTrafficFiltering = false *.*.hasEgressTrafficShaping = false *.*.hasOutgoingStreams = false # all Ethernet interfaces have 100 Mbps speed *.*.eth[*].bitrate = 100Mbps # packet error rate of all links is 20% **.channel.per = 0.2 # enable frame replication and elimination *.*.hasStreamRedundancy = true # 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)" # deterministic application traffic configuration *.source.app[0].source.packetLength = 100B *.source.app[0].source.productionInterval = 5ms # destination application *.destination.numApps = 1 *.destination.app[0].typename = "UdpSinkApp" *.destination.app[0].io.localPort = 1000 # all interfaces must have the same address to accept packets from all streams *.destination.eth[*].address = "0A-AA-12-34-56-78" # visualizer *.visualizer.infoVisualizer.modules = "*.source.app[0].source or *.destination.app[0].sink" # enable all automatic configurators *.gateScheduleConfigurator.typename = "EagerGateScheduleConfigurator" *.streamRedundancyConfigurator.typename = "StreamRedundancyConfigurator" *.failureProtectionConfigurator.typename = "FailureProtectionConfigurator" # gate scheduling visualizer *.visualizer.gateScheduleVisualizer.displayGateSchedules = true *.visualizer.gateScheduleVisualizer.displayDuration = 100us *.visualizer.gateScheduleVisualizer.gateFilter = "*.source.eth[0].** or *.s1.eth[0..1].** or *.s2*.eth[0..1].** or *.s3*.eth[0].** " *.visualizer.gateScheduleVisualizer.height = 16 # gating configuration *.*.eth[*].macLayer.queue.typename = "GatingPriorityQueue" *.*.eth[*].macLayer.queue.numQueues = 1 *.*.eth[*].macLayer.queue.classifier.typename = "ContentBasedClassifier" *.*.eth[*].macLayer.queue.classifier.packetFilters = ["*"] *.*.eth[*].macLayer.queue.queue[*].typename = "DropTailQueue" *.*.eth[*].macLayer.queue.gate[*].bitrate = 100Mbps # enable stream policing in layer 2 *.*.bridging.streamRelay.typename = "StreamRelayLayer" *.*.bridging.streamCoder.typename = "StreamCoderLayer" # gate scheduling configuration *.gateScheduleConfigurator.gateCycleDuration = 20ms # TSN configuration # 64B = 8B (UDP) + 20B (IP) + 4B (802.1R) + 6B (802.1Q) + 14B + 4B (ETH MAC) + 8B (ETH PHY) *.failureProtectionConfigurator.configuration = [{name: "S1", application: "app[0]", source: "source", destination: "destination", pcp: 0, gateIndex: 0, packetFilter: "*", packetLength: 100B + 64B, packetInterval: 5ms, maxLatency: 100us, 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"