Explorar el Código

Restore managed ZT routes that are deleted or otherwise mangled locally (Attempted fix for ticket #600)

Joseph Henry hace 7 años
padre
commit
bbc39d7648
Se han modificado 1 ficheros con 21 adiciones y 0 borrados
  1. 21 0
      osdep/ManagedRoute.cpp

+ 21 - 0
osdep/ManagedRoute.cpp

@@ -477,6 +477,27 @@ bool ManagedRoute::sync()
 		}
 	}
 
+	// Detect routes previously applied by ZT that don't exist in the system's route list. Re-apply these.
+	// NOTE: The following block was added in reaction to the macOS High Sierra 10.13.2 disappearing 
+	// route issue. This comment should be removed once we're sure this block doesn't have any side-effects.
+	bool found;
+	std::vector<_RTE> currRoutes(_getRTEs(_target,false));
+	found = false;
+	for(std::vector<_RTE>::iterator r(currRoutes.begin());r!=currRoutes.end();++r) {
+		if(_target == r->target) {
+			found = true;
+			break;
+		}
+	}
+	if (!found) {
+		// erase _applied enteries
+		std::map<InetAddress, bool>::iterator rt;
+		rt = _applied.find(leftt);
+		_applied.erase(rt, _applied.end());
+		rt = _applied.find(rightt);
+		_applied.erase(rt, _applied.end());
+	}
+
 	if (!_applied.count(leftt)) {
 		_applied[leftt] = false; // not ifscoped
 		_routeCmd("add",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device);