From bbc39d76487f197cbdba84d8ca53a991f917e0fe Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 18 Dec 2017 15:05:19 -0800 Subject: [PATCH] Restore managed ZT routes that are deleted or otherwise mangled locally (Attempted fix for ticket #600) --- osdep/ManagedRoute.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/osdep/ManagedRoute.cpp b/osdep/ManagedRoute.cpp index 5b5bf5410..2da4cd2b7 100644 --- a/osdep/ManagedRoute.cpp +++ b/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::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);