… | |
… | |
238 | return -1; |
238 | return -1; |
239 | |
239 | |
240 | // standard daemon practise... |
240 | // standard daemon practise... |
241 | { |
241 | { |
242 | int oval = 1; |
242 | int oval = 1; |
243 | setsockopt (tcpv4_fd, SOL_SOCKET, SO_REUSEADDR, &oval, sizeof oval); |
243 | setsockopt (dnsv4_fd, SOL_SOCKET, SO_REUSEADDR, &oval, sizeof oval); |
244 | } |
244 | } |
245 | |
245 | |
246 | sockinfo si (THISNODE, PROT_DNSv4); |
246 | sockinfo si (THISNODE->dns_hostname, |
|
|
247 | THISNODE->dns_hostname ? THISNODE->dns_port : 0, |
|
|
248 | PROT_DNSv4); |
247 | |
249 | |
248 | if (bind (dnsv4_fd, si.sav4 (), si.salenv4 ())) |
250 | if (bind (dnsv4_fd, si.sav4 (), si.salenv4 ())) |
249 | { |
251 | { |
250 | slog (L_ERR, _("can't bind dnsv4 on %s: %s"), (const char *)si, strerror (errno)); |
252 | slog (L_ERR, _("can't bind dnsv4 on %s: %s"), (const char *)si, strerror (errno)); |
251 | exit (EXIT_FAILURE); |
253 | exit (EXIT_FAILURE); |
… | |
… | |
395 | else |
397 | else |
396 | c->recv_vpn_packet (pkt, rsi); |
398 | c->recv_vpn_packet (pkt, rsi); |
397 | } |
399 | } |
398 | } |
400 | } |
399 | |
401 | |
|
|
402 | bool |
|
|
403 | vpn::send_vpn_packet (vpn_packet *pkt, const sockinfo &si, int tos) |
|
|
404 | { |
|
|
405 | switch (si.prot) |
|
|
406 | { |
|
|
407 | case PROT_IPv4: |
|
|
408 | return send_ipv4_packet (pkt, si, tos); |
|
|
409 | case PROT_UDPv4: |
|
|
410 | return send_udpv4_packet (pkt, si, tos); |
|
|
411 | #if ENABLE_TCP |
|
|
412 | case PROT_TCPv4: |
|
|
413 | return send_tcpv4_packet (pkt, si, tos); |
|
|
414 | #endif |
|
|
415 | #if ENABLE_ICMP |
|
|
416 | case PROT_ICMPv4: |
|
|
417 | return send_icmpv4_packet (pkt, si, tos); |
|
|
418 | #endif |
|
|
419 | #if ENABLE_DNS |
|
|
420 | case PROT_DNSv4: |
|
|
421 | return send_dnsv4_packet (pkt, si, tos); |
|
|
422 | #endif |
|
|
423 | |
|
|
424 | default: |
|
|
425 | slog (L_CRIT, _("%s: FATAL: trying to send packet with unsupported protocol"), (const char *)si); |
|
|
426 | } |
|
|
427 | |
|
|
428 | return false; |
|
|
429 | } |
|
|
430 | |
400 | void |
431 | void |
401 | vpn::ipv4_ev (io_watcher &w, short revents) |
432 | vpn::ipv4_ev (io_watcher &w, short revents) |
402 | { |
433 | { |
403 | if (revents & EVENT_READ) |
434 | if (revents & EVENT_READ) |
404 | { |
435 | { |