Lennart Poettering | 03467c8 | 2010-08-17 03:33:07 +0200 | [diff] [blame] | 1 | /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ |
Lennart Poettering | 1e2e813 | 2010-01-29 04:42:57 +0100 | [diff] [blame] | 2 | |
| 3 | #ifndef fooratelimithfoo |
| 4 | #define fooratelimithfoo |
| 5 | |
Lennart Poettering | a7334b0 | 2010-02-03 13:03:47 +0100 | [diff] [blame] | 6 | /*** |
| 7 | This file is part of systemd. |
| 8 | |
| 9 | Copyright 2010 Lennart Poettering |
| 10 | |
| 11 | systemd is free software; you can redistribute it and/or modify it |
| 12 | under the terms of the GNU General Public License as published by |
| 13 | the Free Software Foundation; either version 2 of the License, or |
| 14 | (at your option) any later version. |
| 15 | |
| 16 | systemd is distributed in the hope that it will be useful, but |
| 17 | WITHOUT ANY WARRANTY; without even the implied warranty of |
| 18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 19 | General Public License for more details. |
| 20 | |
| 21 | You should have received a copy of the GNU General Public License |
| 22 | along with systemd; If not, see <http://www.gnu.org/licenses/>. |
| 23 | ***/ |
| 24 | |
Lennart Poettering | 1e2e813 | 2010-01-29 04:42:57 +0100 | [diff] [blame] | 25 | #include "util.h" |
| 26 | |
| 27 | typedef struct RateLimit { |
| 28 | usec_t interval; |
Lennart Poettering | 9d58f1d | 2010-04-21 04:01:24 +0200 | [diff] [blame] | 29 | usec_t begin; |
Lennart Poettering | 1e2e813 | 2010-01-29 04:42:57 +0100 | [diff] [blame] | 30 | unsigned burst; |
Harald Hoyer | 4ce9faa | 2011-02-21 15:32:18 +0100 | [diff] [blame] | 31 | unsigned num; |
Lennart Poettering | 1e2e813 | 2010-01-29 04:42:57 +0100 | [diff] [blame] | 32 | } RateLimit; |
| 33 | |
Lennart Poettering | 47be870 | 2010-02-03 14:21:48 +0100 | [diff] [blame] | 34 | #define RATELIMIT_DEFINE(_name, _interval, _burst) \ |
| 35 | RateLimit _name = { \ |
| 36 | .interval = (_interval), \ |
| 37 | .burst = (_burst), \ |
Harald Hoyer | 4ce9faa | 2011-02-21 15:32:18 +0100 | [diff] [blame] | 38 | .num = 0, \ |
Lennart Poettering | 47be870 | 2010-02-03 14:21:48 +0100 | [diff] [blame] | 39 | .begin = 0 \ |
Lennart Poettering | 1e2e813 | 2010-01-29 04:42:57 +0100 | [diff] [blame] | 40 | } |
| 41 | |
Lennart Poettering | 47be870 | 2010-02-03 14:21:48 +0100 | [diff] [blame] | 42 | #define RATELIMIT_INIT(v, _interval, _burst) \ |
| 43 | do { \ |
| 44 | RateLimit *_r = &(v); \ |
| 45 | _r->interval = (_interval); \ |
| 46 | _r->burst = (_burst); \ |
Harald Hoyer | 4ce9faa | 2011-02-21 15:32:18 +0100 | [diff] [blame] | 47 | _r->num = 0; \ |
Lennart Poettering | 47be870 | 2010-02-03 14:21:48 +0100 | [diff] [blame] | 48 | _r->begin = 0; \ |
Lennart Poettering | 1e2e813 | 2010-01-29 04:42:57 +0100 | [diff] [blame] | 49 | } while (false); |
| 50 | |
| 51 | bool ratelimit_test(RateLimit *r); |
| 52 | |
| 53 | #endif |