X-Git-Url: https://git.librecmc.org/?p=oweals%2Ftinc.git;a=blobdiff_plain;f=src%2Fnet_setup.c;h=4b90737f3c68d4e8d43baf473e110f27ab2c4bf8;hp=2301c83a25a2badc884b153ea5c3792f8a1e4a98;hb=c373de2e9812700c0568640727ad917b6fc7d758;hpb=0233b1d710222cb09be0cbd08c1297e3ece38a9f diff --git a/src/net_setup.c b/src/net_setup.c index 2301c83..4b90737 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -221,7 +221,6 @@ void load_all_subnets(void) { config_t *cfg; subnet_t *s, *s2; node_t *n; - bool result; xasprintf(&dname, "%s/hosts", confbase); dir = opendir(dname); @@ -243,10 +242,9 @@ void load_all_subnets(void) { xasprintf(&fname, "%s/hosts/%s", confbase, ent->d_name); init_configuration(&config_tree); - result = read_config_file(config_tree, fname); + read_config_options(config_tree, ent->d_name); + read_config_file(config_tree, fname); free(fname); - if(!result) - continue; if(!n) { n = new_node(); @@ -356,6 +354,7 @@ static bool setup_myself(void) { get_config_bool(lookup_config(config_tree, "DirectOnly"), &directonly); get_config_bool(lookup_config(config_tree, "StrictSubnets"), &strictsubnets); get_config_bool(lookup_config(config_tree, "TunnelServer"), &tunnelserver); + get_config_bool(lookup_config(config_tree, "LocalDiscovery"), &localdiscovery); strictsubnets |= tunnelserver; if(get_config_string(lookup_config(config_tree, "Mode"), &mode)) { @@ -397,8 +396,8 @@ static bool setup_myself(void) { myself->options |= OPTION_CLAMP_MSS; get_config_bool(lookup_config(config_tree, "PriorityInheritance"), &priorityinheritance); - get_config_bool(lookup_config(config_tree, "DecrementTTL"), &decrement_ttl); + get_config_bool(lookup_config(config_tree, "Broadcast"), &broadcast); #if !defined(SOL_IP) || !defined(IP_TOS) if(priorityinheritance) @@ -549,6 +548,8 @@ static bool setup_myself(void) { devops = dummy_devops; else if(!strcasecmp(type, "raw_socket")) devops = raw_socket_devops; + else if(!strcasecmp(type, "multicast")) + devops = multicast_devops; #ifdef ENABLE_UML else if(!strcasecmp(type, "uml")) devops = uml_devops; @@ -580,6 +581,7 @@ static bool setup_myself(void) { /* Open sockets */ + listen_sockets = 0; cfg = lookup_config(config_tree, "BindToAddress"); do { @@ -587,12 +589,25 @@ static bool setup_myself(void) { if(cfg) cfg = lookup_config_next(config_tree, cfg); + char *port = myport; + + if(address) { + char *space = strchr(address, ' '); + if(space) { + *space++ = 0; + port = space; + } + + if(!strcmp(address, "*")) + *address = 0; + } + hint.ai_family = addressfamily; hint.ai_socktype = SOCK_STREAM; hint.ai_protocol = IPPROTO_TCP; hint.ai_flags = AI_PASSIVE; - err = getaddrinfo(address, myport, &hint, &ai); + err = getaddrinfo(address && *address ? address : NULL, port, &hint, &ai); free(address); if(err || !ai) { @@ -601,9 +616,12 @@ static bool setup_myself(void) { return false; } - listen_sockets = 0; - for(aip = ai; aip; aip = aip->ai_next) { + if(listen_sockets >= MAXSOCKETS) { + logger(LOG_ERR, "Too many listening sockets"); + return false; + } + listen_socket[listen_sockets].tcp = setup_listen_socket((sockaddr_t *) aip->ai_addr);