]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/basic/ratelimit.h
Add SPDX license identifiers to source files under the LGPL
[thirdparty/systemd.git] / src / basic / ratelimit.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
c2f1db8f 2#pragma once
1e2e8133 3
a7334b09
LP
4/***
5 This file is part of systemd.
6
7 Copyright 2010 Lennart Poettering
8
9 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
10 under the terms of the GNU Lesser General Public License as published by
11 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
12 (at your option) any later version.
13
14 systemd is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 17 Lesser General Public License for more details.
a7334b09 18
5430f7f2 19 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
20 along with systemd; If not, see <http://www.gnu.org/licenses/>.
21***/
22
11c3a366
TA
23#include <stdbool.h>
24
25#include "time-util.h"
1e2e8133
LP
26#include "util.h"
27
28typedef struct RateLimit {
29 usec_t interval;
9d58f1db 30 usec_t begin;
1e2e8133 31 unsigned burst;
4ce9faa9 32 unsigned num;
1e2e8133
LP
33} RateLimit;
34
47be870b
LP
35#define RATELIMIT_DEFINE(_name, _interval, _burst) \
36 RateLimit _name = { \
37 .interval = (_interval), \
38 .burst = (_burst), \
4ce9faa9 39 .num = 0, \
47be870b 40 .begin = 0 \
1e2e8133
LP
41 }
42
47be870b
LP
43#define RATELIMIT_INIT(v, _interval, _burst) \
44 do { \
45 RateLimit *_r = &(v); \
46 _r->interval = (_interval); \
47 _r->burst = (_burst); \
4ce9faa9 48 _r->num = 0; \
47be870b 49 _r->begin = 0; \
acdfc041 50 } while (false)
1e2e8133 51
451b34cc
LP
52#define RATELIMIT_RESET(v) \
53 do { \
54 RateLimit *_r = &(v); \
55 _r->num = 0; \
56 _r->begin = 0; \
57 } while (false)
58
1e2e8133 59bool ratelimit_test(RateLimit *r);