Table Of Contents
Table Of Contents

Token Bucket

The TokenBucket compound module implements the token bucket algorithm. By default, the module contains a DropTailQueue and a TokenBasedServer. The queue capacity and the token consumption of the token-based server can be used to parameterize the token bucket algorithm. The module uses an external token generator for the token-based server.

In this example network, packets are produced periodically by an active packet source (ActivePacketSource). The packets are pushed into a token bucket (TokenBucket), which pushes them into a passive packet sink (PassivePacketSink). A token generator (TimeBasedTokenGenerator) generates tokens periodically into the token bucket module.

../../../_images/TokenBucket.png
../../../_images/TokenBucket_Bucket.png
network TokenBucketTutorialStep
{
    submodules:
        producer: ActivePacketSource {
            @display("p=100,100");
        }
        bucket: TokenBucket {
            @display("p=200,100");
        }
        consumer: PassivePacketSink {
            @display("p=300,100");
        }
        tokenGenerator: TimeBasedTokenGenerator {
            @display("p=100,200");
            storageModule = "^.bucket.server";
        }
    connections allowunconnected:
        producer.out --> bucket.in;
        bucket.out --> consumer.in;
}
[Config TokenBucket]
network = TokenBucketTutorialStep
sim-time-limit = 10s

*.producer.packetLength = 1B
*.producer.productionInterval = uniform(0s, 2s)
*.bucket.server.maxNumTokens = 10
*.tokenGenerator.generationInterval = uniform(0s, 2s)