unbound: util/tcp_conn_limit.c File Reference

unbound 0.1

Functions
tcp_conn_limit.c File Reference

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.
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.
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.
int | tcl_new_connection (struct tcl_addr *tcl)
| Increment TCP connection count if found, provided the count was below the limit.
void | tcl_close_connection (struct tcl_addr *tcl)
| Decrement TCP connection count if found.
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.
size_t | tcl_list_get_mem (struct tcl_list *tcl)
| Get memory used by TCP connection limit structure.
void | tcl_list_swap_tree (struct tcl_list *tcl, struct tcl_list *data)
| Swap internal tree with preallocated entries.

## Detailed Description

This file helps the server discard excess TCP connections.

## Function Documentation

## ◆ tcl_list_create()

struct tcl_list * tcl_list_create | ( | void |  | ) |

Create TCP connection limit structure.

Returns
  new structure or NULL on error.

References tcl_list::region, regional_create(), and tcl_list_delete().

Referenced by daemon_init(), and fr_construct_from_config().

## ◆ tcl_list_delete()

void tcl_list_delete | ( | struct tcl_list * | tcl | ) |

Delete TCP connection limit structure.

Parameters

  tcl | to delete.

References tcl_list::region, regional_destroy(), traverse_postorder(), and tcl_list::tree.

Referenced by daemon_delete(), daemon_init(), fr_construct_clear(), and tcl_list_create().

## ◆ tcl_list_apply_cfg()

int tcl_list_apply_cfg | ( | struct tcl_list * | tcl,
|  | struct config_file * | cfg )

Process TCP connection limit config.

Parameters

  tcl | where to store.
  cfg | config options.

Returns
  0 on error.

References addr_tree_init(), addr_tree_init_parents(), read_tcl_list(), tcl_list::region, regional_free_all(), and tcl_list::tree.

Referenced by daemon_fork(), and fr_construct_from_config().

## ◆ tcl_new_connection()

int tcl_new_connection | ( | struct tcl_addr * | tcl | ) |

Increment TCP connection count if found, provided the count was below the limit.

Parameters

  tcl | structure for tcl storage, or NULL.

Returns
  : 0 if limit reached, 1 if tcl was NULL or limit not reached.

References tcl_addr::count, tcl_addr::limit, and tcl_addr::lock.

Referenced by comm_point_perform_accept().

## ◆ tcl_close_connection()

void tcl_close_connection | ( | struct tcl_addr * | tcl | ) |

Decrement TCP connection count if found.

Parameters

  tcl | structure for tcl storage, or NULL.

References tcl_addr::count, tcl_addr::lock, and log_assert.

Referenced by comm_point_close().

## ◆ tcl_addr_lookup()

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.

Parameters

  tcl | structure for address storage.
  addr | address to check
  addrlen | length of addr.

Returns
  : tcl structure from this address.

References addr_tree_lookup(), and tcl_list::tree.

Referenced by comm_point_perform_accept().

## ◆ tcl_list_get_mem()

size_t tcl_list_get_mem | ( | struct tcl_list * | tcl | ) |

Get memory used by TCP connection limit structure.

Parameters

  tcl | structure for address storage.

Returns
  bytes in use.

References tcl_list::region, and regional_get_mem().

Referenced by fr_printmem().

## ◆ tcl_list_swap_tree()

void tcl_list_swap_tree | ( | struct tcl_list * | tcl,
|  | struct tcl_list * | data )

Swap internal tree with preallocated entries.

Caller should manage tcl_addr item locks.

Parameters

  tcl | the tcp connection list structure.
  data | the data structure used to take elements from. This contains the old elements on return.

References regional::data, tcl_list::region, and tcl_list::tree.

Referenced by fr_reload_config().