-bool setup_myself_reloadable(void) {
- char *proxy = NULL;
- char *mode = NULL;
- char *afname = NULL;
- char *space;
- bool choice;
-
- get_config_string(lookup_config(config_tree, "Proxy"), &proxy);
- if(proxy) {
- if((space = strchr(proxy, ' ')))
- *space++ = 0;
-
- if(!strcasecmp(proxy, "none")) {
- proxytype = PROXY_NONE;
- } else if(!strcasecmp(proxy, "socks4")) {
- proxytype = PROXY_SOCKS4;
- } else if(!strcasecmp(proxy, "socks4a")) {
- proxytype = PROXY_SOCKS4A;
- } else if(!strcasecmp(proxy, "socks5")) {
- proxytype = PROXY_SOCKS5;
- } else if(!strcasecmp(proxy, "http")) {
- proxytype = PROXY_HTTP;
- } else if(!strcasecmp(proxy, "exec")) {
- proxytype = PROXY_EXEC;
- } else {
- logger(DEBUG_ALWAYS, LOG_ERR, "Unknown proxy type %s!", proxy);
- return false;
- }
-
- switch(proxytype) {
- case PROXY_NONE:
- default:
- break;
-
- case PROXY_EXEC:
- if(!space || !*space) {
- logger(DEBUG_ALWAYS, LOG_ERR, "Argument expected for proxy type exec!");
- return false;
- }
- proxyhost = xstrdup(space);
- break;
-
- case PROXY_SOCKS4:
- case PROXY_SOCKS4A:
- case PROXY_SOCKS5:
- case PROXY_HTTP:
- proxyhost = space;
- if(space && (space = strchr(space, ' ')))
- *space++ = 0, proxyport = space;
- if(space && (space = strchr(space, ' ')))
- *space++ = 0, proxyuser = space;
- if(space && (space = strchr(space, ' ')))
- *space++ = 0, proxypass = space;
- if(!proxyhost || !*proxyhost || !proxyport || !*proxyport) {
- logger(DEBUG_ALWAYS, LOG_ERR, "Host and port argument expected for proxy!");
- return false;
- }
- proxyhost = xstrdup(proxyhost);
- proxyport = xstrdup(proxyport);
- if(proxyuser && *proxyuser)
- proxyuser = xstrdup(proxyuser);
- if(proxypass && *proxypass)
- proxypass = xstrdup(proxypass);
- break;
- }
-
- free(proxy);
- }
-
- if(get_config_bool(lookup_config(config_tree, "IndirectData"), &choice) && choice)
- myself->options |= OPTION_INDIRECT;
-
- if(get_config_bool(lookup_config(config_tree, "TCPOnly"), &choice) && choice)
- myself->options |= OPTION_TCPONLY;
-
- if(myself->options & OPTION_TCPONLY)
- myself->options |= OPTION_INDIRECT;
-
- get_config_bool(lookup_config(config_tree, "DirectOnly"), &directonly);
- get_config_bool(lookup_config(config_tree, "LocalDiscovery"), &localdiscovery);
-
- if(get_config_string(lookup_config(config_tree, "Mode"), &mode)) {
- if(!strcasecmp(mode, "router"))
- routing_mode = RMODE_ROUTER;
- else if(!strcasecmp(mode, "switch"))
- routing_mode = RMODE_SWITCH;
- else if(!strcasecmp(mode, "hub"))
- routing_mode = RMODE_HUB;
- else {
- logger(DEBUG_ALWAYS, LOG_ERR, "Invalid routing mode!");
- return false;
- }
- free(mode);
- }
-
- if(get_config_string(lookup_config(config_tree, "Forwarding"), &mode)) {
- if(!strcasecmp(mode, "off"))
- forwarding_mode = FMODE_OFF;
- else if(!strcasecmp(mode, "internal"))
- forwarding_mode = FMODE_INTERNAL;
- else if(!strcasecmp(mode, "kernel"))
- forwarding_mode = FMODE_KERNEL;
- else {
- logger(DEBUG_ALWAYS, LOG_ERR, "Invalid forwarding mode!");
- return false;
- }
- free(mode);
- }
-
- choice = true;
- 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);
- if(choice)
- myself->options |= OPTION_CLAMP_MSS;
-
- get_config_bool(lookup_config(config_tree, "PriorityInheritance"), &priorityinheritance);
- get_config_bool(lookup_config(config_tree, "DecrementTTL"), &decrement_ttl);
- if(get_config_string(lookup_config(config_tree, "Broadcast"), &mode)) {
- if(!strcasecmp(mode, "no"))
- broadcast_mode = BMODE_NONE;
- else if(!strcasecmp(mode, "yes") || !strcasecmp(mode, "mst"))
- broadcast_mode = BMODE_MST;
- else if(!strcasecmp(mode, "direct"))
- broadcast_mode = BMODE_DIRECT;
- else {
- logger(DEBUG_ALWAYS, LOG_ERR, "Invalid broadcast mode!");
- return false;
- }
- free(mode);
- }
-
-#if !defined(SOL_IP) || !defined(IP_TOS)
- if(priorityinheritance)
- logger(DEBUG_ALWAYS, LOG_WARNING, "%s not supported on this platform", "PriorityInheritance");
-#endif
-
- if(!get_config_int(lookup_config(config_tree, "MACExpire"), &macexpire))
- macexpire = 600;
-
- if(get_config_int(lookup_config(config_tree, "MaxTimeout"), &maxtimeout)) {
- if(maxtimeout <= 0) {
- logger(DEBUG_ALWAYS, LOG_ERR, "Bogus maximum timeout!");
- return false;
- }
- } else
- maxtimeout = 900;
-
- if(get_config_string(lookup_config(config_tree, "AddressFamily"), &afname)) {
- if(!strcasecmp(afname, "IPv4"))
- addressfamily = AF_INET;
- else if(!strcasecmp(afname, "IPv6"))
- addressfamily = AF_INET6;
- else if(!strcasecmp(afname, "any"))
- addressfamily = AF_UNSPEC;
- else {
- logger(DEBUG_ALWAYS, LOG_ERR, "Invalid address family!");
- return false;
- }
- free(afname);
- }
-
- get_config_bool(lookup_config(config_tree, "Hostnames"), &hostnames);