X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet_setup.c;h=4407cd4f7353235b0237e8f1a85806cd44e6e52a;hb=bc0a24ec810cb911610ae7aafa245e47d1268cd2;hp=814d698f8ef3834da433ebf0f46bbeb29fb1aa38;hpb=7e1117197ca4fc62af93fda50e28e0ff06cb736c;p=tinc diff --git a/src/net_setup.c b/src/net_setup.c index 814d698f..4407cd4f 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -28,9 +28,10 @@ #include #include -#include "avl_tree.h" +#include "splay_tree.h" #include "conf.h" #include "connection.h" +#include "control.h" #include "device.h" #include "graph.h" #include "logger.h" @@ -46,8 +47,7 @@ char *myport; static struct event device_ev; -bool read_rsa_public_key(connection_t *c) -{ +bool read_rsa_public_key(connection_t *c) { FILE *fp; char *fname; char *key; @@ -147,8 +147,7 @@ bool read_rsa_public_key(connection_t *c) return false; } -bool read_rsa_private_key(void) -{ +bool read_rsa_private_key(void) { FILE *fp; char *fname, *key, *pubkey; struct stat s; @@ -241,8 +240,7 @@ void regenerate_key() { /* Configure node_t myself and set up the local sockets (listen only) */ -bool setup_myself(void) -{ +bool setup_myself(void) { config_t *cfg; subnet_t *subnet; char *name, *hostname, *mode, *afname, *cipher, *digest; @@ -528,10 +526,8 @@ bool setup_myself(void) EV_READ|EV_PERSIST, handle_new_meta_connection, NULL); if(event_add(&listen_socket[listen_sockets].ev_tcp, NULL) < 0) { - logger(LOG_WARNING, _("event_add failed: %s"), strerror(errno)); - close(listen_socket[listen_sockets].tcp); - close(listen_socket[listen_sockets].udp); - continue; + logger(LOG_EMERG, _("event_add failed: %s"), strerror(errno)); + abort(); } event_set(&listen_socket[listen_sockets].ev_udp, @@ -539,11 +535,8 @@ bool setup_myself(void) EV_READ|EV_PERSIST, handle_incoming_vpn_data, NULL); if(event_add(&listen_socket[listen_sockets].ev_udp, NULL) < 0) { - logger(LOG_WARNING, _("event_add failed: %s"), strerror(errno)); - close(listen_socket[listen_sockets].tcp); - close(listen_socket[listen_sockets].udp); - event_del(&listen_socket[listen_sockets].ev_tcp); - continue; + logger(LOG_EMERG, _("event_add failed: %s"), strerror(errno)); + abort(); } ifdebug(CONNECTIONS) { @@ -576,17 +569,15 @@ bool setup_myself(void) /* setup all initial network connections */ -bool setup_network_connections(void) -{ +bool setup_network_connections(void) { cp(); - now = time(NULL); - init_connections(); init_subnets(); init_nodes(); init_edges(); init_requests(); + init_control(); if(get_config_int(lookup_config(config_tree, "PingInterval"), &pinginterval)) { if(pinginterval < 1) { @@ -614,9 +605,8 @@ bool setup_network_connections(void) /* close all open network connections */ -void close_network_connections(void) -{ - avl_node_t *node, *next; +void close_network_connections(void) { + splay_node_t *node, *next; connection_t *c; char *envp[5]; int i; @@ -656,6 +646,7 @@ void close_network_connections(void) asprintf(&envp[3], "NAME=%s", myself->name); envp[4] = NULL; + exit_control(); exit_requests(); exit_edges(); exit_subnets();