#include "log.h"
#include "sig_handler.h"
-//#include "options.h"
+#include "options.h"
#include "daemon.h"
#include "sysexec.h"
int ret = 0;
do {
ret = read(ttyusb_fd, buffer, sizeof(buffer));
+ if(!ret) return -1;
} while (ret == -1 && errno == EINTR);
return 0;
int main(int argc, char* argv[])
{
log_init();
- int ret = 0;
-/* options_t opt; */
-/* int ret = options_parse(&opt, argc, argv); */
-/* if(ret) { */
-/* if(ret > 0) { */
-/* fprintf(stderr, "syntax error near: %s\n\n", argv[ret]); */
-/* } */
-/* if(ret == -2) { */
-/* fprintf(stderr, "memory error on options_parse, exitting\n"); */
-/* } */
-/* if(ret == -3) { */
-/* fprintf(stderr, "syntax error: -4 and -6 are mutual exclusive\n\n"); */
-/* } */
-/* if(ret == -4) { */
-/* fprintf(stderr, "syntax error: unknown role name\n\n"); */
-/* } */
-
-/* if(ret != -2) */
-/* options_print_usage(); */
-
-/* options_clear(&opt); */
-/* log_close(); */
-/* exit(ret); */
-/* } */
-/* string_list_element_t* tmp = opt.log_targets_.first_; */
-/* if(!tmp) { */
-/* log_add_target("syslog:3,door_daemon,daemon"); */
-/* } */
-/* else { */
-/* while(tmp) { */
-/* ret = log_add_target(tmp->string_); */
-/* if(ret) { */
-/* switch(ret) { */
-/* case -2: fprintf(stderr, "memory error on log_add_target, exitting\n"); break; */
-/* case -3: fprintf(stderr, "unknown log target: '%s', exitting\n", tmp->string_); break; */
-/* case -4: fprintf(stderr, "this log target is only allowed once: '%s', exitting\n", tmp->string_); break; */
-/* default: fprintf(stderr, "syntax error near: '%s', exitting\n", tmp->string_); break; */
-/* } */
+ options_t opt;
+ int ret = options_parse(&opt, argc, argv);
+ if(ret) {
+ if(ret > 0) {
+ fprintf(stderr, "syntax error near: %s\n\n", argv[ret]);
+ }
+ if(ret == -2) {
+ fprintf(stderr, "memory error on options_parse, exitting\n");
+ }
+
+ if(ret != -2)
+ options_print_usage();
+
+ options_clear(&opt);
+ log_close();
+ exit(ret);
+ }
+ string_list_element_t* tmp = opt.log_targets_.first_;
+ if(!tmp) {
+ log_add_target("syslog:3,door_daemon,daemon");
+ }
+ else {
+ while(tmp) {
+ ret = log_add_target(tmp->string_);
+ if(ret) {
+ switch(ret) {
+ case -2: fprintf(stderr, "memory error on log_add_target, exitting\n"); break;
+ case -3: fprintf(stderr, "unknown log target: '%s', exitting\n", tmp->string_); break;
+ case -4: fprintf(stderr, "this log target is only allowed once: '%s', exitting\n", tmp->string_); break;
+ default: fprintf(stderr, "syntax error near: '%s', exitting\n", tmp->string_); break;
+ }
-/* options_clear(&opt); */
-/* log_close(); */
-/* exit(ret); */
-/* } */
-/* tmp = tmp->next_; */
-/* } */
-/* } */
- log_add_target("stdout:5");
+ options_clear(&opt);
+ log_close();
+ exit(ret);
+ }
+ tmp = tmp->next_;
+ }
+ }
log_printf(NOTICE, "just started...");
-/* options_parse_post(&opt); */
-
-/* priv_info_t priv; */
-/* if(opt.username_) */
-/* if(priv_init(&priv, opt.username_, opt.groupname_)) { */
-/* options_clear(&opt); */
-/* log_close(); */
-/* exit(-1); */
-/* } */
+ options_parse_post(&opt);
+
+ priv_info_t priv;
+ if(opt.username_)
+ if(priv_init(&priv, opt.username_, opt.groupname_)) {
+ options_clear(&opt);
+ log_close();
+ exit(-1);
+ }
- int ttyusb_fd = open("/dev/ttyUSB0", O_RDWR);
+ int ttyusb_fd = open(opt.ttyusb_dev_, O_RDWR);
if(ttyusb_fd < 0) {
- log_printf(ERROR, "unable to open /dev/ttyUSB0: %s", strerror(errno));
-/* options_clear(&opt); */
+ log_printf(ERROR, "unable to open %s: %s", opt.ttyusb_dev_, strerror(errno));
+ options_clear(&opt);
log_close();
exit(-1);
}
if(cmd_listen_fd < 0) {
log_printf(ERROR, "unable to open socket: %s", strerror(errno));
close(ttyusb_fd);
-/* options_clear(&opt); */
+ options_clear(&opt);
log_close();
exit(-1);
}
local.sun_family = AF_UNIX;
- strcpy(local.sun_path, "sock");
+ strcpy(local.sun_path, opt.command_sock_); // TODO: strlen ???
unlink(local.sun_path);
len = SUN_LEN(&local);
ret = bind(cmd_listen_fd, (struct sockaddr*)&local, len);
log_printf(ERROR, "unable to bind to '%s': %s", local.sun_path, strerror(errno));
close(cmd_listen_fd);
close(ttyusb_fd);
-/* options_clear(&opt); */
+ options_clear(&opt);
log_close();
exit(-1);
}
log_printf(ERROR, "unable to listen on command socket: %s", local.sun_path, strerror(errno));
close(cmd_listen_fd);
close(ttyusb_fd);
-/* options_clear(&opt); */
+ options_clear(&opt);
log_close();
exit(-1);
}
-/* FILE* pid_file = NULL; */
-/* if(opt.pid_file_) { */
-/* pid_file = fopen(opt.pid_file_, "w"); */
-/* if(!pid_file) { */
-/* log_printf(WARNING, "unable to open pid file: %s", strerror(errno)); */
-/* } */
-/* } */
-
-/* if(opt.chroot_dir_) */
-/* if(do_chroot(opt.chroot_dir_)) { */
-/* options_clear(&opt); */
-/* log_close(); */
-/* exit(-1); */
-/* } */
-/* if(opt.username_) */
-/* if(priv_drop(&priv)) { */
-/* options_clear(&opt); */
-/* log_close(); */
-/* exit(-1); */
-/* } */
-
-/* if(opt.daemonize_) { */
-/* pid_t oldpid = getpid(); */
-/* daemonize(); */
-/* log_printf(INFO, "running in background now (old pid: %d)", oldpid); */
-/* } */
-
-/* if(pid_file) { */
-/* pid_t pid = getpid(); */
-/* fprintf(pid_file, "%d", pid); */
-/* fclose(pid_file); */
-/* } */
+ FILE* pid_file = NULL;
+ if(opt.pid_file_) {
+ pid_file = fopen(opt.pid_file_, "w");
+ if(!pid_file) {
+ log_printf(WARNING, "unable to open pid file: %s", strerror(errno));
+ }
+ }
+
+ if(opt.chroot_dir_)
+ if(do_chroot(opt.chroot_dir_)) {
+ options_clear(&opt);
+ log_close();
+ exit(-1);
+ }
+ if(opt.username_)
+ if(priv_drop(&priv)) {
+ options_clear(&opt);
+ log_close();
+ exit(-1);
+ }
+
+ if(opt.daemonize_) {
+ pid_t oldpid = getpid();
+ daemonize();
+ log_printf(INFO, "running in background now (old pid: %d)", oldpid);
+ }
+
+ if(pid_file) {
+ pid_t pid = getpid();
+ fprintf(pid_file, "%d", pid);
+ fclose(pid_file);
+ }
ret = main_loop(ttyusb_fd, cmd_listen_fd);
close(cmd_listen_fd);
close(ttyusb_fd);
-/* options_clear(&opt); */
+ options_clear(&opt);
if(!ret)
log_printf(NOTICE, "normal shutdown");
/*
- * uAnytun
+ * door_daemon
*
- * uAnytun is a tiny implementation of SATP. Unlike Anytun which is a full
- * featured implementation uAnytun has no support for multiple connections
- * or synchronisation. It is a small single threaded implementation intended
- * to act as a client on small platforms.
- * The secure anycast tunneling protocol (satp) defines a protocol used
- * for communication between any combination of unicast and anycast
- * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
- * mode and allows tunneling of every ETHER TYPE protocol (e.g.
- * ethernet, ip, arp ...). satp directly includes cryptography and
- * message authentication based on the methodes used by SRTP. It is
- * intended to deliver a generic, scaleable and secure solution for
- * tunneling and relaying of packets of any protocol.
- *
+ * Copyright (C) 2009 Christian Pointner <equinox@spreadspace.org>
*
- * Copyright (C) 2007-2008 Christian Pointner <equinox@anytun.org>
+ * This file is part of door_daemon.
*
- * This file is part of uAnytun.
- *
- * uAnytun is free software: you can redistribute it and/or modify
+ * door_daemon is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
- * uAnytun is distributed in the hope that it will be useful,
+ * door_daemon is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with uAnytun. If not, see <http://www.gnu.org/licenses/>.
+ * along with door_daemon. If not, see <http://www.gnu.org/licenses/>.
*/
#include "datatypes.h"
#include "log.h"
-#ifndef NO_CRYPT
-#include "auth_algo.h"
-#endif
-
#define PARSE_BOOL_PARAM(SHORT, LONG, VALUE) \
else if(!strcmp(str,SHORT) || !strcmp(str,LONG)) \
VALUE = 1;
i++; \
}
-#define PARSE_IFCONFIG_PARAM(SHORT, LONG, VALUE) \
- else if(!strcmp(str,SHORT) || !strcmp(str,LONG)) \
- { \
- if(argc < 1 || argv[i+1][0] == '-') \
- return i; \
- int ret; \
- ret = options_parse_ifconfig(argv[i+1], &VALUE); \
- if(ret > 0) \
- return i+1; \
- if(ret < 0) \
- return ret; \
- argc--; \
- i++; \
- }
-
#define PARSE_HEXSTRING_PARAM_SEC(SHORT, LONG, VALUE) \
else if(!strcmp(str,SHORT) || !strcmp(str,LONG)) \
{ \
return 0;
}
-int options_parse_ifconfig(const char* arg, ifconfig_param_t* ifcfg)
-{
- char* str = strdup(arg);
- if(!str)
- return -2;
-
- char* ptr = str;
- for(;*ptr;++ptr) {
- if(*ptr == '/') {
- *ptr = 0;
- ptr++;
- if(!(*ptr)) {
- free(str);
- return 1;
- }
-
- ifcfg->prefix_length_ = atoi(ptr);
- ifcfg->net_addr_ = strdup(str);
- free(str);
-
- if(!ifcfg->net_addr_)
- return -2;
-
- return 0;
- }
- if(!isdigit(*ptr) && *ptr != '.') {
- free(str);
- return 1;
- }
- }
-
- free(str);
- return 1;
-}
int options_parse(options_t* opt, int argc, char* argv[])
argc--;
- char* role = NULL;
- int i, ipv4_only = 0, ipv6_only = 0;
+ int i;
for(i=1; argc > 0; ++i)
{
char* str = argv[i];
PARSE_STRING_PARAM("-g","--groupname", opt->groupname_)
PARSE_STRING_PARAM("-C","--chroot", opt->chroot_dir_)
PARSE_STRING_PARAM("-P","--write-pid", opt->pid_file_)
- PARSE_STRING_PARAM("-i","--interface", opt->local_addr_)
- PARSE_STRING_PARAM("-p","--port", opt->local_port_)
- PARSE_INT_PARAM("-s","--sender-id", opt->sender_id_)
PARSE_STRING_LIST("-L","--log", opt->log_targets_)
- PARSE_STRING_PARAM("-r","--remote-host", opt->remote_addr_)
- PARSE_STRING_PARAM("-o","--remote-port", opt->remote_port_)
- PARSE_BOOL_PARAM("-4","--ipv4-only", ipv4_only)
- PARSE_BOOL_PARAM("-6","--ipv6-only", ipv6_only)
- PARSE_STRING_PARAM("-d","--dev", opt->dev_name_)
- PARSE_STRING_PARAM("-t","--type", opt->dev_type_)
- PARSE_IFCONFIG_PARAM("-n","--ifconfig", opt->ifconfig_param_)
- PARSE_STRING_PARAM("-x","--post-up-script", opt->post_up_script_)
- PARSE_INT_PARAM("-m","--mux", opt->mux_)
- PARSE_INT_PARAM("-w","--window-size", opt->seq_window_size_)
-#ifndef NO_CRYPT
- PARSE_STRING_PARAM("-k","--kd-prf", opt->kd_prf_)
-#ifndef NO_PASSPHRASE
- PARSE_STRING_PARAM_SEC("-E","--passphrase", opt->passphrase_)
-#endif
- PARSE_STRING_PARAM("-e","--role", role)
- PARSE_HEXSTRING_PARAM_SEC("-K","--key", opt->key_)
- PARSE_HEXSTRING_PARAM_SEC("-A","--salt", opt->salt_)
- PARSE_STRING_PARAM("-c","--cipher", opt->cipher_)
- PARSE_STRING_PARAM("-a","--auth-algo", opt->auth_algo_)
- PARSE_INT_PARAM("-b","--auth-tag-length", opt->auth_tag_length_)
-#endif
+ PARSE_STRING_PARAM("-d","--device", opt->ttyusb_dev_)
+ PARSE_STRING_PARAM("-s","--socket", opt->command_sock_)
else
return i;
}
- if(ipv4_only && ipv6_only)
- return -3;
- if(ipv4_only)
- opt->resolv_addr_type_ = IPV4_ONLY;
- if(ipv6_only)
- opt->resolv_addr_type_ = IPV6_ONLY;
-
- if(role) {
- if(!strcmp(role, "alice") || !strcmp(role, "server") || !strcmp(role, "left"))
- opt->role_ = ROLE_LEFT;
- else if(!strcmp(role, "bob") || !strcmp(role, "client") || !strcmp(role, "right"))
- opt->role_ = ROLE_RIGHT;
- else {
- free(role);
- return -4;
- }
- free(role);
- }
+
return 0;
}
{
if(!opt)
return;
-
-#ifdef NO_V4MAPPED
- if(opt->resolv_addr_type_ == ANY) {
- opt->resolv_addr_type_ = IPV4_ONLY;
- log_printf(WARNING, "No support for V4-mapped Adresses on this platform, defaulting to only use IPv4 addresses");
- }
-#endif
-
-#ifndef NO_CRYPT
- if(!strcmp(opt->cipher_, "null") && !strcmp(opt->auth_algo_, "null") &&
- strcmp(opt->kd_prf_, "null")) {
- if(opt->kd_prf_)
- free(opt->kd_prf_);
- opt->kd_prf_ = strdup("null");
- }
- if((strcmp(opt->cipher_, "null") || strcmp(opt->auth_algo_, "null")) &&
- !strcmp(opt->kd_prf_, "null")) {
- log_printf(WARNING, "using NULL key derivation with encryption and or authentication enabled!");
- }
-
- u_int32_t tag_len_max = auth_algo_get_max_length(opt->auth_algo_);
- if(!tag_len_max) opt->auth_tag_length_ = 0;
- else if(tag_len_max < opt->auth_tag_length_) {
- log_printf(WARNING, "%s auth algo can't generate tags of length %d, using maximum tag length(%d)", opt->auth_algo_, opt->auth_tag_length_, tag_len_max);
- opt->auth_tag_length_ = tag_len_max;
- }
-#endif
-
- if(!(opt->dev_name_) && !(opt->dev_type_))
- opt->dev_type_ = strdup("tun");
+// nothing to do
}
void options_default(options_t* opt)
if(!opt)
return;
- opt->progname_ = strdup("uanytun");
+ opt->progname_ = strdup("door_daemon");
opt->daemonize_ = 1;
opt->username_ = NULL;
opt->groupname_ = NULL;
opt->chroot_dir_ = NULL;
opt->pid_file_ = NULL;
string_list_init(&opt->log_targets_);
- opt->local_addr_ = NULL;
- opt->local_port_ = strdup("4444");
- opt->sender_id_ = 0;
- opt->remote_addr_ = NULL;
- opt->remote_port_ = strdup("4444");
- opt->resolv_addr_type_ = ANY;
- opt->dev_name_ = NULL;
- opt->dev_type_ = NULL;
- opt->ifconfig_param_.net_addr_ = NULL;
- opt->ifconfig_param_.prefix_length_ = 0;
- opt->post_up_script_ = NULL;
- opt->mux_ = 0;
- opt->seq_window_size_ = 0;
-#ifndef NO_CRYPT
- opt->kd_prf_ = strdup("aes-ctr");
- opt->passphrase_ = NULL;
- opt->role_ = ROLE_LEFT;
- opt->cipher_ = strdup("aes-ctr");
- opt->auth_algo_ = strdup("sha1");
- opt->auth_tag_length_ = 10;
-#else
- opt->cipher_ = strdup("null");
- opt->auth_tag_length_ = 0;
-#endif
- opt->key_.buf_ = NULL;
- opt->key_.length_ = 0;
- opt->salt_.buf_ = NULL;
- opt->salt_.length_ = 0;
+
+ opt->ttyusb_dev_ = strdup("/dev/ttyUSB0");
+ opt->command_sock_ = strdup("/var/run/door_daemon");
}
void options_clear(options_t* opt)
if(opt->pid_file_)
free(opt->pid_file_);
string_list_clear(&opt->log_targets_);
- if(opt->local_addr_)
- free(opt->local_addr_);
- if(opt->local_port_)
- free(opt->local_port_);
- if(opt->remote_addr_)
- free(opt->remote_addr_);
- if(opt->remote_port_)
- free(opt->remote_port_);
- if(opt->dev_name_)
- free(opt->dev_name_);
- if(opt->dev_type_)
- free(opt->dev_type_);
- if(opt->ifconfig_param_.net_addr_)
- free(opt->ifconfig_param_.net_addr_);
- if(opt->post_up_script_)
- free(opt->post_up_script_);
- if(opt->cipher_)
- free(opt->cipher_);
-#ifndef NO_CRYPT
- if(opt->auth_algo_)
- free(opt->auth_algo_);
- if(opt->kd_prf_)
- free(opt->kd_prf_);
- if(opt->passphrase_)
- free(opt->passphrase_);
-#endif
- if(opt->key_.buf_)
- free(opt->key_.buf_);
- if(opt->salt_.buf_)
- free(opt->salt_.buf_);
+
+ if(opt->ttyusb_dev_)
+ free(opt->ttyusb_dev_);
+ if(opt->command_sock_)
+ free(opt->command_sock_);
}
void options_print_usage()
{
printf("USAGE:\n");
- printf("uanytun [-h|--help] prints this...\n");
- printf(" [-D|--nodaemonize] don't run in background\n");
- printf(" [-u|--username] <username> change to this user\n");
- printf(" [-g|--groupname] <groupname> change to this group\n");
- printf(" [-C|--chroot] <path> chroot to this directory\n");
- printf(" [-P|--write-pid] <path> write pid to this file\n");
- printf(" [-i|--interface] <ip-address> local ip address to bind to\n");
- printf(" [-p|--port] <port> local port to bind to\n");
- printf(" [-s|--sender-id ] <sender id> the sender id to use\n");
- printf(" [-L|--log] <target>:<level>[,<param1>[,<param2>..]]\n");
- printf(" add a log target, can be invoked several times\n");
-
- printf(" [-r|--remote-host] <hostname|ip> remote host\n");
- printf(" [-o|--remote-port] <port> remote port\n");
- printf(" [-4|--ipv4-only] always resolv IPv4 addresses\n");
- printf(" [-6|--ipv6-only] always resolv IPv6 addresses\n");
- printf(" [-d|--dev] <name> device name\n");
- printf(" [-t|--type] <tun|tap> device type\n");
-
- printf(" [-n|--ifconfig] <local>/<prefix> the local address for the tun/tap device and the used prefix length\n");
- printf(" [-x|--post-up-script] <script> script gets called after interface is created\n");
- printf(" [-m|--mux] <mux-id> the multiplex id to use\n");
- printf(" [-w|--window-size] <window size> seqence number window size\n");
-#ifndef NO_CRYPT
- printf(" [-k|--kd-prf] <kd-prf type> key derivation pseudo random function\n");
-#ifndef NO_PASSPHRASE
- printf(" [-E|--passphrase] <pass phrase> a passprhase to generate master key and salt from\n");
-#endif
- printf(" [-K|--key] <master key> master key to use for encryption\n");
- printf(" [-A|--salt] <master salt> master salt to use for encryption\n");
- printf(" [-e|--role] <role> left (alice) or right (bob)");
- printf(" [-c|--cipher] <cipher type> payload encryption algorithm\n");
- printf(" [-a|--auth-algo] <algo type> message authentication algorithm\n");
- printf(" [-b|--auth-tag-length] <length> length of the auth tag\n");
-#endif
+ printf("door_daemon [-h|--help] prints this...\n");
+ printf(" [-D|--nodaemonize] don't run in background\n");
+ printf(" [-u|--username] <username> change to this user\n");
+ printf(" [-g|--groupname] <groupname> change to this group\n");
+ printf(" [-C|--chroot] <path> chroot to this directory\n");
+ printf(" [-P|--write-pid] <path> write pid to this file\n");
+ printf(" [-L|--log] <target>:<level>[,<param1>[,<param2>..]]\n");
+ printf(" add a log target, can be invoked several times\n");
+
+ printf(" [-d|--device] <tty device> the device file e.g. /dev/ttyUSB0\n");
+ printf(" [-s|--command-sock] <unix sock> the command socket e.g. /var/run/door_daemon\n");
}
void options_print(options_t* opt)
printf("pid_file: '%s'\n", opt->pid_file_);
printf("log_targets: \n");
string_list_print(&opt->log_targets_, " '", "'\n");
- printf("local_addr: '%s'\n", opt->local_addr_);
- printf("local_port: '%s'\n", opt->local_port_);
- printf("sender_id: %d\n", opt->sender_id_);
- printf("remote_addr: '%s'\n", opt->remote_addr_);
- printf("remote_port: '%s'\n", opt->remote_port_);
- printf("resolv_addr_type: ");
- switch(opt->resolv_addr_type_) {
- case ANY: printf("any\n"); break;
- case IPV4_ONLY: printf("ipv4-only\n"); break;
- case IPV6_ONLY: printf("ipv6-only\n"); break;
- default: printf("??\n"); break;
- }
- printf("dev_name: '%s'\n", opt->dev_name_);
- printf("dev_type: '%s'\n", opt->dev_type_);
- printf("ifconfig_net_addr: '%s'\n", opt->ifconfig_param_.net_addr_);
- printf("ifconfig_prefix_length: %d\n", opt->ifconfig_param_.prefix_length_);
- printf("post_up_script: '%s'\n", opt->post_up_script_);
- printf("mux: %d\n", opt->mux_);
- printf("seq_window_size: %d\n", opt->seq_window_size_);
- printf("cipher: '%s'\n", opt->cipher_);
-#ifndef NO_CRYPT
- printf("auth_algo: '%s'\n", opt->auth_algo_);
- printf("auth_tag_length: %d\n", opt->auth_tag_length_);
- printf("kd_prf: '%s'\n", opt->kd_prf_);
- printf("passphrase: '%s'\n", opt->passphrase_);
- printf("role: ");
- switch(opt->role_) {
- case ROLE_LEFT: printf("left\n"); break;
- case ROLE_RIGHT: printf("right\n"); break;
- default: printf("??\n"); break;
- }
-#endif
-
- u_int32_t i;
- printf("key_[%d]: '", opt->key_.length_);
- for(i=0; i<opt->key_.length_; ++i) printf("%02X", opt->key_.buf_[i]);
- printf("'\n");
- printf("salt_[%d]: '", opt->salt_.length_);
- for(i=0; i<opt->salt_.length_; ++i) printf("%02X", opt->salt_.buf_[i]);
- printf("'\n");
+ printf("ttyusb_dev: '%s'\n", opt->ttyusb_dev_);
+ printf("command_sock: '%s'\n", opt->command_sock_);
}
/*
- * uAnytun
+ * door_daemon
*
- * uAnytun is a tiny implementation of SATP. Unlike Anytun which is a full
- * featured implementation uAnytun has no support for multiple connections
- * or synchronisation. It is a small single threaded implementation intended
- * to act as a client on small platforms.
- * The secure anycast tunneling protocol (satp) defines a protocol used
- * for communication between any combination of unicast and anycast
- * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
- * mode and allows tunneling of every ETHER TYPE protocol (e.g.
- * ethernet, ip, arp ...). satp directly includes cryptography and
- * message authentication based on the methodes used by SRTP. It is
- * intended to deliver a generic, scaleable and secure solution for
- * tunneling and relaying of packets of any protocol.
- *
+ * Copyright (C) 2009 Christian Pointner <equinox@spreadspace.org>
*
- * Copyright (C) 2007-2008 Christian Pointner <equinox@anytun.org>
+ * This file is part of door_daemon.
*
- * This file is part of uAnytun.
- *
- * uAnytun is free software: you can redistribute it and/or modify
+ * door_daemon is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
- * uAnytun is distributed in the hope that it will be useful,
+ * door_daemon is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with uAnytun. If not, see <http://www.gnu.org/licenses/>.
+ * along with door_daemon. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _OPTIONS_H_
#include "string_list.h"
-struct ifconfig_param_struct {
- char* net_addr_;
- u_int16_t prefix_length_;
-};
-typedef struct ifconfig_param_struct ifconfig_param_t;
-
-enum resolv_addr_type_enum { ANY, IPV4_ONLY, IPV6_ONLY };
-typedef enum resolv_addr_type_enum resolv_addr_type_t;
-
-enum role_enum { ROLE_LEFT, ROLE_RIGHT };
-typedef enum role_enum role_t;
-
struct options_struct {
char* progname_;
int daemonize_;
char* chroot_dir_;
char* pid_file_;
string_list_t log_targets_;
- char* local_addr_;
- char* local_port_;
- sender_id_t sender_id_;
- char* remote_addr_;
- char* remote_port_;
- resolv_addr_type_t resolv_addr_type_;
- char* dev_name_;
- char* dev_type_;
- ifconfig_param_t ifconfig_param_;
- char* post_up_script_;
- mux_t mux_;
- window_size_t seq_window_size_;
- char* cipher_;
-#ifndef NO_CRYPT
- char* kd_prf_;
- char* auth_algo_;
- char* passphrase_;
- role_t role_;
-#endif
- u_int32_t auth_tag_length_;
- buffer_t key_;
- buffer_t salt_;
+
+ char* ttyusb_dev_;
+ char* command_sock_;
};
typedef struct options_struct options_t;
int options_parse_hex_string(const char* hex, buffer_t* buffer);
-int options_parse_ifconfig(const char* arg, ifconfig_param_t* ifcfg);
int options_parse(options_t* opt, int argc, char* argv[]);
void options_parse_post(options_t* opt);