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.43 by pcg, Thu Aug 7 16:34:21 2008 UTC vs.
Revision 1.53 by root, Tue Feb 8 23:13:48 2011 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>
47char *thisnode; 57char *thisnode;
48char *identname; 58char *identname;
49 59
50struct configuration conf; 60struct configuration conf;
51 61
62u8
52u8 best_protocol (u8 protset) 63best_protocol (u8 protset)
53{ 64{
54 if (protset & PROT_IPv4 ) return PROT_IPv4; 65 if (protset & PROT_IPv4 ) return PROT_IPv4;
55 if (protset & PROT_ICMPv4) return PROT_ICMPv4; 66 if (protset & PROT_ICMPv4) return PROT_ICMPv4;
56 if (protset & PROT_UDPv4 ) return PROT_UDPv4; 67 if (protset & PROT_UDPv4 ) return PROT_UDPv4;
57 if (protset & PROT_TCPv4 ) return PROT_TCPv4; 68 if (protset & PROT_TCPv4 ) return PROT_TCPv4;
58 if (protset & PROT_DNSv4 ) return PROT_DNSv4; 69 if (protset & PROT_DNSv4 ) return PROT_DNSv4;
59 70
60 return 0; 71 return 0;
61} 72}
62 73
74const char *
63const char *strprotocol (u8 protocol) 75strprotocol (u8 protocol)
64{ 76{
65 if (protocol & PROT_IPv4 ) return "rawip"; 77 if (protocol & PROT_IPv4 ) return "rawip";
66 if (protocol & PROT_ICMPv4) return "icmp"; 78 if (protocol & PROT_ICMPv4) return "icmp";
67 if (protocol & PROT_UDPv4 ) return "udp"; 79 if (protocol & PROT_UDPv4 ) return "udp";
68 if (protocol & PROT_TCPv4 ) return "tcp"; 80 if (protocol & PROT_TCPv4 ) return "tcp";
82 94
83 return false; 95 return false;
84} 96}
85 97
86bool 98bool
87conf_node::can_direct (struct conf_node *other) 99conf_node::may_direct (struct conf_node *other)
88{ 100{
89 if (match_list (allow_direct, other->nodename)) 101 if (match_list (allow_direct, other->nodename))
90 return true; 102 return true;
91 103
92 if (match_list (deny_direct, other->nodename)) 104 if (match_list (deny_direct, other->nodename))
100{ 112{
101 printf ("%4d fe:fd:80:00:0%1x:%02x %c %-8.8s %-10.10s %s%s%d\n", 113 printf ("%4d fe:fd:80:00:0%1x:%02x %c %-8.8s %-10.10s %s%s%d\n",
102 id, 114 id,
103 id >> 8, id & 0xff, 115 id >> 8, id & 0xff,
104 compress ? 'Y' : 'N', 116 compress ? 'Y' : 'N',
105 connectmode == C_ONDEMAND ? "ondemand" : 117 connectmode == C_ONDEMAND ? "ondemand"
106 connectmode == C_NEVER ? "never" : 118 : connectmode == C_NEVER ? "never"
107 connectmode == C_ALWAYS ? "always" : "", 119 : connectmode == C_ALWAYS ? "always"
120 : connectmode == C_DISABLED ? "disabled"
121 : "",
108 nodename, 122 nodename,
109 hostname ? hostname : "", 123 hostname ? hostname : "",
110 hostname ? ":" : "", 124 hostname ? ":" : "",
111 hostname ? udp_port : 0 125 hostname ? udp_port : 0
112 ); 126 );
128 free (dns_hostname); 142 free (dns_hostname);
129#endif 143#endif
130#endif 144#endif
131} 145}
132 146
147void
133void configuration::init () 148configuration::init ()
134{ 149{
135 memset (this, 0, sizeof (*this)); 150 memset (this, 0, sizeof (*this));
136 151
137 mtu = DEFAULT_MTU; 152 mtu = DEFAULT_MTU;
153 nfmark = 0;
138 rekey = DEFAULT_REKEY; 154 rekey = DEFAULT_REKEY;
139 keepalive = DEFAULT_KEEPALIVE; 155 keepalive = DEFAULT_KEEPALIVE;
140 llevel = L_INFO; 156 llevel = L_INFO;
141 ip_proto = IPPROTO_GRE; 157 ip_proto = IPPROTO_GRE;
142#if ENABLE_ICMP 158#if ENABLE_ICMP
165#endif 181#endif
166 182
167 conf.pidfilename = strdup (LOCALSTATEDIR "/run/gvpe.pid"); 183 conf.pidfilename = strdup (LOCALSTATEDIR "/run/gvpe.pid");
168} 184}
169 185
186void
170void configuration::cleanup() 187configuration::cleanup ()
171{ 188{
172 if (rsa_key) 189 if (rsa_key)
173 RSA_free (rsa_key); 190 RSA_free (rsa_key);
174 191
175 rsa_key = 0; 192 rsa_key = 0;
176 193
177 free (pidfilename); pidfilename = 0; 194 free (pidfilename); pidfilename = 0;
178 free (ifname); ifname = 0; 195 free (ifname); ifname = 0;
179#if ENABLE_HTTP_PROXY 196#if ENABLE_HTTP_PROXY
180 free (proxy_host); proxy_host = 0; 197 free (proxy_host); proxy_host = 0;
181 free (proxy_auth); proxy_auth = 0; 198 free (proxy_auth); proxy_auth = 0;
182#endif 199#endif
183#if ENABLE_DNS 200#if ENABLE_DNS
184 free (dns_forw_host); dns_forw_host = 0; 201 free (dns_forw_host); dns_forw_host = 0;
185#endif 202#endif
203 free (script_if_up); script_if_up = 0;
204 free (script_node_up); script_node_up = 0;
205 free (script_node_change); script_node_change = 0;
206 free (script_node_down); script_node_down = 0;
186} 207}
187 208
188void 209void
189configuration::clear () 210configuration::clear ()
190{ 211{
318 conf.rekey = atoi (val); 339 conf.rekey = atoi (val);
319 else if (!strcmp (var, "keepalive")) 340 else if (!strcmp (var, "keepalive"))
320 conf.keepalive = atoi (val); 341 conf.keepalive = atoi (val);
321 else if (!strcmp (var, "mtu")) 342 else if (!strcmp (var, "mtu"))
322 conf.mtu = atoi (val); 343 conf.mtu = atoi (val);
344 else if (!strcmp (var, "nfmark"))
345 conf.nfmark = atoi (val);
323 else if (!strcmp (var, "if-up")) 346 else if (!strcmp (var, "if-up"))
324 free (conf.script_if_up), conf.script_if_up = strdup (val); 347 free (conf.script_if_up), conf.script_if_up = strdup (val);
325 else if (!strcmp (var, "node-up")) 348 else if (!strcmp (var, "node-up"))
326 free (conf.script_node_up), conf.script_node_up = strdup (val); 349 free (conf.script_node_up), conf.script_node_up = strdup (val);
350 else if (!strcmp (var, "node-change"))
351 free (conf.script_node_change), conf.script_node_change = strdup (val);
327 else if (!strcmp (var, "node-down")) 352 else if (!strcmp (var, "node-down"))
328 free (conf.script_node_down), conf.script_node_down = strdup (val); 353 free (conf.script_node_down), conf.script_node_down = strdup (val);
329 else if (!strcmp (var, "pid-file")) 354 else if (!strcmp (var, "pid-file"))
330 free (conf.pidfilename), conf.pidfilename = strdup (val); 355 free (conf.pidfilename), conf.pidfilename = strdup (val);
331 else if (!strcmp (var, "dns-forw-host")) 356 else if (!strcmp (var, "dns-forw-host"))
474 return _("unknown configuration directive. (ignored)"); 499 return _("unknown configuration directive. (ignored)");
475 500
476 return 0; 501 return 0;
477} 502}
478 503
504void
505conf_node::finalise ()
506{
507 if (max_queue < 1)
508 {
509 slog (L_WARN, _("%s: max-queue value invalid, setting it to 1."), nodename);
510 max_queue = 1;
511 }
512
513 if (routerprio > 1 && (connectmode != C_ALWAYS && connectmode != C_DISABLED))
514 {
515 //slog (L_WARN, _("%s: has non-zero router-priority but either 'never' or 'ondemand' as connectmode, setting it to 'always'."), nodename);
516 connectmode = C_ALWAYS;
517 }
518}
519
520void
479void configuration_parser::parse_argv () 521configuration_parser::parse_argv ()
480{ 522{
481 for (int i = 0; i < argc; ++i) 523 for (int i = 0; i < argc; ++i)
482 { 524 {
483 char *v = argv [i]; 525 char *v = argv [i];
484 526
586 slog (L_NOTICE, _("private hostkey and public node key mismatch: is '%s' the correct node?"), ::thisnode); 628 slog (L_NOTICE, _("private hostkey and public node key mismatch: is '%s' the correct node?"), ::thisnode);
587 exit (EXIT_FAILURE); 629 exit (EXIT_FAILURE);
588 } 630 }
589 631
590 free (fname); 632 free (fname);
591}
592 633
634 for (configuration::node_vector::iterator i = conf.nodes.begin(); i != conf.nodes.end(); ++i)
635 (*i)->finalise ();
636}
637
638char *
593char *configuration::config_filename (const char *name, const char *dflt) 639configuration::config_filename (const char *name, const char *dflt)
594{ 640{
595 char *fname; 641 char *fname;
596 642
597 asprintf (&fname, name ? name : dflt, ::thisnode); 643 asprintf (&fname, name ? name : dflt, ::thisnode);
598 644
639configuration::~configuration () 685configuration::~configuration ()
640{ 686{
641 cleanup (); 687 cleanup ();
642} 688}
643 689
644

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines