With some exceptions, tinc only accepted host configuration options for the
local node from the corresponding host configuration file. Although this is
documented, many people expect that they can also put those options in
tinc.conf. Tinc now internally merges the contents of both tinc.conf and the
local host configuration file.
sign, but doing so improves readability.
If you leave it out, remember to replace it with at least one space character.
sign, but doing so improves readability.
If you leave it out, remember to replace it with at least one space character.
+.Pp
+The server configuration is complemented with host specific configuration (see the next section).
+Although all configuration options for the local host listed in this document can also be put in
+.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /tinc.conf ,
+it is recommended to put host specific configuration options in the host configuration file,
+as this makes it easy to exchange with other nodes.
+
.Pp
Here are all valid variables, listed in alphabetical order.
The default value is given between parentheses.
.Pp
Here are all valid variables, listed in alphabetical order.
The default value is given between parentheses.
in the `=' sign, but doing so improves readability. If you leave it
out, remember to replace it with at least one space character.
in the `=' sign, but doing so improves readability. If you leave it
out, remember to replace it with at least one space character.
+The server configuration is complemented with host specific configuration (see
+the next section). Although all host configuration options for the local node
+listed in this document can also be put in
+@file{@value{sysconfdir}/tinc/@var{netname}/tinc.conf}, it is recommended to
+put host specific configuration options in the host configuration file, as this
+makes it easy to exchange with other nodes.
+
In this section all valid variables are listed in alphabetical order.
The default value is given between parentheses,
other comments are between square brackets.
In this section all valid variables are listed in alphabetical order.
The default value is given between parentheses,
other comments are between square brackets.
struct stat s;
if(get_config_string(lookup_config(config_tree, "PrivateKey"), &key)) {
struct stat s;
if(get_config_string(lookup_config(config_tree, "PrivateKey"), &key)) {
- if(!get_config_string(lookup_config(myself->connection->config_tree, "PublicKey"), &pubkey)) {
+ if(!get_config_string(lookup_config(config_tree, "PublicKey"), &pubkey)) {
logger(LOG_ERR, "PrivateKey used but no PublicKey found!");
return false;
}
logger(LOG_ERR, "PrivateKey used but no PublicKey found!");
return false;
}
config_t *cfg;
subnet_t *subnet;
char *name, *hostname, *mode, *afname, *cipher, *digest;
config_t *cfg;
subnet_t *subnet;
char *name, *hostname, *mode, *afname, *cipher, *digest;
char *address = NULL;
char *envp[5];
struct addrinfo *ai, *aip, hint = {0};
char *address = NULL;
char *envp[5];
struct addrinfo *ai, *aip, hint = {0};
myself = new_node();
myself->connection = new_connection();
myself = new_node();
myself->connection = new_connection();
- init_configuration(&myself->connection->config_tree);
myself->hostname = xstrdup("MYSELF");
myself->connection->hostname = xstrdup("MYSELF");
myself->hostname = xstrdup("MYSELF");
myself->connection->hostname = xstrdup("MYSELF");
myself->name = name;
myself->connection->name = xstrdup(name);
myself->name = name;
myself->connection->name = xstrdup(name);
-
- if(!read_connection_config(myself->connection)) {
- logger(LOG_ERR, "Cannot open host configuration file for myself!");
- return false;
- }
+ xasprintf(&fname, "%s/hosts/%s", confbase, name);
+ read_config_file(config_tree, fname);
+ free(fname);
if(!read_rsa_private_key())
return false;
if(!read_rsa_private_key())
return false;
- if(!get_config_string(lookup_config(config_tree, "Port"), &myport)
- && !get_config_string(lookup_config(myself->connection->config_tree, "Port"), &myport))
+ if(!get_config_string(lookup_config(config_tree, "Port"), &myport))
myport = xstrdup("655");
if(!atoi(myport)) {
myport = xstrdup("655");
if(!atoi(myport)) {
/* Read in all the subnets specified in the host configuration file */
/* Read in all the subnets specified in the host configuration file */
- cfg = lookup_config(myself->connection->config_tree, "Subnet");
+ cfg = lookup_config(config_tree, "Subnet");
while(cfg) {
if(!get_config_subnet(cfg, &subnet))
while(cfg) {
if(!get_config_subnet(cfg, &subnet))
subnet_add(myself, subnet);
subnet_add(myself, subnet);
- cfg = lookup_config_next(myself->connection->config_tree, cfg);
+ cfg = lookup_config_next(config_tree, cfg);
}
/* Check some options */
}
/* Check some options */
if(get_config_bool(lookup_config(config_tree, "TCPOnly"), &choice) && choice)
myself->options |= OPTION_TCPONLY;
if(get_config_bool(lookup_config(config_tree, "TCPOnly"), &choice) && choice)
myself->options |= OPTION_TCPONLY;
- if(get_config_bool(lookup_config(myself->connection->config_tree, "IndirectData"), &choice) && choice)
- myself->options |= OPTION_INDIRECT;
-
- if(get_config_bool(lookup_config(myself->connection->config_tree, "TCPOnly"), &choice) && choice)
- myself->options |= OPTION_TCPONLY;
-
if(myself->options & OPTION_TCPONLY)
myself->options |= OPTION_INDIRECT;
if(myself->options & OPTION_TCPONLY)
myself->options |= OPTION_INDIRECT;
- get_config_bool(lookup_config(myself->connection->config_tree, "PMTUDiscovery"), &choice);
get_config_bool(lookup_config(config_tree, "PMTUDiscovery"), &choice);
if(choice)
myself->options |= OPTION_PMTU_DISCOVERY;
choice = true;
get_config_bool(lookup_config(config_tree, "ClampMSS"), &choice);
get_config_bool(lookup_config(config_tree, "PMTUDiscovery"), &choice);
if(choice)
myself->options |= OPTION_PMTU_DISCOVERY;
choice = true;
get_config_bool(lookup_config(config_tree, "ClampMSS"), &choice);
- get_config_bool(lookup_config(myself->connection->config_tree, "ClampMSS"), &choice);
if(choice)
myself->options |= OPTION_CLAMP_MSS;
if(choice)
myself->options |= OPTION_CLAMP_MSS;
/* Generate packet encryption key */
if(get_config_string
/* Generate packet encryption key */
if(get_config_string
- (lookup_config(myself->connection->config_tree, "Cipher"), &cipher)) {
+ (lookup_config(config_tree, "Cipher"), &cipher)) {
if(!strcasecmp(cipher, "none")) {
myself->incipher = NULL;
} else {
if(!strcasecmp(cipher, "none")) {
myself->incipher = NULL;
} else {
/* Check if we want to use message authentication codes... */
/* Check if we want to use message authentication codes... */
- if(get_config_string(lookup_config(myself->connection->config_tree, "Digest"), &digest)) {
+ if(get_config_string(lookup_config(config_tree, "Digest"), &digest)) {
if(!strcasecmp(digest, "none")) {
myself->indigest = NULL;
} else {
if(!strcasecmp(digest, "none")) {
myself->indigest = NULL;
} else {
myself->connection->outdigest = EVP_sha1();
myself->connection->outdigest = EVP_sha1();
- if(get_config_int(lookup_config(myself->connection->config_tree, "MACLength"), &myself->inmaclength)) {
+ if(get_config_int(lookup_config(config_tree, "MACLength"), &myself->inmaclength)) {
if(myself->indigest) {
if(myself->inmaclength > myself->indigest->md_size) {
logger(LOG_ERR, "MAC length exceeds size of digest!");
if(myself->indigest) {
if(myself->inmaclength > myself->indigest->md_size) {
logger(LOG_ERR, "MAC length exceeds size of digest!");
- if(get_config_int(lookup_config(myself->connection->config_tree, "Compression"), &myself->incompression)) {
+ if(get_config_int(lookup_config(config_tree, "Compression"), &myself->incompression)) {
if(myself->incompression < 0 || myself->incompression > 11) {
logger(LOG_ERR, "Bogus compression level!");
return false;
if(myself->incompression < 0 || myself->incompression > 11) {
logger(LOG_ERR, "Bogus compression level!");
return false;
if(get_config_int(lookup_config(c->config_tree, "PMTU"), &mtu) && mtu < n->mtu)
n->mtu = mtu;
if(get_config_int(lookup_config(c->config_tree, "PMTU"), &mtu) && mtu < n->mtu)
n->mtu = mtu;
- if(get_config_int(lookup_config(myself->connection->config_tree, "PMTU"), &mtu) && mtu < n->mtu)
+ if(get_config_int(lookup_config(config_tree, "PMTU"), &mtu) && mtu < n->mtu)
n->mtu = mtu;
if(get_config_bool(lookup_config(c->config_tree, "ClampMSS"), &choice)) {
n->mtu = mtu;
if(get_config_bool(lookup_config(c->config_tree, "ClampMSS"), &choice)) {