unbound
0.1
|
This file has functions to get queries from clients. More...
#include "util/netevent.h"
Data Structures | |
struct | listen_dnsport |
Listening for queries structure. More... | |
struct | listen_list |
Single linked list to store event points. More... | |
struct | listen_port |
Single linked list to store shared ports that have been opened for use by all threads. More... | |
Enumerations | |
enum | listen_type { listen_type_udp, listen_type_tcp, listen_type_udpancil, listen_type_ssl, listen_type_udp_dnscrypt, listen_type_tcp_dnscrypt, listen_type_udpancil_dnscrypt } |
type of ports More... | |
Functions | |
struct listen_port * | listening_ports_open (struct config_file *cfg, int *reuseport) |
Create shared listening ports Getaddrinfo, create socket, bind and listen to zero or more interfaces for IP4 and/or IP6, for UDP and/or TCP. More... | |
void | listening_ports_free (struct listen_port *list) |
Close and delete the (list of) listening ports. | |
struct listen_dnsport * | listen_create (struct comm_base *base, struct listen_port *ports, size_t bufsize, int tcp_accept_count, void *sslctx, struct dt_env *dtenv, comm_point_callback_type *cb, void *cb_arg) |
Create commpoints with for this thread for the shared ports. More... | |
void | listen_delete (struct listen_dnsport *listen) |
delete the listening structure More... | |
void | listen_list_delete (struct listen_list *list) |
delete listen_list of commpoints. More... | |
size_t | listen_get_mem (struct listen_dnsport *listen) |
get memory size used by the listening structs More... | |
void | listen_stop_accept (struct listen_dnsport *listen) |
stop accept handlers for TCP (until enabled again) More... | |
void | listen_start_accept (struct listen_dnsport *listen) |
start accept handlers for TCP (was stopped before) More... | |
int | create_udp_sock (int family, int socktype, struct sockaddr *addr, socklen_t addrlen, int v6only, int *inuse, int *noproto, int rcv, int snd, int listen, int *reuseport, int transparent, int freebind, int use_systemd) |
Create and bind nonblocking UDP socket. More... | |
int | create_tcp_accept_sock (struct addrinfo *addr, int v6only, int *noproto, int *reuseport, int transparent, int mss, int freebind, int use_systemd) |
Create and bind TCP listening socket. More... | |
int | create_local_accept_sock (const char *path, int *noproto, int use_systemd) |
Create and bind local listening socket. More... | |
This file has functions to get queries from clients.
enum listen_type |
type of ports
struct listen_port* listening_ports_open | ( | struct config_file * | cfg, |
int * | reuseport | ||
) |
Create shared listening ports Getaddrinfo, create socket, bind and listen to zero or more interfaces for IP4 and/or IP6, for UDP and/or TCP.
On the given port number. It creates the sockets.
cfg | settings on what ports to open. |
reuseport | set to true if you want reuseport, or NULL to not have it, set to false on exit if reuseport failed to apply (because of no kernel support). |
References config_file::dnscrypt_port, config_file::do_ip4, config_file::do_ip6, config_file::do_tcp, config_file::do_udp, config_file::if_automatic, config_file::ifs, config_file::incoming_num_tcp, config_file::ip_freebind, config_file::ip_transparent, listening_ports_free(), config_file::num_ifs, config_file::port, ports_create_if(), config_file::so_rcvbuf, config_file::so_sndbuf, config_file::ssl_port, str_is_ip6(), config_file::tcp_mss, and config_file::use_systemd.
Referenced by daemon_open_shared_ports().
struct listen_dnsport* listen_create | ( | struct comm_base * | base, |
struct listen_port * | ports, | ||
size_t | bufsize, | ||
int | tcp_accept_count, | ||
void * | sslctx, | ||
struct dt_env * | dtenv, | ||
comm_point_callback_type * | cb, | ||
void * | cb_arg | ||
) |
Create commpoints with for this thread for the shared ports.
base | the comm_base that provides event functionality. for default all ifs. |
ports | the list of shared ports. |
bufsize | size of datagram buffer. |
tcp_accept_count | max number of simultaneous TCP connections from clients. |
sslctx | nonNULL if ssl context. |
dtenv | nonNULL if dnstap enabled. |
cb | callback function when a request arrives. It is passed the packet and user argument. Return true to send a reply. |
cb_arg | user data argument for callback function. |
References comm_point::cb_arg, comm_point_create_tcp(), comm_point_create_udp(), comm_point_create_udp_ancil(), comm_point_delete(), listen_dnsport::cps, comm_point::do_not_close, comm_point::dtenv, listen_port::fd, listen_port::ftype, listen_cp_insert(), listen_delete(), listen_type_ssl, listen_type_tcp, listen_type_tcp_dnscrypt, listen_type_udp, listen_type_udp_dnscrypt, listen_type_udpancil, listen_type_udpancil_dnscrypt, log_err(), listen_port::next, sldns_buffer_new(), comm_point::ssl, and listen_dnsport::udp_buff.
void listen_delete | ( | struct listen_dnsport * | listen | ) |
delete the listening structure
listen | listening structure. |
References listen_dnsport::cps, listen_list_delete(), sldns_buffer_free(), and listen_dnsport::udp_buff.
Referenced by listen_create(), and worker_delete().
void listen_list_delete | ( | struct listen_list * | list | ) |
delete listen_list of commpoints.
Calls commpointdelete() on items. This may close the fds or not depending on flags.
list | to delete. |
References listen_list::com, comm_point_delete(), and listen_list::next.
Referenced by daemon_remote_clear(), and listen_delete().
size_t listen_get_mem | ( | struct listen_dnsport * | listen | ) |
get memory size used by the listening structs
listen | listening structure. |
References listen_dnsport::base, listen_dnsport::cps, listen_list::next, sldns_buffer_capacity(), and listen_dnsport::udp_buff.
void listen_stop_accept | ( | struct listen_dnsport * | listen | ) |
stop accept handlers for TCP (until enabled again)
listen | listening structure. |
References listen_list::com, listen_dnsport::cps, listen_list::next, comm_point::tcp_free, and comm_point::type.
Referenced by worker_stop_accept().
void listen_start_accept | ( | struct listen_dnsport * | listen | ) |
start accept handlers for TCP (was stopped before)
listen | listening structure. |
References listen_list::com, listen_dnsport::cps, listen_list::next, comm_point::tcp_free, and comm_point::type.
Referenced by worker_start_accept().
int create_udp_sock | ( | int | family, |
int | socktype, | ||
struct sockaddr * | addr, | ||
socklen_t | addrlen, | ||
int | v6only, | ||
int * | inuse, | ||
int * | noproto, | ||
int | rcv, | ||
int | snd, | ||
int | listen, | ||
int * | reuseport, | ||
int | transparent, | ||
int | freebind, | ||
int | use_systemd | ||
) |
Create and bind nonblocking UDP socket.
family | for socket call. |
socktype | for socket call. |
addr | for bind call. |
addrlen | for bind call. |
v6only | if enabled, IP6 sockets get IP6ONLY option set. if enabled with value 2 IP6ONLY option is disabled. |
inuse | on error, this is set true if the port was in use. |
noproto | on error, this is set true if cause is that the IPv6 proto (family) is not available. |
rcv | set size on rcvbuf with socket option, if 0 it is not set. |
snd | set size on sndbuf with socket option, if 0 it is not set. |
listen | if true, this is a listening UDP port, eg port 53, and set SO_REUSEADDR on it. |
reuseport | if nonNULL and true, try to set SO_REUSEPORT on listening UDP port. Set to false on return if it failed to do so. |
transparent | set IP_TRANSPARENT socket option. |
freebind | set IP_FREEBIND socket option. |
use_systemd | if true, fetch sockets from systemd. |
References fd_set_nonblock(), log_err(), log_err_addr(), log_warn(), and verbosity.
Referenced by make_sock().
int create_tcp_accept_sock | ( | struct addrinfo * | addr, |
int | v6only, | ||
int * | noproto, | ||
int * | reuseport, | ||
int | transparent, | ||
int | mss, | ||
int | freebind, | ||
int | use_systemd | ||
) |
Create and bind TCP listening socket.
addr | address info ready to make socket. |
v6only | enable ip6 only flag on ip6 sockets. |
noproto | if error caused by lack of protocol support. |
reuseport | if nonNULL and true, try to set SO_REUSEPORT on listening UDP port. Set to false on return if it failed to do so. |
transparent | set IP_TRANSPARENT socket option. |
mss | maximum segment size of the socket. if zero, leaves the default. |
freebind | set IP_FREEBIND socket option. |
use_systemd | if true, fetch sockets from systemd. |
References fd_set_nonblock(), log_err(), log_err_addr(), log_warn(), TCP_BACKLOG, VERB_ALGO, verbose(), verbose_print_addr(), and verbosity.
Referenced by add_open(), and make_sock().
int create_local_accept_sock | ( | const char * | path, |
int * | noproto, | ||
int | use_systemd | ||
) |
Create and bind local listening socket.
path | path to the socket. |
noproto | on error, this is set true if cause is that local sockets are not supported. |
use_systemd | if true, fetch sockets from systemd. |
References fd_set_nonblock(), log_err(), TCP_BACKLOG, VERB_ALGO, and verbose().
Referenced by add_open().