More tap work -- DHCP configuration and such.

This commit is contained in:
Adam Ierymenko
2013-08-27 15:55:32 -04:00
parent 1c88a518cf
commit cd907a7662
4 changed files with 71 additions and 0 deletions

View File

@ -739,6 +739,8 @@ EthernetTap::EthernetTap(
_r(renv),
_handler(handler),
_arg(arg),
_dhcp(false),
_dhcp6(false),
_tap(INVALID_HANDLE_VALUE),
_injectSemaphore(INVALID_HANDLE_VALUE),
_run(true)
@ -901,6 +903,9 @@ EthernetTap::EthernetTap(
throw std::runtime_error("unable to convert instance ID GUID to native GUID (invalid NetCfgInstanceId in registry?)");
}
setDhcpEnabled(false);
setDhcp6Enabled(false);
// Disable and enable interface to ensure registry settings take effect
{
STARTUPINFOA startupInfo;
@ -989,6 +994,34 @@ void EthernetTap::whack()
{
}
bool EthernetTap::setDhcpEnabled(bool dhcp)
{
HKEY tcpIpInterfaces;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\services\\Tcpip\\Parameters\\Interfaces",0,KEY_READ|KEY_WRITE,&tcpIpInterfaces) == ERROR_SUCCESS) {
_dhcp = dhcp;
DWORD enable = (dhcp ? 1 : 0);
RegSetKeyValueA(tcpIpInterfaces,_myDeviceInstanceId.c_str(),"EnableDHCP",REG_DWORD,&enable,sizeof(enable));
RegCloseKey(tcpIpInterfaces);
} else _dhcp = false;
return _dhcp;
}
bool EthernetTap::setDhcp6Enabled(bool dhcp)
{
// TODO
return _dhcp6;
}
void EthernetTap::setDisplayName(const char *dn)
{
HKEY ifp;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE,(std::string("SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\") + _myDeviceInstanceId).c_str(),0,KEY_READ|KEY_WRITE,&ifp) == ERROR_SUCCESS) {
RegSetKeyValueA(ifp,"Connection","Name",REG_SZ,(LPCVOID)dn,strlen(dn)+1);
RegCloseKey(ifp);
}
}
bool EthernetTap::addIP(const InetAddress &ip)
{
Mutex::Lock _l(_ips_m);