/usr/share/cagefs-skeleton/usr/include/bind9/isc
/* * Copyright (C) Internet Systems Consortium, Inc. ("ISC") * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, you can obtain one at https://mozilla.org/MPL/2.0/. * * See the COPYRIGHT file distributed with this work for additional * information regarding copyright ownership. */ #ifndef ISC_QUOTA_H #define ISC_QUOTA_H 1 /***** ***** Module Info *****/ /*! \file isc/quota.h * * \brief The isc_quota_t object is a simple helper object for implementing * quotas on things like the number of simultaneous connections to * a server. It keeps track of the amount of quota in use, and * encapsulates the locking necessary to allow multiple tasks to * share a quota. */ /*** *** Imports. ***/ #include <isc/atomic.h> #include <isc/lang.h> #include <isc/magic.h> #include <isc/mutex.h> #include <isc/types.h> /***** ***** Types. *****/ ISC_LANG_BEGINDECLS /*% isc_quota_cb - quota callback structure */ typedef struct isc_quota_cb isc_quota_cb_t; typedef void (*isc_quota_cb_func_t)(isc_quota_t *quota, void *data); struct isc_quota_cb { int magic; isc_quota_cb_func_t cb_func; void *data; ISC_LINK(isc_quota_cb_t) link; }; /*% isc_quota structure */ struct isc_quota { int magic; atomic_uint_fast32_t max; atomic_uint_fast32_t used; atomic_uint_fast32_t soft; atomic_uint_fast32_t waiting; isc_mutex_t cblock; ISC_LIST(isc_quota_cb_t) cbs; }; void isc_quota_init(isc_quota_t *quota, unsigned int max); /*%< * Initialize a quota object. */ void isc_quota_destroy(isc_quota_t *quota); /*%< * Destroy a quota object. */ void isc_quota_soft(isc_quota_t *quota, unsigned int soft); /*%< * Set a soft quota. */ void isc_quota_max(isc_quota_t *quota, unsigned int max); /*%< * Re-set a maximum quota. */ unsigned int isc_quota_getmax(isc_quota_t *quota); /*%< * Get the maximum quota. */ unsigned int isc_quota_getsoft(isc_quota_t *quota); /*%< * Get the soft quota. */ unsigned int isc_quota_getused(isc_quota_t *quota); /*%< * Get the current usage of quota. */ isc_result_t isc_quota_attach(isc_quota_t *quota, isc_quota_t **p); /*%< * * Attempt to reserve one unit of 'quota', and also attaches '*p' to the quota * if successful (ISC_R_SUCCESS or ISC_R_SOFTQUOTA). * * Returns: * \li #ISC_R_SUCCESS Success * \li #ISC_R_SOFTQUOTA Success soft quota reached * \li #ISC_R_QUOTA Quota is full */ isc_result_t isc_quota_attach_cb(isc_quota_t *quota, isc_quota_t **p, isc_quota_cb_t *cb); /*%< * * Like isc_quota_attach(), but if there's no quota left then cb->cb_func will * be called when we are attached to quota. * * Note: It's the caller's responsibility to make sure that we don't end up * with a huge number of callbacks waiting, making it easy to create a * resource exhaustion attack. For example, in the case of TCP listening, * we simply don't accept new connections when the quota is exceeded, so * the number of callbacks waiting in the queue will be limited by the * listen() backlog. * * Returns: * \li #ISC_R_SUCCESS Success * \li #ISC_R_SOFTQUOTA Success soft quota reached * \li #ISC_R_QUOTA Quota is full */ void isc_quota_cb_init(isc_quota_cb_t *cb, isc_quota_cb_func_t cb_func, void *data); /*%< * Initialize isc_quota_cb_t - setup the list, set the callback and data. */ void isc_quota_detach(isc_quota_t **p); /*%< * Release one unit of quota, and also detaches '*p' from the quota. */ ISC_LANG_ENDDECLS #endif /* ISC_QUOTA_H */
.
Edit
..
Edit
aes.h
Edit
align.h
Edit
app.h
Edit
assertions.h
Edit
astack.h
Edit
atomic.h
Edit
backtrace.h
Edit
barrier.h
Edit
base32.h
Edit
base64.h
Edit
bind9.h
Edit
buffer.h
Edit
bufferlist.h
Edit
cmocka.h
Edit
commandline.h
Edit
condition.h
Edit
counter.h
Edit
crc64.h
Edit
deprecated.h
Edit
dir.h
Edit
endian.h
Edit
errno.h
Edit
errno2result.h
Edit
error.h
Edit
event.h
Edit
eventclass.h
Edit
file.h
Edit
formatcheck.h
Edit
fsaccess.h
Edit
fuzz.h
Edit
hash.h
Edit
heap.h
Edit
hex.h
Edit
hmac.h
Edit
hp.h
Edit
ht.h
Edit
httpd.h
Edit
interfaceiter.h
Edit
iterated_hash.h
Edit
lang.h
Edit
lex.h
Edit
lfsr.h
Edit
lib.h
Edit
likely.h
Edit
list.h
Edit
log.h
Edit
magic.h
Edit
managers.h
Edit
md.h
Edit
mem.h
Edit
meminfo.h
Edit
mutex.h
Edit
mutexatomic.h
Edit
mutexblock.h
Edit
net.h
Edit
netaddr.h
Edit
netdb.h
Edit
netmgr.h
Edit
netscope.h
Edit
nonce.h
Edit
offset.h
Edit
once.h
Edit
os.h
Edit
parseint.h
Edit
platform.h
Edit
pool.h
Edit
portset.h
Edit
print.h
Edit
queue.h
Edit
quota.h
Edit
radix.h
Edit
random.h
Edit
ratelimiter.h
Edit
refcount.h
Edit
regex.h
Edit
region.h
Edit
resource.h
Edit
result.h
Edit
resultclass.h
Edit
rwlock.h
Edit
safe.h
Edit
serial.h
Edit
siphash.h
Edit
sockaddr.h
Edit
socket.h
Edit
stat.h
Edit
stats.h
Edit
stdatomic.h
Edit
stdio.h
Edit
stdtime.h
Edit
strerr.h
Edit
string.h
Edit
symtab.h
Edit
syslog.h
Edit
task.h
Edit
taskpool.h
Edit
thread.h
Edit
time.h
Edit
timer.h
Edit
tm.h
Edit
types.h
Edit
url.h
Edit
utf8.h
Edit
util.h
Edit
version.h
Edit