ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/conf.C
(Generate patch)

Comparing gvpe/src/conf.C (file contents):
Revision 1.42 by pcg, Mon Dec 5 12:58:08 2005 UTC vs.
Revision 1.51 by pcg, Sat Jul 18 05:59:16 2009 UTC

1/* 1/*
2 conf.c -- configuration code 2 conf.c -- configuration code
3 Copyright (C) 2003-2005 Marc Lehmann <gvpe@schmorp.de> 3 Copyright (C) 2003-2008 Marc Lehmann <gvpe@schmorp.de>
4 4
5 This file is part of GVPE. 5 This file is part of GVPE.
6 6
7 GVPE is free software; you can redistribute it and/or modify 7 GVPE is free software; you can redistribute it and/or modify it
8 it under the terms of the GNU General Public License as published by 8 under the terms of the GNU General Public License as published by the
9 the Free Software Foundation; either version 2 of the License, or 9 Free Software Foundation; either version 3 of the License, or (at your
10 (at your option) any later version. 10 option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful, but
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15 GNU General Public License for more details. 15 Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License along
18 along with gvpe; if not, write to the Free Software 18 with this program; if not, see <http://www.gnu.org/licenses/>.
19 Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19
20 Additional permission under GNU GPL version 3 section 7
21
22 If you modify this Program, or any covered work, by linking or
23 combining it with the OpenSSL project's OpenSSL library (or a modified
24 version of that library), containing parts covered by the terms of the
25 OpenSSL or SSLeay licenses, the licensors of this Program grant you
26 additional permission to convey the resulting work. Corresponding
27 Source for a non-source form of such a combination shall include the
28 source code for the parts of OpenSSL used as well as that of the
29 covered work.
20*/ 30*/
21 31
22#include "config.h" 32#include "config.h"
23 33
24#include <cstdio> 34#include <cstdio>
82 92
83 return false; 93 return false;
84} 94}
85 95
86bool 96bool
87conf_node::can_direct (struct conf_node *other) 97conf_node::may_direct (struct conf_node *other)
88{ 98{
89 if (match_list (allow_direct, other->nodename)) 99 if (match_list (allow_direct, other->nodename))
90 return true; 100 return true;
91 101
92 if (match_list (deny_direct, other->nodename)) 102 if (match_list (deny_direct, other->nodename))
100{ 110{
101 printf ("%4d fe:fd:80:00:0%1x:%02x %c %-8.8s %-10.10s %s%s%d\n", 111 printf ("%4d fe:fd:80:00:0%1x:%02x %c %-8.8s %-10.10s %s%s%d\n",
102 id, 112 id,
103 id >> 8, id & 0xff, 113 id >> 8, id & 0xff,
104 compress ? 'Y' : 'N', 114 compress ? 'Y' : 'N',
105 connectmode == C_ONDEMAND ? "ondemand" : 115 connectmode == C_ONDEMAND ? "ondemand"
106 connectmode == C_NEVER ? "never" : 116 : connectmode == C_NEVER ? "never"
107 connectmode == C_ALWAYS ? "always" : "", 117 : connectmode == C_ALWAYS ? "always"
118 : connectmode == C_DISABLED ? "disabled"
119 : "",
108 nodename, 120 nodename,
109 hostname ? hostname : "", 121 hostname ? hostname : "",
110 hostname ? ":" : "", 122 hostname ? ":" : "",
111 hostname ? udp_port : 0 123 hostname ? udp_port : 0
112 ); 124 );
133void configuration::init () 145void configuration::init ()
134{ 146{
135 memset (this, 0, sizeof (*this)); 147 memset (this, 0, sizeof (*this));
136 148
137 mtu = DEFAULT_MTU; 149 mtu = DEFAULT_MTU;
150 nfmark = 0;
138 rekey = DEFAULT_REKEY; 151 rekey = DEFAULT_REKEY;
139 keepalive = DEFAULT_KEEPALIVE; 152 keepalive = DEFAULT_KEEPALIVE;
140 llevel = L_INFO; 153 llevel = L_INFO;
141 ip_proto = IPPROTO_GRE; 154 ip_proto = IPPROTO_GRE;
142#if ENABLE_ICMP 155#if ENABLE_ICMP
147 default_node.tcp_port = DEFAULT_UDPPORT; // ehrm 160 default_node.tcp_port = DEFAULT_UDPPORT; // ehrm
148 default_node.connectmode = conf_node::C_ALWAYS; 161 default_node.connectmode = conf_node::C_ALWAYS;
149 default_node.compress = true; 162 default_node.compress = true;
150 default_node.protocols = 0; 163 default_node.protocols = 0;
151 default_node.max_retry = DEFAULT_MAX_RETRY; 164 default_node.max_retry = DEFAULT_MAX_RETRY;
165 default_node.max_ttl = DEFAULT_MAX_TTL;
166 default_node.max_queue = DEFAULT_MAX_QUEUE;
152 default_node.if_up_data = strdup (""); 167 default_node.if_up_data = strdup ("");
153 168
154#if ENABLE_DNS 169#if ENABLE_DNS
155 default_node.dns_port = 0; // default is 0 == client 170 default_node.dns_port = 0; // default is 0 == client
156 171
170 if (rsa_key) 185 if (rsa_key)
171 RSA_free (rsa_key); 186 RSA_free (rsa_key);
172 187
173 rsa_key = 0; 188 rsa_key = 0;
174 189
175 free (pidfilename); pidfilename = 0; 190 free (pidfilename); pidfilename = 0;
176 free (ifname); ifname = 0; 191 free (ifname); ifname = 0;
177#if ENABLE_HTTP_PROXY 192#if ENABLE_HTTP_PROXY
178 free (proxy_host); proxy_host = 0; 193 free (proxy_host); proxy_host = 0;
179 free (proxy_auth); proxy_auth = 0; 194 free (proxy_auth); proxy_auth = 0;
180#endif 195#endif
181#if ENABLE_DNS 196#if ENABLE_DNS
182 free (dns_forw_host); dns_forw_host = 0; 197 free (dns_forw_host); dns_forw_host = 0;
183#endif 198#endif
199 free (script_if_up); script_if_up = 0;
200 free (script_node_up); script_node_up = 0;
201 free (script_node_change); script_node_change = 0;
202 free (script_node_down); script_node_down = 0;
184} 203}
185 204
186void 205void
187configuration::clear () 206configuration::clear ()
188{ 207{
316 conf.rekey = atoi (val); 335 conf.rekey = atoi (val);
317 else if (!strcmp (var, "keepalive")) 336 else if (!strcmp (var, "keepalive"))
318 conf.keepalive = atoi (val); 337 conf.keepalive = atoi (val);
319 else if (!strcmp (var, "mtu")) 338 else if (!strcmp (var, "mtu"))
320 conf.mtu = atoi (val); 339 conf.mtu = atoi (val);
340 else if (!strcmp (var, "nfmark"))
341 conf.nfmark = atoi (val);
321 else if (!strcmp (var, "if-up")) 342 else if (!strcmp (var, "if-up"))
322 free (conf.script_if_up), conf.script_if_up = strdup (val); 343 free (conf.script_if_up), conf.script_if_up = strdup (val);
323 else if (!strcmp (var, "node-up")) 344 else if (!strcmp (var, "node-up"))
324 free (conf.script_node_up), conf.script_node_up = strdup (val); 345 free (conf.script_node_up), conf.script_node_up = strdup (val);
346 else if (!strcmp (var, "node-change"))
347 free (conf.script_node_change), conf.script_node_change = strdup (val);
325 else if (!strcmp (var, "node-down")) 348 else if (!strcmp (var, "node-down"))
326 free (conf.script_node_down), conf.script_node_down = strdup (val); 349 free (conf.script_node_down), conf.script_node_down = strdup (val);
327 else if (!strcmp (var, "pid-file")) 350 else if (!strcmp (var, "pid-file"))
328 free (conf.pidfilename), conf.pidfilename = strdup (val); 351 free (conf.pidfilename), conf.pidfilename = strdup (val);
329 else if (!strcmp (var, "dns-forw-host")) 352 else if (!strcmp (var, "dns-forw-host"))
460 } 483 }
461 else if (!strcmp (var, "allow-direct")) 484 else if (!strcmp (var, "allow-direct"))
462 node->allow_direct.push_back (strdup (val)); 485 node->allow_direct.push_back (strdup (val));
463 else if (!strcmp (var, "deny-direct")) 486 else if (!strcmp (var, "deny-direct"))
464 node->deny_direct.push_back (strdup (val)); 487 node->deny_direct.push_back (strdup (val));
488 else if (!strcmp (var, "max-ttl"))
489 node->max_ttl = atof (val);
490 else if (!strcmp (var, "max-queue"))
491 node->max_queue = atoi (val);
465 492
466 // unknown or misplaced 493 // unknown or misplaced
467 else 494 else
468 return _("unknown configuration directive. (ignored)"); 495 return _("unknown configuration directive. (ignored)");
469 496
470 return 0; 497 return 0;
498}
499
500void conf_node::finalise ()
501{
502 if (max_queue < 1)
503 {
504 slog (L_WARN, _("%s: max-queue value invalid, setting it to 1."), nodename);
505 max_queue = 1;
506 }
507
508 if (routerprio > 1 && (connectmode != C_ALWAYS && connectmode != C_DISABLED))
509 {
510 //slog (L_WARN, _("%s: has non-zero router-priority but either 'never' or 'ondemand' as connectmode, setting it to 'always'."), nodename);
511 connectmode = C_ALWAYS;
512 }
471} 513}
472 514
473void configuration_parser::parse_argv () 515void configuration_parser::parse_argv ()
474{ 516{
475 for (int i = 0; i < argc; ++i) 517 for (int i = 0; i < argc; ++i)
580 slog (L_NOTICE, _("private hostkey and public node key mismatch: is '%s' the correct node?"), ::thisnode); 622 slog (L_NOTICE, _("private hostkey and public node key mismatch: is '%s' the correct node?"), ::thisnode);
581 exit (EXIT_FAILURE); 623 exit (EXIT_FAILURE);
582 } 624 }
583 625
584 free (fname); 626 free (fname);
627
628 for (configuration::node_vector::iterator i = conf.nodes.begin(); i != conf.nodes.end(); ++i)
629 (*i)->finalise ();
585} 630}
586 631
587char *configuration::config_filename (const char *name, const char *dflt) 632char *configuration::config_filename (const char *name, const char *dflt)
588{ 633{
589 char *fname; 634 char *fname;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines