[General] network = StatisticalPolicingShowcaseNetwork sim-time-limit = 1s description = "Per-stream filtering using sliding window rate metering and statistical rate limiting" abstract = true # configure Ethernet speed *.*.eth[*].bitrate = 100Mbps *.client1.eth[0].macLayer.queue.typename = "DropTailQueue" *.client1.eth[0].macLayer.queue.packetCapacity = 100 # configure client applications *.client*.numApps = 1 *.client*.app[*].typename = "UdpSourceApp" *.client1.app[0].display-name = "misbehaving traffic" *.client2.app[0].display-name = "normal traffic" *.client*.app[0].io.destAddress = "server" *.client1.app[0].io.destPort = 1000 *.client2.app[0].io.destPort = 1001 *.client1.app[0].io.displayStringTextFormat = "{numSent} misbehaving traffic" *.client2.app[0].io.displayStringTextFormat = "{numSent} normal traffic" # configure misbehaving traffic stream ~40Mbps *.client1.app[0].source.packetLength = 25B *.client1.app[0].source.productionInterval = 10us + replaceUnit(sin(dropUnit(simTime() * 10)), "ms") / 256 + replaceUnit(sin(dropUnit(simTime() * 125)), "ms") / 512 # configure normal traffic stream ~20Mbps *.client2.app[0].source.packetLength = 500B *.client2.app[0].source.productionInterval = 250us # configure server applications *.server.numApps = 2 *.server.app[*].typename = "UdpSinkApp" *.server.app[0].display-name = "misbehaving traffic" *.server.app[1].display-name = "normal traffic" *.server.app[0].io.localPort = 1000 *.server.app[1].io.localPort = 1001 *.server.app[0].io.displayStringTextFormat = "{numReceived} misbehaving traffic" *.server.app[1].io.displayStringTextFormat = "{numReceived} normal traffic" # display number of packets sent and received on network nodes *.visualizer.infoVisualizer.displayInfos = true *.visualizer.infoVisualizer.placementHint = "top" *.visualizer.infoVisualizer.modules = "*.*.app[*].io" *.visualizer.networkNodeVisualizer.annotationSpacing = 12 [NoStreamFiltering] description = "Misbehaving traffic increases end-to-end delay for normal traffic" # no additional configuration [StreamFiltering] description = "Per-stream filtering using sliding window rate metering and statistical rate limiting" # enable outgoing streams *.client*.hasOutgoingStreams = true # configure client stream identification *.client*.bridging.streamIdentifier.identifier.mapping = [{stream: "misbehaving traffic", packetFilter: expr(udp.destPort == 1000)}, {stream: "normal traffic", packetFilter: expr(udp.destPort == 1001)}] # configure client stream encoding *.client*.bridging.streamCoder.encoder.mapping = [{stream: "misbehaving traffic", vlan: 0}, {stream: "normal traffic", vlan: 4}] # disable forwarding IEEE 802.1Q C-Tag *.switch.bridging.directionReverser.reverser.excludeEncapsulationProtocols = ["ieee8021qctag"] # configure stream decoding *.switch.bridging.streamCoder.decoder.mapping = [{vlan: 0, stream: "misbehaving traffic"}, {vlan: 4, stream: "normal traffic"}] # enable ingress per-stream filtering *.switch.hasIngressTrafficFiltering = true # configure per-stream filtering *.switch.bridging.streamFilter.ingress.numStreams = 2 *.switch.bridging.streamFilter.ingress.hasDefaultPath = false *.switch.bridging.streamFilter.ingress.classifier.mapping = {"misbehaving traffic": 0, "normal traffic": 1} *.switch.bridging.streamFilter.ingress.meter[0].display-name = "misbehaving traffic" *.switch.bridging.streamFilter.ingress.meter[1].display-name = "normal traffic" *.switch*.bridging.streamFilter.ingress.meter[*].typename = "SlidingWindowRateMeter" *.switch*.bridging.streamFilter.ingress.meter[*].timeWindow = 15ms *.switch*.bridging.streamFilter.ingress.filter[*].typename = "StatisticalRateLimiter" *.switch*.bridging.streamFilter.ingress.filter[0].maxDatarate = 40Mbps *.switch*.bridging.streamFilter.ingress.filter[1].maxDatarate = 20Mbps