summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--make-linux.mk4
-rw-r--r--osdep/LinuxEthernetTap.cpp2
-rw-r--r--service/OneService.cpp7
3 files changed, 12 insertions, 1 deletions
diff --git a/make-linux.mk b/make-linux.mk
index 29d19830..68f865bf 100644
--- a/make-linux.mk
+++ b/make-linux.mk
@@ -41,6 +41,10 @@ ifeq ($(ZT_ENABLE_CLUSTER),1)
DEFS+=-DZT_ENABLE_CLUSTER
endif
+ifeq ($(ZT_SYNOLOGY), 1)
+ DEFS+=-D__SYNOLOGY__
+endif
+
ifeq ($(ZT_TRACE),1)
DEFS+=-DZT_TRACE
endif
diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp
index e336bb67..55a6d9f6 100644
--- a/osdep/LinuxEthernetTap.cpp
+++ b/osdep/LinuxEthernetTap.cpp
@@ -221,8 +221,10 @@ bool LinuxEthernetTap::addIp(const InetAddress &ip)
return false;
std::vector<InetAddress> allIps(ips());
+#ifndef __SYNOLOGY__
if (std::binary_search(allIps.begin(),allIps.end(),ip))
return true;
+#endif
// Remove and reconfigure if address is the same but netmask is different
for(std::vector<InetAddress>::iterator i(allIps.begin());i!=allIps.end();++i) {
diff --git a/service/OneService.cpp b/service/OneService.cpp
index aa90798f..dc3e0ed1 100644
--- a/service/OneService.cpp
+++ b/service/OneService.cpp
@@ -1088,12 +1088,17 @@ public:
}
}
for(std::vector<InetAddress>::iterator ip(newManagedIps.begin());ip!=newManagedIps.end();++ip) {
+#ifdef __SYNOLOGY__
+ if (!n.tap->addIp(*ip))
+ fprintf(stderr,"ERROR: unable to add ip address %s" ZT_EOL_S, ip->toString().c_str());
+#else
if (std::find(n.managedIps.begin(),n.managedIps.end(),*ip) == n.managedIps.end()) {
+
if (!n.tap->addIp(*ip))
fprintf(stderr,"ERROR: unable to add ip address %s" ZT_EOL_S, ip->toString().c_str());
}
+#endif
}
-
n.managedIps.swap(newManagedIps);
}