]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
wintun: don't try to flush interface, but rather delete
authorJason A. Donenfeld <Jason@zx2c4.com>
Fri, 17 May 2019 14:06:02 +0000 (16:06 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 17 May 2019 14:06:02 +0000 (16:06 +0200)
tun/tun_windows.go
tun/wintun/wintun_windows.go

index 4ddf5fe05f052d3a2b67901a1fb4c6ad2771c260..6215cc7b3dabd6d122b0612cb1b6ebbc6c38d3b6 100644 (file)
@@ -65,30 +65,22 @@ func CreateTUN(ifname string) (TUNDevice, error) {
 
        // Does an interface with this name already exist?
        wt, err = wintun.GetInterface(ifname, 0)
-       if wt == nil {
-               // Interface does not exist or an error occurred. Create one.
-               wt, _, err = wintun.CreateInterface("WireGuard Tunnel Adapter", 0)
+       if err == nil {
+               // If so, we delete it, in case it has weird residual configuration.
+               _, _, err = wt.DeleteInterface(0)
                if err != nil {
-                       return nil, fmt.Errorf("wintun.CreateInterface: %v", err)
+                       return nil, fmt.Errorf("Unable to delete already existing Wintun interface: %v", err)
                }
-       } else if err != nil {
-               // Foreign interface with the same name found.
-               // We could create a Wintun interface under a temporary name. But, should our
-               // process die without deleting this interface first, the interface would remain
-               // orphaned.
-               return nil, fmt.Errorf("wintun.GetInterface: %v", err)
        }
-
-       err = wt.SetInterfaceName(ifname)
+       wt, _, err = wintun.CreateInterface("WireGuard Tunnel Adapter", 0)
        if err != nil {
-               wt.DeleteInterface(0)
-               return nil, fmt.Errorf("wintun.SetInterfaceName: %v", err)
+               return nil, fmt.Errorf("Unable to create Wintun interface: %v", err)
        }
 
-       err = wt.FlushInterface()
+       err = wt.SetInterfaceName(ifname)
        if err != nil {
                wt.DeleteInterface(0)
-               return nil, fmt.Errorf("wintun.FlushInterface: %v", err)
+               return nil, fmt.Errorf("Unable to set name of Wintun interface: %v", err)
        }
 
        return &NativeTun{
index 6d9c676904ebc0b195bd69b798f63f9515483328..1eb0dd2bde1c005393bb1198c4c65d8f2143452a 100644 (file)
@@ -470,15 +470,6 @@ func (wintun *Wintun) DeleteInterface(hwndParent uintptr) (bool, bool, error) {
        return false, false, nil
 }
 
-//
-// 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.
 //