X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet_setup.c;h=3268f5db24b9c732b0a6371731efa77d3733c37c;hp=c4337ccc35021a702bc58b0dfedbd1f702d78cb0;hb=3b1fad04de6bed2f284fdf3d5b27d4162aeebc8c;hpb=e838289683c0039fac0ae6172d40b4177c17911b diff --git a/src/net_setup.c b/src/net_setup.c index c4337ccc..3268f5db 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -1,7 +1,7 @@ /* net_setup.c -- Setup. Copyright (C) 1998-2005 Ivo Timmermans, - 2000-2010 Guus Sliepen + 2000-2012 Guus Sliepen 2006 Scott Lamb 2010 Brandon Black @@ -45,6 +45,7 @@ #include "xalloc.h" char *myport; +devops_t devops; bool read_rsa_public_key(connection_t *c) { FILE *fp; @@ -116,7 +117,7 @@ bool read_rsa_public_key(connection_t *c) { if(!fp) { logger(LOG_ERR, "Error reading RSA public key file `%s': %s", fname, strerror(errno)); free(fname); - return; + return false; } c->rsa_key = PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL); @@ -134,7 +135,7 @@ bool read_rsa_public_key(connection_t *c) { if(!fp) { logger(LOG_ERR, "Error reading RSA public key file `%s': %s", fname, strerror(errno)); free(fname); - return; + return false; } c->rsa_key = PEM_read_RSA_PUBKEY(fp, &c->rsa_key, NULL, NULL); @@ -276,7 +277,7 @@ void load_all_subnets(void) { static bool setup_myself(void) { config_t *cfg; subnet_t *subnet; - char *name, *hostname, *mode, *afname, *cipher, *digest; + char *name, *hostname, *mode, *afname, *cipher, *digest, *type; char *fname = NULL; char *address = NULL; char *envp[5]; @@ -539,7 +540,24 @@ static bool setup_myself(void) { /* Open device */ - if(!setup_device()) + devops = os_devops; + + if(get_config_string(lookup_config(config_tree, "DeviceType"), &type)) { + if(!strcasecmp(type, "dummy")) + devops = dummy_devops; + else if(!strcasecmp(type, "raw_socket")) + devops = raw_socket_devops; +#ifdef ENABLE_UML + else if(!strcasecmp(type, "uml")) + devops = uml_devops; +#endif +#ifdef ENABLE_VDE + else if(!strcasecmp(type, "vde")) + devops = vde_devops; +#endif + } + + if(!devops.setup()) return false; /* Run tinc-up script to further initialize the tap interface */ @@ -702,7 +720,7 @@ void close_network_connections(void) { for(i = 0; i < 4; i++) free(envp[i]); - close_device(); + devops.close(); return; }