X-Git-Url: https://git.syn-net.org/?p=debian%2Fuanytun.git;a=blobdiff_plain;f=src%2Fbsd%2Ftun.c;h=46c7c1c08e13a2ce23d2e79b9ec591c3af4c8f70;hp=f19366873c75b661a3ff2e8c84d487c71186ebd3;hb=0a5d793f3b44075f4b150c37800e4d5093c8f01d;hpb=b81b2c1954fe3e3317e6fa260c5ffdc9eeee966c diff --git a/src/bsd/tun.c b/src/bsd/tun.c index f193668..46c7c1c 100644 --- a/src/bsd/tun.c +++ b/src/bsd/tun.c @@ -20,8 +20,9 @@ * This file is part of uAnytun. * * uAnytun 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. + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. * * uAnytun is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -182,7 +183,7 @@ int tun_init_post(tun_device_t* dev) return 0; } -#elif defined(__GNUC__) && defined(__FreeBSD__) +#elif defined(__GNUC__) && (defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) int tun_init_post(tun_device_t* dev) { @@ -313,36 +314,31 @@ void tun_do_ifconfig(tun_device_t* dev) if(!dev || !dev->actual_name_ || !dev->net_addr_ || !dev->net_mask_) return; - - char* command = NULL; - char* netmask; char* end; if(dev->type_ == TYPE_TAP) { #if defined(__GNUC__) && defined(__OpenBSD__) - end = " link0"; -#elif defined(__GNUC__) && defined(__FreeBSD__) - end = " up"; + end = "link0"; +#elif defined(__GNUC__) && (defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) + end = "up"; #elif defined(__GNUC__) && defined(__NetBSD__) - end = ""; + end = NULL; #else #error This Device works just for OpenBSD, FreeBSD or NetBSD #endif } else - end = " up"; + end = "up"; - asprintf(&command, "/sbin/ifconfig %s %s netmask %s mtu %d%s", dev->actual_name_, dev->net_addr_, - dev->net_mask_, dev->mtu_, end); - if(!command) { + char* mtu_str = NULL; + asprintf(&mtu_str, "%d", dev->mtu_); + if(!mtu_str) { log_printf(ERROR, "Execution of ifconfig failed"); return; } - int result = system(command); - if(result == -1) - log_printf(ERROR, "Execution of ifconfig failed"); - else - log_printf(NOTICE, "ifconfig returned %d", WEXITSTATUS(result)); + char* const argv[] = { "/sbin/ifconfig", dev->actual_name_, dev->net_addr_, "netmask", dev->net_mask_, "mtu", mtu_str, end, NULL }; + char* const evp[] = { NULL }; + uanytun_exec("/sbin/ifconfig", argv, evp); - free(command); + free(mtu_str); }