-int reload_configuration(void) {
- char filename[PATH_MAX];
-
- /* Reread our own configuration file */
-
- exit_configuration(&mesh->config);
- init_configuration(&mesh->config);
-
- if(!read_server_config(mesh)) {
- logger(DEBUG_ALWAYS, LOG_ERR, "Unable to reread configuration file.");
- return EINVAL;
- }
-
- snprintf(filename, PATH_MAX,"%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->self->name);
- read_config_file(mesh->config, filename);
-
- /* Parse some options that are allowed to be changed while tinc is running */
-
- setup_myself_reloadable(mesh);
-
- /* Try to make outgoing connections */
-
- try_outgoing_connections(mesh);
-
- /* Close connections to hosts that have a changed or deleted host config file */
-
- for list_each(connection_t, c, mesh->connections) {
- snprintf(filename, PATH_MAX,"%s" SLASH "hosts" SLASH "%s", mesh->confbase, c->name);
- struct stat s;
- if(stat(filename, &s) || s.st_mtime > mesh->last_config_check) {
- logger(DEBUG_CONNECTIONS, LOG_INFO, "Host config file of %s has been changed", c->name);
- terminate_connection(c, c->status.active);
- }
- }
-
- mesh->last_config_check = mesh->loop.now.tv_sec;
-
- return 0;
-}
-