Table Of Contents
Table Of Contents

Limiting the Data Rate of a Packet Stream

The RateMeter and RateLimiter modules can be used to limit the data rate of a stream of packets. The meter measures the data rate of the incoming stream of packets, and attaches a rate tag to each packet. The limiter module, based on the rate tag, limits the outgoing data rate to a configurable value.

In this step, packets are produced periodically by an active packet source (ActivePacketSource). The packets are consumed by a passive packet sink (PassivePacketSink). The packet rate is measured by a RateMeter, and if the rate of packets is higher than a predefined threshold, then packets are dropped by the RateLimiter.

network MeterTutorialStep
{
    @display("bgb=875,200");
    submodules:
        producer: ActivePacketSource {
            @display("p=100,100");
        }
        meter: RateMeter {
            @display("p=325,100");
        }
        limiter: RateLimiter {
            @display("p=550,100");
        }
        consumer: PassivePacketSink {
            @display("p=775,100");
        }
    connections allowunconnected:
        producer.out --> meter.in;
        meter.out --> limiter.in;
        limiter.out --> consumer.in;
}
[Config Meter]
network = MeterTutorialStep
sim-time-limit = 100s

*.producer.packetLength = 1B
*.producer.productionInterval = 1s
*.meter.alpha = 0.9
*.limiter.maxPacketrate = 0.5