[General] abstract = true network = TokenBucketPolicingShowcaseNetwork sim-time-limit = 1s # configure Ethernet speed *.*.eth[*].bitrate = 100Mbps # 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[*].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 from ~40Mbps to ~110Mbps *.client1.app[0].source.packetLength = 1000B *.client1.app[0].source.productionInterval = 200us + replaceUnit(sin(dropUnit(simTime() * 10)), "ms") / 8 # 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 or *.switch.eth[2].macLayer.queue" *.visualizer.networkNodeVisualizer.annotationSpacing = 12 *.visualizer.packetDropVisualizer.displayPacketDrops = true *.visualizer.packetDropVisualizer.nodeFilter = "*switch*" #*.visualizer.packetDropVisualizer.fadeOutMode = "animationTime" *.visualizer.packetDropVisualizer.fadeOutTime = 3s *.visualizer.queueVisualizer.displayQueues = true *.visualizer.queueVisualizer.queueFilter = "**switch.eth[2]**" *.visualizer.queueVisualizer.placementHint = "topRight" *.visualizer.interfaceTableVisualizer.displayInterfaceTables = true *.visualizer.interfaceTableVisualizer.format = "%N" *.visualizer.interfaceTableVisualizer.nodeFilter = "*switch*" #*.switch.eth[2].macLayer.queue.packetCapacity = 310 *.switch.eth[2].macLayer.queue.displayStringTextFormat = "eth[2] queue:\ncontains %p packets" #*.infoVisualizer.displayInfos = true #*.infoVisualizer.modules = "*.switch.eth*.macLayer.queue" [NoStreamFiltering] description = "misbehaving traffic increases end-to-end delay for normal traffic" # no additional configuration [StreamFiltering] description = "Per-stream filtering using single rate two color metering" # 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 = "SingleRateTwoColorMeter" *.switch.bridging.streamFilter.ingress.meter[0].committedInformationRate = 40Mbps *.switch.bridging.streamFilter.ingress.meter[1].committedInformationRate = 20Mbps *.switch.bridging.streamFilter.ingress.meter[0].committedBurstSize = 10kB *.switch.bridging.streamFilter.ingress.meter[1].committedBurstSize = 5kB