Browse Source

Route re-add patch for linux build on Synology devices

Joseph Henry 8 years ago
parent
commit
b5b335a6f8
3 changed files with 12 additions and 1 deletions
  1. 4 0
      make-linux.mk
  2. 2 0
      osdep/LinuxEthernetTap.cpp
  3. 6 1
      service/OneService.cpp

+ 4 - 0
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

+ 2 - 0
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) {

+ 6 - 1
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);
 		}