xref: /freebsd/share/man/man9/ratecheck.9 (revision 7899f917b1c0ea178f1d2be0cfb452086d079d23)
1.\"-
2.\" Copyright (c) 2017 Dag-Erling Smørgrav
3.\" All rights reserved.
4.\"
5.\" Redistribution and use in source and binary forms, with or without
6.\" modification, are permitted provided that the following conditions
7.\" are met:
8.\" 1. Redistributions of source code must retain the above copyright
9.\"    notice, this list of conditions and the following disclaimer.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\"
14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24.\" SUCH DAMAGE.
25.\"
26.Dd March 11, 2022
27.Dt RATECHECK 9
28.Os
29.Sh NAME
30.Nm ratecheck ,
31.Nm ppsratecheck
32.Nd "event rate limiting"
33.Sh SYNOPSIS
34.In sys/time.h
35.Ft int
36.Fn ratecheck "struct timeval *lasttime" "const struct timeval *mininterval"
37.Ft int
38.Fn ppsratecheck "struct timeval *lasttime" "int *curpps" "int maxpps"
39.Sh DESCRIPTION
40The
41.Nm ratecheck
42and
43.Nm ppsratecheck
44functions facilitate rate-limiting of arbitrary events.
45The former enforces a minimum interval between events while the latter
46enforces a maximum number of events per second.
47.Pp
48The
49.Nm ratecheck
50function compares the current time to the value pointed to by
51.Fa lasttime .
52If the difference is equal to or greater than
53.Fa mininterval ,
54it returns a non-zero value and updates
55.Fa lasttime
56to the current time.
57Otherwise, it returns zero.
58.Pp
59The
60.Nm ppsratecheck
61function first compares the current time
62to
63.Fa lasttime .
64If at least a full second has passed, the value pointed to by the
65.Fa curpps
66argument is reset to 1 and
67.Fa lasttime
68is updated to the current time.
69Otherwise,
70.Fa curpps
71is incremented and
72.Fa lasttime
73is left untouched.
74In either case,
75.Nm ppsratecheck
76returns a non-zero value if and only if the updated
77.Fa curpps
78is less than or equal to
79.Fa maxpps
80or
81.Fa maxpps
82is negative.
83.Sh SEE ALSO
84.Xr counter 9
85.Sh HISTORY
86The
87.Nm ratecheck
88and
89.Nm ppsratecheck
90functions first appeared in
91.Fx 5.1 .
92