[General] network = inet.networks.tsn.TsnLinearNetwork sim-time-limit = 10s description = "Traffic shaping using asynchronous shapers" record-eventlog = false #################### # Flow Configuration # # Traffic class Packet interval Filter data rate Shaper data rate Channel data rate Priority Shaping # Best Effort 200us ~41.12Mbps ~41.68Mbps ~42.68Mbps 0 ATS # Video 400us ~20.56Mbps ~20.84Mbps ~21.34Mbps 4 ATS # # Applicaion packet length: 1000B # Packet length in asynchronous shaper filter (bridging layer 802.1Q ingress filter): 1028B = 1000B (APP) + 8B (UDP) + 20B (IP) # Data rate in asynchronous shaper filter: 1028B * 8 / Packet interval = 41.12Mbps / 20.56Mbps # Data rate in asynchronous shaper queue: 1046B * 8 / Packet interval = 41.84Mbps / 20.92Mbps # Channel packet length: 1054B = 1000B (APP) + 8B (UDP) + 20B (IP) + 14B (ETH MAC) + 4B (ETH FCS) + 8B (ETH PHY) # Channel data rate = (1054B + 12B (IFG) + 1B (cushion)) * 8 / Packet interval = 42.68Mbps / 21.34Mbps #################### # client applications *.client.numApps = 2 *.client.app[*].typename = "UdpSourceApp" *.client.app[0].display-name = "best effort" *.client.app[1].display-name = "video" *.client.app[*].io.destAddress = "server" *.client.app[0].io.destPort = 1000 *.client.app[1].io.destPort = 1001 *.client.app[*].source.packetLength = 1000B *.client.app[0].source.productionInterval = replaceUnit(1 / (sin(dropUnit(simTime()) * 3) + 5), "ms") # avg 200us/40Mbps *.client.app[1].source.productionInterval = replaceUnit(1 / (sin(dropUnit(simTime() * 1)) + sin(dropUnit(simTime() * 8)) + 2.5), "ms") # avg 400us/20Mbps # server applications *.server.numApps = 2 *.server.app[*].typename = "UdpSinkApp" *.server.app[0].display-name = "best effort" *.server.app[1].display-name = "video" *.server.app[0].io.localPort = 1000 *.server.app[1].io.localPort = 1001 # enable outgoing streams *.client.hasOutgoingStreams = true # client stream identification *.client.bridging.streamIdentifier.identifier.mapping = [{stream: "best effort", packetFilter: expr(udp.destPort == 1000)}, {stream: "video", packetFilter: expr(udp.destPort == 1001)}] # client stream encoding *.client.bridging.streamCoder.encoder.mapping = [{stream: "best effort", pcp: 0}, {stream: "video", pcp: 4}] # disable forwarding IEEE 802.1Q C-Tag *.switch.bridging.directionReverser.reverser.excludeEncapsulationProtocols = ["ieee8021qctag"] # switch stream decoding *.switch.bridging.streamCoder.decoder.mapping = [{pcp: 0, stream: "best effort"}, {pcp: 4, stream: "video"}] # enable ingress per-stream filtering *.switch.hasIngressTrafficFiltering = true # per-stream filtering *.switch.bridging.streamFilter.ingress.numStreams = 2 *.switch.bridging.streamFilter.ingress.classifier.mapping = {"best effort": 0, "video": 1} *.switch.bridging.streamFilter.ingress.*[0].display-name = "best effort" *.switch.bridging.streamFilter.ingress.*[1].display-name = "video" *.switch.bridging.streamFilter.ingress.meter[*].typename = "EligibilityTimeMeter" *.switch.bridging.streamFilter.ingress.meter[*].maxResidenceTime = 100ms *.switch.bridging.streamFilter.ingress.meter[0].committedInformationRate = 41.68Mbps # shaper data rate *.switch.bridging.streamFilter.ingress.meter[0].committedBurstSize = 100 * (1000B + 28B) *.switch.bridging.streamFilter.ingress.meter[1].committedInformationRate = 20.84Mbps # shaper data rate *.switch.bridging.streamFilter.ingress.meter[1].committedBurstSize = 50 * (1000B + 28B) *.switch.bridging.streamFilter.ingress.meter[*].packetOverheadLength = 18B # 1046-1028 (14 MAC header + 4 FCS) *.switch.bridging.streamFilter.ingress.filter[*].typename = "EligibilityTimeFilter" # enable egress traffic shaping *.switch.hasEgressTrafficShaping = true # asynchronous traffic shaping *.switch.eth[*].macLayer.queue.numTrafficClasses = 2 *.switch.eth[*].macLayer.queue.*[0].display-name = "best effort" *.switch.eth[*].macLayer.queue.*[1].display-name = "video" *.switch.eth[*].macLayer.queue.queue[*].typename = "EligibilityTimeQueue" *.switch.eth[*].macLayer.queue.transmissionSelectionAlgorithm[*].typename = "EligibilityTimeGate"