summaryrefslogtreecommitdiff
path: root/osdep
diff options
context:
space:
mode:
authorGrant Limberg <glimberg@gmail.com>2016-07-14 19:29:10 -0700
committerGrant Limberg <glimberg@gmail.com>2016-07-14 19:29:10 -0700
commit2afe3d89d00c0336db3e293d2e9dbd8d0e0083e7 (patch)
treef07d029f5a76ac3cbea1ac92491e2cfa59391572 /osdep
parent8a15b42dabbacd522bfc7c2042591fa71692136c (diff)
parentbdc3b0834bb8abc621ee6dbc9a92769b57376bee (diff)
downloadinfinitytier-2afe3d89d00c0336db3e293d2e9dbd8d0e0083e7.tar.gz
infinitytier-2afe3d89d00c0336db3e293d2e9dbd8d0e0083e7.zip
Merge branch 'master' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne
Diffstat (limited to 'osdep')
-rw-r--r--osdep/ManagedRoute.cpp4
-rw-r--r--osdep/ManagedRoute.hpp4
-rw-r--r--osdep/OSXEthernetTap.cpp4
3 files changed, 7 insertions, 5 deletions
diff --git a/osdep/ManagedRoute.cpp b/osdep/ManagedRoute.cpp
index 54990122..ae2f8943 100644
--- a/osdep/ManagedRoute.cpp
+++ b/osdep/ManagedRoute.cpp
@@ -57,6 +57,8 @@
#define ZT_LINUX_IP_COMMAND "/sbin/ip"
#define ZT_LINUX_IP_COMMAND_2 "/usr/sbin/ip"
+// NOTE: BSD is mostly tested on Apple/Mac but is likely to work on other BSD too
+
namespace ZeroTier {
namespace {
@@ -413,7 +415,7 @@ bool ManagedRoute::sync()
// Shadow system route if it exists, also delete any obsolete shadows
// and replace them with the new state. sync() is called periodically to
// allow us to do that if underlying connectivity changes.
- if ((_systemVia != newSystemVia)||(!strcmp(_systemDevice,newSystemDevice))) {
+ if ( ((_systemVia != newSystemVia)||(strcmp(_systemDevice,newSystemDevice))) && (strcmp(_device,newSystemDevice)) ) {
if ((_systemVia)&&(_systemDevice[0])) {
_routeCmd("delete",leftt,_systemVia,_systemDevice,(const char *)0);
_routeCmd("delete",rightt,_systemVia,_systemDevice,(const char *)0);
diff --git a/osdep/ManagedRoute.hpp b/osdep/ManagedRoute.hpp
index 5dde12ad..63310f24 100644
--- a/osdep/ManagedRoute.hpp
+++ b/osdep/ManagedRoute.hpp
@@ -54,8 +54,8 @@ public:
* "device name."
*
* @param target Route target (e.g. 0.0.0.0/0 for default)
- * @param via Route next L3 hop or NULL InetAddress if local
- * @param device Device name/ID if 'via' is null and route is local, otherwise ignored
+ * @param via Route next L3 hop or NULL InetAddress if local in which case it will be routed via device
+ * @param device Name or hex LUID of ZeroTier device (e.g. zt#)
* @return True if route was successfully set
*/
inline bool set(const InetAddress &target,const InetAddress &via,const char *device)
diff --git a/osdep/OSXEthernetTap.cpp b/osdep/OSXEthernetTap.cpp
index e8c5c1ea..56934c96 100644
--- a/osdep/OSXEthernetTap.cpp
+++ b/osdep/OSXEthernetTap.cpp
@@ -474,7 +474,7 @@ bool OSXEthernetTap::addIp(const InetAddress &ip)
long cpid = (long)vfork();
if (cpid == 0) {
- ::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),ip.isV4() ? "inet" : "inet6",ip.toString().c_str(),"alias",(const char *)0);
+ ::execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),(ip.ss_family == AF_INET6) ? "inet6" : "inet",ip.toString().c_str(),"alias",(const char *)0);
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;
@@ -494,7 +494,7 @@ bool OSXEthernetTap::removeIp(const InetAddress &ip)
if (*i == ip) {
long cpid = (long)vfork();
if (cpid == 0) {
- execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),"inet",ip.toIpString().c_str(),"-alias",(const char *)0);
+ execl("/sbin/ifconfig","/sbin/ifconfig",_dev.c_str(),(ip.ss_family == AF_INET6) ? "inet6" : "inet",ip.toIpString().c_str(),"-alias",(const char *)0);
_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;