diff options
author | Ben Pfaff <blp@nicira.com> | 2012-05-30 17:16:16 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2012-06-21 08:00:07 -0700 |
commit | 648f4f1fe4ee22cf9d5e9dc0eb9b53a40f9035db (patch) | |
tree | 317795cd164055b10b91e874f6df07b895ab61eb /lib/token-bucket.h | |
parent | 8d2835d8c9fde763d3dd9790f38eac0595d5024a (diff) |
token-bucket: New library for generic rate-limiting.
This commit converts two rate-limiters in the tree to use the library.
I intend to use the library elsewhere in the future.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/token-bucket.h')
-rw-r--r-- | lib/token-bucket.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lib/token-bucket.h b/lib/token-bucket.h new file mode 100644 index 00000000..ef2b1ae7 --- /dev/null +++ b/lib/token-bucket.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2012 Nicira, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef TOKEN_BUCKET_H +#define TOKEN_BUCKET_H 1 + +#include <limits.h> +#include <stdbool.h> + +struct token_bucket { + /* Configuration settings. */ + unsigned int rate; /* Tokens added per millisecond. */ + unsigned int burst; /* Max cumulative tokens credit. */ + + /* Current status. */ + unsigned int tokens; /* Current number of tokens. */ + long long int last_fill; /* Last time tokens added. */ +}; + +#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN } + +void token_bucket_init(struct token_bucket *, + unsigned int rate, unsigned int burst); +void token_bucket_set(struct token_bucket *, + unsigned int rate, unsigned int burst); +bool token_bucket_withdraw(struct token_bucket *, unsigned int n); +void token_bucket_wait(struct token_bucket *, unsigned int n); + +#endif /* token-bucket.h */ |