Data Structures | Enumerations | Functions
listen_dnsport.h File Reference

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 }
 type of ports More...
 

Functions

struct listen_portlistening_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_dnsportlisten_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_t *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)
 Create and bind nonblocking UDP socket. More...
 
int create_tcp_accept_sock (struct addrinfo *addr, int v6only, int *noproto, int *reuseport)
 Create and bind TCP listening socket. More...
 

Detailed Description

This file has functions to get queries from clients.

Enumeration Type Documentation

type of ports

Enumerator
listen_type_udp 

udp type

listen_type_tcp 

tcp type

listen_type_udpancil 

udp ipv6 (v4mapped) for use with ancillary data

listen_type_ssl 

ssl over tcp type

Function Documentation

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.

Parameters
cfgsettings on what ports to open.
reuseportset 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).
Returns
: linked list of ports or NULL on error.

References 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, 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, and str_is_ip6().

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_t cb,
void *  cb_arg 
)

Create commpoints with for this thread for the shared ports.

Parameters
basethe comm_base that provides event functionality. for default all ifs.
portsthe list of shared ports.
bufsizesize of datagram buffer.
tcp_accept_countmax number of simultaneous TCP connections from clients.
sslctxnonNULL if ssl context.
dtenvnonNULL if dnstap enabled.
cbcallback function when a request arrives. It is passed the packet and user argument. Return true to send a reply.
cb_arguser data argument for callback function.
Returns
: the malloced listening structure, ready for use. NULL on error.

References 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_udp, listen_type_udpancil, log_err(), listen_port::next, sldns_buffer_new(), comm_point::ssl, and listen_dnsport::udp_buff.

Referenced by worker_init().

void listen_delete ( struct listen_dnsport listen)

delete the listening structure

Parameters
listenlistening 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.

Parameters
listto 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

Parameters
listenlistening structure.
Returns
: size in bytes.

References listen_dnsport::base, listen_list::com, listen_dnsport::cps, listen_list::next, sldns_buffer_capacity(), and listen_dnsport::udp_buff.

Referenced by worker_mem_report().

void listen_stop_accept ( struct listen_dnsport listen)

stop accept handlers for TCP (until enabled again)

Parameters
listenlistening 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)

Parameters
listenlistening 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 
)

Create and bind nonblocking UDP socket.

Parameters
familyfor socket call.
socktypefor socket call.
addrfor bind call.
addrlenfor bind call.
v6onlyif enabled, IP6 sockets get IP6ONLY option set. if enabled with value 2 IP6ONLY option is disabled.
inuseon error, this is set true if the port was in use.
noprotoon error, this is set true if cause is that the IPv6 proto (family) is not available.
rcvset size on rcvbuf with socket option, if 0 it is not set.
sndset size on sndbuf with socket option, if 0 it is not set.
listenif true, this is a listening UDP port, eg port 53, and set SO_REUSEADDR on it.
reuseportif nonNULL and true, try to set SO_REUSEPORT on listening UDP port. Set to false on return if it failed to do so.
Returns
: the socket. -1 on error.

References fd_set_nonblock(), log_err(), log_err_addr(), log_warn(), and verbosity.

Referenced by make_sock(), and udp_sockport().

int create_tcp_accept_sock ( struct addrinfo *  addr,
int  v6only,
int *  noproto,
int *  reuseport 
)

Create and bind TCP listening socket.

Parameters
addraddress info ready to make socket.
v6onlyenable ip6 only flag on ip6 sockets.
noprotoif error caused by lack of protocol support.
reuseportif nonNULL and true, try to set SO_REUSEPORT on listening UDP port. Set to false on return if it failed to do so.
Returns
: the socket. -1 on error.

References fd_set_nonblock(), log_err(), log_err_addr(), log_warn(), TCP_BACKLOG, verbose_print_addr(), and verbosity.

Referenced by add_open(), and make_sock().