mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2024-12-21 22:07:49 +00:00
Support MTU reconfigure for Windows.
This commit is contained in:
parent
b55422a528
commit
d5ed025871
@ -875,6 +875,14 @@ void WindowsEthernetTap::scanMulticastGroups(std::vector<MulticastGroup> &added,
|
||||
void WindowsEthernetTap::setMtu(unsigned int mtu)
|
||||
{
|
||||
if (mtu != _mtu) {
|
||||
_mtu = mtu;
|
||||
HKEY nwAdapters;
|
||||
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}", 0, KEY_READ | KEY_WRITE, &nwAdapters) == ERROR_SUCCESS) {
|
||||
char tmps[64];
|
||||
unsigned int tmpsl = Utils::snprintf(tmps, sizeof(tmps), "%d", mtu);
|
||||
RegSetKeyValueA(nwAdapters, _mySubkeyName.c_str(), "MTU", REG_SZ, tmps, tmpsl);
|
||||
RegCloseKey(nwAdapters);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1019,10 +1027,15 @@ void WindowsEthernetTap::threadMain()
|
||||
bool writeInProgress = false;
|
||||
ULONGLONG timeOfLastBorkCheck = GetTickCount64();
|
||||
_initialized = true;
|
||||
unsigned int oldmtu = _mtu;
|
||||
|
||||
while (_run) {
|
||||
DWORD waitResult = WaitForMultipleObjectsEx(writeInProgress ? 3 : 2,wait4,FALSE,2500,TRUE);
|
||||
if (!_run) break; // will also break outer while(_run)
|
||||
if (!_run) break; // will also break outer while(_run) since _run is false
|
||||
|
||||
// Check for changes in MTU and break to restart tap device to reconfigure in this case
|
||||
if (_mtu != oldmtu)
|
||||
break;
|
||||
|
||||
// Check for issues with adapter and close/reopen if any are detected. This
|
||||
// check fixes a while boatload of Windows adapter 'coma' issues after
|
||||
|
@ -131,7 +131,7 @@ private:
|
||||
void *_arg;
|
||||
MAC _mac;
|
||||
uint64_t _nwid;
|
||||
unsigned int _mtu;
|
||||
volatile unsigned int _mtu;
|
||||
Thread _thread;
|
||||
|
||||
volatile HANDLE _tap;
|
||||
|
Loading…
Reference in New Issue
Block a user