diff options
author | Simon Rozman <simon@rozman.si> | 2019-05-24 09:28:50 +0200 |
---|---|---|
committer | Simon Rozman <simon@rozman.si> | 2019-05-24 09:29:57 +0200 |
commit | 6a0a3a54067182aee4c2cb4c7ef7ac5aaf2fd961 (patch) | |
tree | f2278f9c28d443d198e2fdb7819753a4d9d5b682 | |
parent | 8fdcf5ee30d9576b5ddb163180f5d5506a349eea (diff) |
wintun: revise GetInterface()
- Make foreign interface found error numeric to ease condition
detection.
- Update GetInterface() documentation.
- Make tun.CreateTUN() quit when foreign interface found before
attempting to create a Wintun interface with a duplicate name.
Creation is futile.
Signed-off-by: Simon Rozman <simon@rozman.si>
-rw-r--r-- | tun/tun_windows.go | 2 | ||||
-rw-r--r-- | tun/wintun/wintun_windows.go | 7 |
2 files changed, 6 insertions, 3 deletions
diff --git a/tun/tun_windows.go b/tun/tun_windows.go index c17f6d1..b352cd1 100644 --- a/tun/tun_windows.go +++ b/tun/tun_windows.go @@ -71,6 +71,8 @@ func CreateTUN(ifname string) (TUNDevice, error) { if err != nil { return nil, fmt.Errorf("Unable to delete already existing Wintun interface: %v", err) } + } else if err == windows.ERROR_ALREADY_EXISTS { + return nil, fmt.Errorf("Foreign network interface with the same name exists") } wt, _, err = wintun.CreateInterface("WireGuard Tunnel Adapter", 0) if err != nil { diff --git a/tun/wintun/wintun_windows.go b/tun/wintun/wintun_windows.go index aea4ad1..7b99a50 100644 --- a/tun/wintun/wintun_windows.go +++ b/tun/wintun/wintun_windows.go @@ -89,8 +89,9 @@ func makeWintun(deviceInfoSet setupapi.DevInfo, deviceInfoData *setupapi.DevInfo // optional and can be 0. If a specific top-level window is not required, set // hwndParent to 0. // -// Function returns interface if found, or nil otherwise. If the interface is -// found but not Wintun-class, the function returns interface and an error. +// Function returns interface if found, or windows.ERROR_OBJECT_NOT_FOUND +// otherwise. If the interface is found but not Wintun-class, the function +// returns windows.ERROR_ALREADY_EXISTS. // func GetInterface(ifname string, hwndParent uintptr) (*Wintun, error) { // Create a list of network devices. @@ -164,7 +165,7 @@ func GetInterface(ifname string, hwndParent uintptr) (*Wintun, error) { } // This interface is not using Wintun driver. - return nil, errors.New("Foreign network interface with the same name exists") + return nil, windows.ERROR_ALREADY_EXISTS } } |