[General] network = inet.networks.tsn.TsnLinearNetwork sim-time-limit = 1s description = "Per-stream filtering using sliding window rate metering and statistical rate limiting" # 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 # best-effort stream ~40Mbps *.client.app[0].source.packetLength = 1000B *.client.app[0].source.productionInterval = 200us + replaceUnit(sin(dropUnit(simTime() * 10)), "ms") / 20 # video stream ~20Mbps *.client.app[1].source.packetLength = 500B *.client.app[1].source.productionInterval = 200us + replaceUnit(sin(dropUnit(simTime() * 20)), "ms") / 10 # 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}] # server applications *.server.numApps = 2 *.server.app[*].typename = "UdpSinkApp" *.server.app[0].io.localPort = 1000 *.server.app[1].io.localPort = 1001 # enable per-stream filtering *.switch.hasIngressTrafficFiltering = true # disable forwarding IEEE 802.1Q C-Tag *.switch.bridging.directionReverser.reverser.excludeEncapsulationProtocols = ["ieee8021qctag"] # stream decoding *.switch.bridging.streamCoder.decoder.mapping = [{pcp: 0, stream: "best effort"}, {pcp: 4, stream: "video"}] # per-stream filtering *.switch.bridging.streamFilter.ingress.numStreams = 2 *.switch.bridging.streamFilter.ingress.classifier.mapping = {"best effort": 0, "video": 1} *.switch.bridging.streamFilter.ingress.meter[0].display-name = "best effort" *.switch.bridging.streamFilter.ingress.meter[1].display-name = "video" # per-stream filtering *.switch*.bridging.streamFilter.ingress.meter[*].typename = "SlidingWindowRateMeter" *.switch*.bridging.streamFilter.ingress.meter[*].timeWindow = 10ms *.switch*.bridging.streamFilter.ingress.filter[*].typename = "StatisticalRateLimiter" *.switch*.bridging.streamFilter.ingress.filter[0].maxDatarate = 40Mbps *.switch*.bridging.streamFilter.ingress.filter[1].maxDatarate = 20Mbps