X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet_setup.c;h=f52afb046fc337b7ca9e17814bd0449b82659311;hp=b3ce766d371ca6b0ab3ccc6180c6ac1f67ebbe7c;hb=a7e793c94ec414eb71ec2aa3debc9e2e5ed5cfef;hpb=de78d79db84c486afcc353884ec1770866beb653 diff --git a/src/net_setup.c b/src/net_setup.c index b3ce766d..f52afb04 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -1,7 +1,7 @@ /* net_setup.c -- Setup. Copyright (C) 1998-2005 Ivo Timmermans, - 2000-2006 Guus Sliepen + 2000-2008 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -286,7 +286,7 @@ bool setup_myself(void) if(get_config_bool(lookup_config(myself->connection->config_tree, "TCPOnly"), &choice) && choice) myself->options |= OPTION_TCPONLY; - if(get_config_bool(lookup_config(myself->connection->config_tree, "PMTUDiscovery"), &choice) && choice) + if(!get_config_bool(lookup_config(myself->connection->config_tree, "PMTUDiscovery"), &choice) || choice) myself->options |= OPTION_PMTU_DISCOVERY; if(myself->options & OPTION_TCPONLY) @@ -437,7 +437,6 @@ bool setup_myself(void) myself->nexthop = myself; myself->via = myself; - myself->status.active = true; myself->status.reachable = true; node_add(myself); @@ -502,7 +501,7 @@ bool setup_myself(void) free(hostname); } - listen_socket[listen_sockets].sa.sa = *aip->ai_addr; + memcpy(&listen_socket[listen_sockets].sa, aip->ai_addr, aip->ai_addrlen); listen_sockets++; } @@ -527,11 +526,11 @@ bool setup_network_connections(void) now = time(NULL); + init_events(); init_connections(); init_subnets(); init_nodes(); init_edges(); - init_events(); init_requests(); if(get_config_int(lookup_config(config_tree, "PingInterval"), &pinginterval)) { @@ -573,14 +572,21 @@ void close_network_connections(void) next = node->next; c = node->data; - if(c->outgoing) - free(c->outgoing->name), free(c->outgoing), c->outgoing = NULL; + if(c->outgoing) { + if(c->outgoing->ai) + freeaddrinfo(c->outgoing->ai); + free(c->outgoing->name); + free(c->outgoing); + c->outgoing = NULL; + } + terminate_connection(c, false); } if(myself && myself->connection) { subnet_update(myself, NULL, false); terminate_connection(myself->connection, false); + free_connection(myself->connection); } for(i = 0; i < listen_sockets; i++) { @@ -595,14 +601,18 @@ void close_network_connections(void) envp[4] = NULL; exit_requests(); - exit_events(); exit_edges(); exit_subnets(); exit_nodes(); exit_connections(); + exit_events(); execute_script("tinc-down", envp); + if(myport) free(myport); + + EVP_CIPHER_CTX_cleanup(&packet_ctx); + for(i = 0; i < 4; i++) free(envp[i]);