This file helps the server discard excess TCP connections. More...
#include "config.h"
#include "util/regional.h"
#include "util/log.h"
#include "util/config_file.h"
#include "util/net_help.h"
#include "util/tcp_conn_limit.h"
#include "services/localzone.h"
#include "sldns/str2wire.h"
Functions | |
struct tcl_list * | tcl_list_create (void) |
Create TCP connection limit structure. More... | |
static void | tcl_list_free_node (rbnode_type *node, void *ATTR_UNUSED(arg)) |
void | tcl_list_delete (struct tcl_list *tcl) |
Delete TCP connection limit structure. More... | |
static struct tcl_addr * | tcl_list_insert (struct tcl_list *tcl, struct sockaddr_storage *addr, socklen_t addrlen, int net, uint32_t limit, int complain_duplicates) |
insert new address into tcl_list structure | |
static int | tcl_list_str_cfg (struct tcl_list *tcl, const char *str, const char *s2, int complain_duplicates) |
apply tcl_list string | |
static int | read_tcl_list (struct tcl_list *tcl, struct config_file *cfg) |
read tcl_list config | |
int | tcl_list_apply_cfg (struct tcl_list *tcl, struct config_file *cfg) |
Process TCP connection limit config. More... | |
int | tcl_new_connection (struct tcl_addr *tcl) |
Increment TCP connection count if found, provided the count was below the limit. More... | |
void | tcl_close_connection (struct tcl_addr *tcl) |
Decrement TCP connection count if found. More... | |
struct tcl_addr * | tcl_addr_lookup (struct tcl_list *tcl, struct sockaddr_storage *addr, socklen_t addrlen) |
Lookup address to see its TCP connection limit structure. More... | |
size_t | tcl_list_get_mem (struct tcl_list *tcl) |
Get memory used by TCP connection limit structure. More... | |
This file helps the server discard excess TCP connections.
struct tcl_list* tcl_list_create | ( | void | ) |
Create TCP connection limit structure.
References tcl_list::region, regional_create(), and tcl_list_delete().
void tcl_list_delete | ( | struct tcl_list * | tcl | ) |
Delete TCP connection limit structure.
tcl | to delete. |
References traverse_postorder(), and tcl_list::tree.
Referenced by daemon_delete(), and tcl_list_create().
int tcl_list_apply_cfg | ( | struct tcl_list * | tcl, |
struct config_file * | cfg | ||
) |
Process TCP connection limit config.
tcl | where to store. |
cfg | config options. |
References addr_tree_init(), addr_tree_init_parents(), read_tcl_list(), tcl_list::region, regional_free_all(), and tcl_list::tree.
int tcl_new_connection | ( | struct tcl_addr * | tcl | ) |
Increment TCP connection count if found, provided the count was below the limit.
tcl | structure for tcl storage, or NULL. |
References tcl_addr::count, tcl_addr::limit, and tcl_addr::lock.
Referenced by comm_point_perform_accept().
void tcl_close_connection | ( | struct tcl_addr * | tcl | ) |
Decrement TCP connection count if found.
tcl | structure for tcl storage, or NULL. |
References tcl_addr::count, tcl_addr::lock, and log_assert.
Referenced by comm_point_close().
struct tcl_addr* tcl_addr_lookup | ( | struct tcl_list * | tcl, |
struct sockaddr_storage * | addr, | ||
socklen_t | addrlen | ||
) |
Lookup address to see its TCP connection limit structure.
tcl | structure for address storage. |
addr | address to check |
addrlen | length of addr. |
References addr_tree_lookup(), and tcl_list::tree.
Referenced by comm_point_perform_accept().
size_t tcl_list_get_mem | ( | struct tcl_list * | tcl | ) |
Get memory used by TCP connection limit structure.
tcl | structure for address storage. |
References tcl_list::region, and regional_get_mem().