1 | /* |
1 | /* |
2 | vpn.C -- handle the protocol, encryption, handshaking etc. |
2 | vpn.C -- handle the protocol, encryption, handshaking etc. |
3 | Copyright (C) 2003-2004 Marc Lehmann <pcg@goof.com> |
3 | Copyright (C) 2003-2005 Marc Lehmann <gvpe@schmorp.de> |
4 | |
4 | |
|
|
5 | This file is part of GVPE. |
|
|
6 | |
5 | This program is free software; you can redistribute it and/or modify |
7 | GVPE is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by |
8 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or |
9 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. |
10 | (at your option) any later version. |
9 | |
11 | |
10 | 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, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. |
15 | GNU General Public License for more details. |
14 | |
16 | |
15 | 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 |
16 | along with this program; if not, write to the Free Software |
18 | along with gvpe; if not, write to the Free Software |
17 | Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 | Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | */ |
20 | */ |
19 | |
21 | |
20 | #include "config.h" |
22 | #include "config.h" |
21 | |
23 | |
… | |
… | |
226 | #endif |
228 | #endif |
227 | |
229 | |
228 | #if ENABLE_DNS |
230 | #if ENABLE_DNS |
229 | if (THISNODE->protocols & PROT_DNSv4) |
231 | if (THISNODE->protocols & PROT_DNSv4) |
230 | { |
232 | { |
|
|
233 | dns_forwarder.set (::conf.dns_forw_host, ::conf.dns_forw_port, PROT_DNSv4); |
|
|
234 | |
231 | dnsv4_fd = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP); |
235 | dnsv4_fd = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP); |
232 | |
236 | |
233 | if (dnsv4_fd < 0) |
237 | if (dnsv4_fd < 0) |
234 | return -1; |
238 | return -1; |
235 | |
239 | |
… | |
… | |
409 | |
413 | |
410 | if (len > 0) |
414 | if (len > 0) |
411 | { |
415 | { |
412 | pkt->len = len; |
416 | pkt->len = len; |
413 | |
417 | |
414 | // raw sockets deliver the ipv4, but don't expect it on sends |
418 | // raw sockets deliver the ipv4 header, but don't expect it on sends |
415 | // this is slow, but... |
|
|
416 | pkt->skip_hdr (IP_OVERHEAD); |
419 | pkt->skip_hdr (IP_OVERHEAD); |
417 | |
420 | |
418 | recv_vpn_packet (pkt, si); |
421 | recv_vpn_packet (pkt, si); |
419 | } |
422 | } |
420 | else |
423 | else |
… | |
… | |
426 | delete pkt; |
429 | delete pkt; |
427 | } |
430 | } |
428 | else |
431 | else |
429 | { |
432 | { |
430 | slog (L_ERR, |
433 | slog (L_ERR, |
431 | _("FATAL: unknown revents %08x in socket, terminating\n"), |
434 | _("FATAL: unknown revents %08x in socket, terminating\n"), |
432 | revents); |
435 | revents); |
433 | exit (EXIT_FAILURE); |
436 | exit (EXIT_FAILURE); |
434 | } |
437 | } |
435 | } |
438 | } |
436 | |
439 | |
437 | #if ENABLE_ICMP |
440 | #if ENABLE_ICMP |
… | |
… | |
538 | int dst = mac2id (pkt->dst); |
541 | int dst = mac2id (pkt->dst); |
539 | int src = mac2id (pkt->src); |
542 | int src = mac2id (pkt->src); |
540 | |
543 | |
541 | if (src != THISNODE->id) |
544 | if (src != THISNODE->id) |
542 | { |
545 | { |
543 | slog (L_ERR, _("FATAL: tap packet not originating on current node received, exiting.")); |
546 | slog (L_ERR, _("FATAL: tap packet not originating on current node received (if-up script not working properly?), exiting.")); |
544 | exit (EXIT_FAILURE); |
547 | exit (EXIT_FAILURE); |
545 | } |
548 | } |
546 | |
549 | |
547 | if (dst == THISNODE->id) |
550 | if (dst == THISNODE->id) |
548 | { |
551 | { |