Don't actually "power cycle" the interface except on startup. Doing that after we're running could lose IP configuration.

This commit is contained in:
Adam Ierymenko 2015-05-20 14:21:14 -07:00
parent 0caac25d28
commit 6fc090eb00

View File

@ -589,16 +589,20 @@ void WindowsEthernetTap::threadMain()
Utils::snprintf(tapPath,sizeof(tapPath),"\\\\.\\Global\\%s.tap",_netCfgInstanceId.c_str());
int prevTapResetStatus = _systemTapResetStatus;
bool throwOneAway = true; // "Power cycle" the network port once on startup, because Windows...
bool throwOneAway = true; // Restart once on startup, because Windows.
bool powerCycle = true; // If true, "power cycle" the device, because Windows.
while (_run) {
_disableTapDevice();
Sleep(500);
_enableTapDevice();
Sleep(500);
if (powerCycle) {
_disableTapDevice();
Sleep(500);
_enableTapDevice();
Sleep(500);
}
_tap = CreateFileA(tapPath,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM|FILE_FLAG_OVERLAPPED,NULL);
if (_tap == INVALID_HANDLE_VALUE) {
fprintf(stderr,"Error opening %s -- retrying.\r\n",tapPath);
powerCycle = true;
continue;
}
@ -700,6 +704,7 @@ void WindowsEthernetTap::threadMain()
bool writeInProgress = false;
while (_run) {
if ((prevTapResetStatus != _systemTapResetStatus)||(throwOneAway)) {
powerCycle = throwOneAway;
throwOneAway = false;
prevTapResetStatus = _systemTapResetStatus;
break; // this will cause us to close and reopen the tap