xref: /freebsd-src/share/man/man9/ratecheck.9 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
199d528d4SDag-Erling Smørgrav.\"-
299d528d4SDag-Erling Smørgrav.\" Copyright (c) 2017 Dag-Erling Smørgrav
399d528d4SDag-Erling Smørgrav.\" All rights reserved.
499d528d4SDag-Erling Smørgrav.\"
599d528d4SDag-Erling Smørgrav.\" Redistribution and use in source and binary forms, with or without
699d528d4SDag-Erling Smørgrav.\" modification, are permitted provided that the following conditions
799d528d4SDag-Erling Smørgrav.\" are met:
899d528d4SDag-Erling Smørgrav.\" 1. Redistributions of source code must retain the above copyright
999d528d4SDag-Erling Smørgrav.\"    notice, this list of conditions and the following disclaimer.
1099d528d4SDag-Erling Smørgrav.\" 2. Redistributions in binary form must reproduce the above copyright
1199d528d4SDag-Erling Smørgrav.\"    notice, this list of conditions and the following disclaimer in the
1299d528d4SDag-Erling Smørgrav.\"    documentation and/or other materials provided with the distribution.
1399d528d4SDag-Erling Smørgrav.\"
1499d528d4SDag-Erling Smørgrav.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1599d528d4SDag-Erling Smørgrav.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1699d528d4SDag-Erling Smørgrav.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1799d528d4SDag-Erling Smørgrav.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1899d528d4SDag-Erling Smørgrav.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1999d528d4SDag-Erling Smørgrav.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2099d528d4SDag-Erling Smørgrav.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2199d528d4SDag-Erling Smørgrav.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2299d528d4SDag-Erling Smørgrav.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2399d528d4SDag-Erling Smørgrav.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2499d528d4SDag-Erling Smørgrav.\" SUCH DAMAGE.
2599d528d4SDag-Erling Smørgrav.\"
26*86b12bbcSEric van Gyzen.Dd March 11, 2022
2799d528d4SDag-Erling Smørgrav.Dt RATECHECK 9
2899d528d4SDag-Erling Smørgrav.Os
2999d528d4SDag-Erling Smørgrav.Sh NAME
3099d528d4SDag-Erling Smørgrav.Nm ratecheck ,
3199d528d4SDag-Erling Smørgrav.Nm ppsratecheck
3299d528d4SDag-Erling Smørgrav.Nd "event rate limiting"
3399d528d4SDag-Erling Smørgrav.Sh SYNOPSIS
3499d528d4SDag-Erling Smørgrav.In sys/time.h
3599d528d4SDag-Erling Smørgrav.Ft int
36*86b12bbcSEric van Gyzen.Fn ratecheck "struct timeval *lasttime" "const struct timeval *mininterval"
3799d528d4SDag-Erling Smørgrav.Ft int
3899d528d4SDag-Erling Smørgrav.Fn ppsratecheck "struct timeval *lasttime" "int *curpps" "int maxpps"
3999d528d4SDag-Erling Smørgrav.Sh DESCRIPTION
4099d528d4SDag-Erling SmørgravThe
4199d528d4SDag-Erling Smørgrav.Nm ratecheck
4299d528d4SDag-Erling Smørgravand
4399d528d4SDag-Erling Smørgrav.Nm ppsratecheck
4499d528d4SDag-Erling Smørgravfunctions facilitate rate-limiting of arbitrary events.
4599d528d4SDag-Erling SmørgravThe former enforces a minimum interval between events while the latter
4699d528d4SDag-Erling Smørgravenforces a maximum number of events per second.
4799d528d4SDag-Erling Smørgrav.Pp
4899d528d4SDag-Erling SmørgravThe
4999d528d4SDag-Erling Smørgrav.Nm ratecheck
5099d528d4SDag-Erling Smørgravfunction compares the current time to the value pointed to by
5199d528d4SDag-Erling Smørgrav.Fa lasttime .
5299d528d4SDag-Erling SmørgravIf the difference is equal to or greater than
5399d528d4SDag-Erling Smørgrav.Fa mininterval ,
5499d528d4SDag-Erling Smørgravit returns a non-zero value and updates
5599d528d4SDag-Erling Smørgrav.Fa lasttime
5699d528d4SDag-Erling Smørgravto the current time.
5799d528d4SDag-Erling SmørgravOtherwise, it returns zero.
5899d528d4SDag-Erling Smørgrav.Pp
5999d528d4SDag-Erling SmørgravThe
6099d528d4SDag-Erling Smørgrav.Nm ppsratecheck
6199d528d4SDag-Erling Smørgravfunction first compares the current time
6299d528d4SDag-Erling Smørgravto
6399d528d4SDag-Erling Smørgrav.Fa lasttime .
6499d528d4SDag-Erling SmørgravIf at least a full second has passed, the value pointed to by the
6599d528d4SDag-Erling Smørgrav.Fa curpps
6699d528d4SDag-Erling Smørgravargument is reset to 1 and
6799d528d4SDag-Erling Smørgrav.Fa lasttime
6899d528d4SDag-Erling Smørgravis updated to the current time.
6999d528d4SDag-Erling SmørgravOtherwise,
7099d528d4SDag-Erling Smørgrav.Fa curpps
7199d528d4SDag-Erling Smørgravis incremented and
7299d528d4SDag-Erling Smørgrav.Fa lasttime
7399d528d4SDag-Erling Smørgravis left untouched.
7499d528d4SDag-Erling SmørgravIn either case,
7599d528d4SDag-Erling Smørgrav.Nm ppsratecheck
7699d528d4SDag-Erling Smørgravreturns a non-zero value if and only if the updated
7799d528d4SDag-Erling Smørgrav.Fa curpps
7899d528d4SDag-Erling Smørgravis less than or equal to
7999d528d4SDag-Erling Smørgrav.Fa maxpps
8099d528d4SDag-Erling Smørgravor
8199d528d4SDag-Erling Smørgrav.Fa maxpps
8299d528d4SDag-Erling Smørgravis negative.
8399d528d4SDag-Erling Smørgrav.Sh SEE ALSO
8499d528d4SDag-Erling Smørgrav.Xr counter 9
8599d528d4SDag-Erling Smørgrav.Sh HISTORY
8699d528d4SDag-Erling SmørgravThe
8799d528d4SDag-Erling Smørgrav.Nm ratecheck
8899d528d4SDag-Erling Smørgravand
8999d528d4SDag-Erling Smørgrav.Nm ppsratecheck
9099d528d4SDag-Erling Smørgravfunctions first appeared in
9199d528d4SDag-Erling Smørgrav.Fx 5.1 .
92