summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorGrant Limberg <grant.limberg@zerotier.com>2017-01-05 11:43:26 -0800
committerGrant Limberg <grant.limberg@zerotier.com>2017-01-05 11:43:26 -0800
commite2b1a7157e3ba7b3cb342582acbdeb22033d7b84 (patch)
tree38507f40e921d42534d39f103dc92923b6e1ce34 /service
parentaaf69d1aff59a244990e1c3c1de4ef6bf6ac6a3b (diff)
downloadinfinitytier-e2b1a7157e3ba7b3cb342582acbdeb22033d7b84.tar.gz
infinitytier-e2b1a7157e3ba7b3cb342582acbdeb22033d7b84.zip
Potential fix for routing issue on Windows
Move setting _initialized = true until after WindowsEthernetTap::threadMain() has actually created and brought up the adapter. Also in OneService::nodeVirtualNetworkConfigFunction(), wait up to 5 seconds for WindowsEthernatTap::isInitialized() to return true before attempting to configure the interface and managed routes. Without this, the adapter doesnt actually exist yet when trying to add routes
Diffstat (limited to 'service')
-rw-r--r--service/OneService.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/service/OneService.cpp b/service/OneService.cpp
index 3a7edacb..96b3a960 100644
--- a/service/OneService.cpp
+++ b/service/OneService.cpp
@@ -1666,6 +1666,16 @@ public:
case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE:
memcpy(&(n.config),nwc,sizeof(ZT_VirtualNetworkConfig));
if (n.tap) { // sanity check
+#ifdef __WINDOWS__
+ // wait for up to 5 seconds for the WindowsEthernetTap to actually be initialized
+ //
+ // without WindowsEthernetTap::isInitialized() returning true, the won't actually
+ // be online yet and setting managed routes on it will fail.
+ const int MAX_SLEEP_COUNT = 500;
+ for (int i = 0; !n.tap->isInitialized() && i < MAX_SLEEP_COUNT; i++) {
+ Sleep(10);
+ }
+#endif
syncManagedStuff(n,true,true);
} else {
_nets.erase(nwid);