outside_network Struct Reference

Send queries to outside servers and wait for answers from servers. More...

#include <outside_network.h>

Data Fields

struct comm_basebase
 Base for select calls.
 
time_t * now_secs
 pointer to time in seconds
 
struct timeval * now_tv
 pointer to time in microseconds
 
struct sldns_bufferudp_buff
 buffer shared by UDP connections, since there is only one datagram at any time.
 
size_t svcd_overhead
 serviced_callbacks malloc overhead when processing multiple identical serviced queries to the same server.
 
int use_caps_for_id
 use x20 bits to encode additional ID random bits
 
int want_to_quit
 outside network wants to quit. More...
 
size_t unwanted_replies
 number of unwanted replies received (for statistics)
 
size_t unwanted_total
 cumulative total of unwanted replies (for defense)
 
size_t unwanted_threshold
 threshold when to take defensive action. More...
 
void(* unwanted_action )(void *)
 what action to take, called when defensive action is needed
 
void * unwanted_param
 user param for action
 
struct port_communused_fds
 linked list of available commpoints, unused file descriptors, for use as outgoing UDP ports. More...
 
int do_udp
 if udp is done
 
int delayclose
 if udp is delay-closed (delayed answers do not meet closed port)
 
struct timeval delay_tv
 timeout for delayclose
 
int udp_connect
 if we perform udp-connect, connect() for UDP socket to mitigate ICMP side channel leakage
 
size_t num_udp_outgoing
 number of udp packets sent.
 
struct port_ifip4_ifs
 array of outgoing IP4 interfaces
 
int num_ip4
 number of outgoing IP4 interfaces
 
struct port_ifip6_ifs
 array of outgoing IP6 interfaces
 
int num_ip6
 number of outgoing IP6 interfaces
 
struct pendingudp_wait_first
 pending udp queries waiting to be sent out, waiting for fd
 
struct pendingudp_wait_last
 last pending udp query in list
 
rbtree_typepending
 pending udp answers. More...
 
rbtree_typeserviced
 serviced queries, sorted by qbuf, addr, dnssec
 
struct infra_cacheinfra
 host cache, pointer but not owned by outnet.
 
struct ub_randstate * rnd
 where to get random numbers
 
void * sslctx
 ssl context to create ssl wrapped TCP with DNS connections
 
int tls_use_sni
 if SNI will be used for TLS connections
 
int tcp_mss
 maximum segment size of tcp socket
 
int ip_dscp
 IP_TOS socket option requested on the sockets.
 
struct pending_tcp ** tcp_conns
 Array of tcp pending used for outgoing TCP connections. More...
 
size_t num_tcp
 number of tcp communication points.
 
size_t num_tcp_outgoing
 number of tcp communication points in use.
 
size_t max_reuse_tcp_queries
 max number of queries on a reuse connection
 
int tcp_reuse_timeout
 timeout for REUSE entries in milliseconds.
 
int tcp_auth_query_timeout
 timeout in milliseconds for TCP queries to auth servers.
 
rbtree_type tcp_reuse
 tree of still-open and waiting tcp connections for reuse. More...
 
size_t tcp_reuse_max
 max number of tcp_reuse entries we want to keep open
 
struct reuse_tcptcp_reuse_first
 first and last(oldest) in lru list of reuse connections. More...
 
struct reuse_tcptcp_reuse_last
 
struct pending_tcptcp_free
 list of tcp comm points that are free for use
 
struct waiting_tcptcp_wait_first
 list of tcp queries waiting for a buffer
 
struct waiting_tcptcp_wait_last
 last of waiting query list
 

Detailed Description

Send queries to outside servers and wait for answers from servers.

Contains answer-listen sockets.

Field Documentation

◆ want_to_quit

◆ unwanted_threshold

size_t outside_network::unwanted_threshold

threshold when to take defensive action.

If 0 then never.

Referenced by outside_network_create().

◆ unused_fds

struct port_comm* outside_network::unused_fds

linked list of available commpoints, unused file descriptors, for use as outgoing UDP ports.

cp.fd=-1 in them.

Referenced by outnet_get_mem(), outnet_send_wait_udp(), outside_network_delete(), pending_udp_query(), portcomm_loweruse(), and select_ifport().

◆ pending

rbtree_type* outside_network::pending

pending udp answers.

sorted by id, addr

Referenced by iterator_set_ip46_support(), outside_network_create(), outside_network_delete(), and pending_delete().

◆ tcp_conns

struct pending_tcp** outside_network::tcp_conns

Array of tcp pending used for outgoing TCP connections.

Each can be used to establish a TCP connection with a server. The file descriptors are -1 if they are free, and need to be opened for the tcp connection. Can be used for ip4 and ip6.

Referenced by check_removal(), check_snip(), create_pending_tcp(), and outside_network_delete().

◆ tcp_reuse

rbtree_type outside_network::tcp_reuse

tree of still-open and waiting tcp connections for reuse.

can be closed and reopened to get a new tcp connection. or reused to the same destination again. with timeout to close. Entries are of type struct reuse_tcp. The entries are both active and empty connections.

Referenced by check_snip(), check_tree_and_list(), empty_tree(), outside_network_create(), outside_network_delete(), reuse_tcp_find(), reuse_tcp_insert(), reuse_tcp_remove_serviced_keep(), reuse_tcp_remove_tree_list(), and tcp_reuse_tree_list_test().

◆ tcp_reuse_first

struct reuse_tcp* outside_network::tcp_reuse_first

first and last(oldest) in lru list of reuse connections.

the oldest can be closed to get a new free pending_tcp if needed The list contains empty connections, that wait for timeout or a new query that can use the existing connection.

Referenced by check_removal(), check_snip(), check_tree_and_list(), empty_tree(), outnet_waiting_tcp_list_add_first(), outside_network_delete(), reuse_tcp_insert(), reuse_tcp_lru_snip(), reuse_tcp_lru_touch(), reuse_tcp_remove_tree_list(), and use_free_buffer().


The documentation for this struct was generated from the following file: