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.40 by pcg, Mon Mar 28 20:39:18 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. 59 Temple Place, Suite 330, Boston, MA 02111-1307 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>
69 if (protocol & PROT_DNSv4 ) return "dns"; 79 if (protocol & PROT_DNSv4 ) return "dns";
70 80
71 return "<unknown>"; 81 return "<unknown>";
72} 82}
73 83
84static bool
85match_list (const vector<const char *> &list, const char *str)
86{
87 for (vector<const char *>::const_iterator i = list.end (); i-- > list.begin (); )
88 if ((*i)[0] == '*' && !(*i)[1])
89 return true;
90 else if (!strcmp (*i, str))
91 return true;
92
93 return false;
94}
95
96bool
97conf_node::may_direct (struct conf_node *other)
98{
99 if (match_list (allow_direct, other->nodename))
100 return true;
101
102 if (match_list (deny_direct, other->nodename))
103 return false;
104
105 return true;
106}
107
74void 108void
75conf_node::print () 109conf_node::print ()
76{ 110{
77 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",
78 id, 112 id,
79 id >> 8, id & 0xff, 113 id >> 8, id & 0xff,
80 compress ? 'Y' : 'N', 114 compress ? 'Y' : 'N',
81 connectmode == C_ONDEMAND ? "ondemand" : 115 connectmode == C_ONDEMAND ? "ondemand"
82 connectmode == C_NEVER ? "never" : 116 : connectmode == C_NEVER ? "never"
83 connectmode == C_ALWAYS ? "always" : "", 117 : connectmode == C_ALWAYS ? "always"
118 : connectmode == C_DISABLED ? "disabled"
119 : "",
84 nodename, 120 nodename,
85 hostname ? hostname : "", 121 hostname ? hostname : "",
86 hostname ? ":" : "", 122 hostname ? ":" : "",
87 hostname ? udp_port : 0 123 hostname ? udp_port : 0
88 ); 124 );
109void configuration::init () 145void configuration::init ()
110{ 146{
111 memset (this, 0, sizeof (*this)); 147 memset (this, 0, sizeof (*this));
112 148
113 mtu = DEFAULT_MTU; 149 mtu = DEFAULT_MTU;
150 nfmark = 0;
114 rekey = DEFAULT_REKEY; 151 rekey = DEFAULT_REKEY;
115 keepalive = DEFAULT_KEEPALIVE; 152 keepalive = DEFAULT_KEEPALIVE;
116 llevel = L_INFO; 153 llevel = L_INFO;
117 ip_proto = IPPROTO_GRE; 154 ip_proto = IPPROTO_GRE;
118#if ENABLE_ICMP 155#if ENABLE_ICMP
123 default_node.tcp_port = DEFAULT_UDPPORT; // ehrm 160 default_node.tcp_port = DEFAULT_UDPPORT; // ehrm
124 default_node.connectmode = conf_node::C_ALWAYS; 161 default_node.connectmode = conf_node::C_ALWAYS;
125 default_node.compress = true; 162 default_node.compress = true;
126 default_node.protocols = 0; 163 default_node.protocols = 0;
127 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;
128 default_node.if_up_data = strdup (""); 167 default_node.if_up_data = strdup ("");
129 168
130#if ENABLE_DNS 169#if ENABLE_DNS
131 default_node.dns_port = 0; // default is 0 == client 170 default_node.dns_port = 0; // default is 0 == client
132 171
146 if (rsa_key) 185 if (rsa_key)
147 RSA_free (rsa_key); 186 RSA_free (rsa_key);
148 187
149 rsa_key = 0; 188 rsa_key = 0;
150 189
151 free (pidfilename); pidfilename = 0; 190 free (pidfilename); pidfilename = 0;
152 free (ifname); ifname = 0; 191 free (ifname); ifname = 0;
153#if ENABLE_HTTP_PROXY 192#if ENABLE_HTTP_PROXY
154 free (proxy_host); proxy_host = 0; 193 free (proxy_host); proxy_host = 0;
155 free (proxy_auth); proxy_auth = 0; 194 free (proxy_auth); proxy_auth = 0;
156#endif 195#endif
157#if ENABLE_DNS 196#if ENABLE_DNS
158 free (dns_forw_host); dns_forw_host = 0; 197 free (dns_forw_host); dns_forw_host = 0;
159#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;
160} 203}
161 204
162void 205void
163configuration::clear () 206configuration::clear ()
164{ 207{
292 conf.rekey = atoi (val); 335 conf.rekey = atoi (val);
293 else if (!strcmp (var, "keepalive")) 336 else if (!strcmp (var, "keepalive"))
294 conf.keepalive = atoi (val); 337 conf.keepalive = atoi (val);
295 else if (!strcmp (var, "mtu")) 338 else if (!strcmp (var, "mtu"))
296 conf.mtu = atoi (val); 339 conf.mtu = atoi (val);
340 else if (!strcmp (var, "nfmark"))
341 conf.nfmark = atoi (val);
297 else if (!strcmp (var, "if-up")) 342 else if (!strcmp (var, "if-up"))
298 free (conf.script_if_up), conf.script_if_up = strdup (val); 343 free (conf.script_if_up), conf.script_if_up = strdup (val);
299 else if (!strcmp (var, "node-up")) 344 else if (!strcmp (var, "node-up"))
300 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);
301 else if (!strcmp (var, "node-down")) 348 else if (!strcmp (var, "node-down"))
302 free (conf.script_node_down), conf.script_node_down = strdup (val); 349 free (conf.script_node_down), conf.script_node_down = strdup (val);
303 else if (!strcmp (var, "pid-file")) 350 else if (!strcmp (var, "pid-file"))
304 free (conf.pidfilename), conf.pidfilename = strdup (val); 351 free (conf.pidfilename), conf.pidfilename = strdup (val);
305 else if (!strcmp (var, "dns-forw-host")) 352 else if (!strcmp (var, "dns-forw-host"))
432 } 479 }
433 else if (!strcmp (var, "enable-rawip")) 480 else if (!strcmp (var, "enable-rawip"))
434 { 481 {
435 u8 v; parse_bool (v, "enable-rawip", PROT_IPv4, 0); node->protocols = (node->protocols & ~PROT_IPv4 ) | v; 482 u8 v; parse_bool (v, "enable-rawip", PROT_IPv4, 0); node->protocols = (node->protocols & ~PROT_IPv4 ) | v;
436 } 483 }
484 else if (!strcmp (var, "allow-direct"))
485 node->allow_direct.push_back (strdup (val));
486 else if (!strcmp (var, "deny-direct"))
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);
437 492
438 // unknown or misplaced 493 // unknown or misplaced
439 else 494 else
440 return _("unknown configuration directive. (ignored)"); 495 return _("unknown configuration directive. (ignored)");
441 496
442 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 }
443} 513}
444 514
445void configuration_parser::parse_argv () 515void configuration_parser::parse_argv ()
446{ 516{
447 for (int i = 0; i < argc; ++i) 517 for (int i = 0; i < argc; ++i)
552 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);
553 exit (EXIT_FAILURE); 623 exit (EXIT_FAILURE);
554 } 624 }
555 625
556 free (fname); 626 free (fname);
627
628 for (configuration::node_vector::iterator i = conf.nodes.begin(); i != conf.nodes.end(); ++i)
629 (*i)->finalise ();
557} 630}
558 631
559char *configuration::config_filename (const char *name, const char *dflt) 632char *configuration::config_filename (const char *name, const char *dflt)
560{ 633{
561 char *fname; 634 char *fname;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines