/*
ifconfig.c -- Generate platform specific interface configuration commands
- Copyright (C) 2016-2017 Guus Sliepen <guus@tinc-vpn.org>
+ Copyright (C) 2016-2018 Guus Sliepen <guus@tinc-vpn.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static long start;
-#ifndef HAVE_MINGW
+#ifndef HAVE_WINDOWS
void ifconfig_header(FILE *out) {
fprintf(out, "#!/bin/sh\n");
+#ifdef HAVE_LINUX
+ fprintf(out, "ip link set \"$INTERFACE\" up\n");
+#endif
start = ftell(out);
}
bool ifconfig_footer(FILE *out) {
if(ftell(out) == start) {
- fprintf(out, "echo 'Unconfigured tinc-up script, please edit '$0'!'\n\n#ifconfig $INTERFACE <your vpn IP address> netmask <netmask of whole VPN>\n");
- return false;
- } else {
+ fprintf(out,
#ifdef HAVE_LINUX
- fprintf(out, "ip link set \"$INTERFACE\" up\n");
+ "#ip addr add <your vpn IP address>/<prefix of whole VPN> dev $INTERFACE\n"
#else
+ "#ifconfig $INTERFACE <your vpn IP address>/<prefix of whole VPN>\n"
+#endif
+ "\n"
+ "echo \"Unconfigured tinc-up script, please edit '$0'!\" >&2\n");
+ return false;
+ } else {
+#ifndef HAVE_LINUX
fprintf(out, "ifconfig \"$INTERFACE\" up\n");
#endif
return true;
}
void ifconfig_dhcp6(FILE *out) {
+ (void)out;
fprintf(stderr, "DHCPv6 requested, but not supported by tinc on this platform\n");
}
void ifconfig_slaac(FILE *out) {
+ (void)out;
// It's the default?
}
static subnet_t ipv4, ipv6;
void ifconfig_address(FILE *out, const char *value) {
- subnet_t address = {NULL};
+ subnet_t address = {0};
char address_str[MAXNETSTR];
if(!str2net(&address, value) || !net2str(address_str, sizeof(address_str), &address)) {
ipv6 = address;
break;
+ case SUBNET_MAC:
default:
return;
}
return;
}
-#elif defined(HAVE_MINGW) || defined(HAVE_CYGWIN)
+#elif defined(HAVE_WINDOWS)
switch(address.type) {
case SUBNET_MAC:
break;
case SUBNET_IPV4:
- fprintf(out, "netsh inetface ipv4 set address \"$INTERFACE\" static %s\n", address_str);
+ fprintf(out, "netsh interface ipv4 set address \"%%INTERFACE%%\" static %s\n", address_str);
break;
case SUBNET_IPV6:
- fprintf(out, "netsh inetface ipv6 set address \"$INTERFACE\" static %s\n", address_str);
+ fprintf(out, "netsh interface ipv6 set address \"%%INTERFACE%%\" %s\n", address_str);
break;
default:
}
void ifconfig_route(FILE *out, const char *value) {
- subnet_t subnet = {NULL}, gateway = {NULL};
+ subnet_t subnet = {0}, gateway = {0};
char subnet_str[MAXNETSTR] = "", gateway_str[MAXNETSTR] = "";
char *sep = strchr(value, ' ');
if(*gateway_str) {
switch(subnet.type) {
case SUBNET_IPV4:
- fprintf(out, "ip route add %s via %s dev \"$INTERFACE\"\n", subnet_str, gateway_str);
+ fprintf(out, "ip route add %s via %s dev \"$INTERFACE\" onlink\n", subnet_str, gateway_str);
break;
case SUBNET_IPV6:
- fprintf(out, "ip route add %s via %s dev \"$INTERFACE\"\n", subnet_str, gateway_str);
+ fprintf(out, "ip route add %s via %s dev \"$INTERFACE\" onlink\n", subnet_str, gateway_str);
break;
+ case SUBNET_MAC:
default:
return;
}
fprintf(out, "ip route add %s dev \"$INTERFACE\"\n", subnet_str);
break;
+ case SUBNET_MAC:
default:
return;
}
}
-#elif defined(HAVE_MINGW) || defined(HAVE_CYGWIN)
+#elif defined(HAVE_WINDOWS)
if(*gateway_str) {
switch(subnet.type) {
case SUBNET_IPV4:
- fprintf(out, "netsh inetface ipv4 add route %s \"%%INTERFACE%%\" %s\n", subnet_str, gateway_str);
+ fprintf(out, "netsh interface ipv4 add route %s \"%%INTERFACE%%\" %s\n", subnet_str, gateway_str);
break;
case SUBNET_IPV6:
- fprintf(out, "netsh inetface ipv6 add route %s \"%%INTERFACE%%\" %s\n", subnet_str, gateway_str);
+ fprintf(out, "netsh interface ipv6 add route %s \"%%INTERFACE%%\" %s\n", subnet_str, gateway_str);
break;
+ case SUBNET_MAC:
default:
return;
}
} else {
switch(subnet.type) {
case SUBNET_IPV4:
- fprintf(out, "netsh inetface ipv4 add route %s \"%%INTERFACE%%\"\n", subnet_str);
+ fprintf(out, "netsh interface ipv4 add route %s \"%%INTERFACE%%\"\n", subnet_str);
break;
case SUBNET_IPV6:
- fprintf(out, "netsh inetface ipv6 add route %s \"%%INTERFACE%%\"\n", subnet_str);
+ fprintf(out, "netsh interface ipv6 add route %s \"%%INTERFACE%%\"\n", subnet_str);
break;
+ case SUBNET_MAC:
default:
return;
}
net2str(gateway_str, sizeof(gateway_str), &ipv6);
break;
+ case SUBNET_MAC:
default:
return;
}
fprintf(out, "route add -inet6 %s %s\n", subnet_str, gateway_str);
break;
+ case SUBNET_MAC:
default:
return;
}