diff --git a/tun/tun_windows.go b/tun/tun_windows.go index 6449974..5f4f22a 100644 --- a/tun/tun_windows.go +++ b/tun/tun_windows.go @@ -65,6 +65,11 @@ func CreateTUN(ifname string) (TUNDevice, error) { // Set interface name. (Ignore errors.) wt.SetInterfaceName(ifname) } + err = wt.FlushInterface() + if err != nil { + wt.DeleteInterface(0) + return nil, err + } signalNameUTF16, err := windows.UTF16PtrFromString(wt.SignalEventName()) if err != nil { diff --git a/tun/wintun/wintun_windows.go b/tun/wintun/wintun_windows.go index 6adbb94..b7d84fa 100644 --- a/tun/wintun/wintun_windows.go +++ b/tun/wintun/wintun_windows.go @@ -322,9 +322,18 @@ func (wintun *Wintun) DeleteInterface(hwndParent uintptr) (bool, bool, error) { return false, false, nil } -/// -/// checkReboot checks device install parameters if a system reboot is required. -/// +// +// FlushInterface removes all properties from the interface and gives it only a very +// vanilla IPv4 and IPv6 configuration with no addresses of any sort assigned. +// +func (wintun *Wintun) FlushInterface() error { + //TODO: implement me! + return nil +} + +// +// checkReboot checks device install parameters if a system reboot is required. +// func checkReboot(deviceInfoSet setupapi.DevInfo, deviceInfoData *setupapi.SP_DEVINFO_DATA) (bool, error) { devInstallParams, err := deviceInfoSet.GetDeviceInstallParams(deviceInfoData) if err != nil { @@ -458,4 +467,4 @@ func (wintun *Wintun) SignalEventName() string { func (wintun *Wintun) DataFileName() string { return fmt.Sprintf("\\\\.\\Global\\WINTUN_DEVICE_%s", guid.ToString((*windows.GUID)(wintun))) -} \ No newline at end of file +}