aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tunnel/service.go13
1 files changed, 12 insertions, 1 deletions
diff --git a/tunnel/service.go b/tunnel/service.go
index 4b02a503..36825665 100644
--- a/tunnel/service.go
+++ b/tunnel/service.go
@@ -14,6 +14,7 @@ import (
"runtime"
"time"
+ "golang.org/x/sys/windows"
"golang.org/x/sys/windows/svc"
"golang.org/x/sys/windows/svc/mgr"
"golang.zx2c4.com/wireguard/device"
@@ -151,7 +152,17 @@ func (service *tunnelService) Execute(args []string, r <-chan svc.ChangeRequest,
}
log.Println("Creating Wintun interface")
- wintun, err := tun.CreateTUNWithRequestedGUID(config.Name, deterministicGUID(config), 0)
+ var wintun tun.Device
+ for i := 0; i < 5; i++ {
+ if i > 0 {
+ time.Sleep(time.Second)
+ log.Printf("Retrying Wintun creation after failure because system just booted (T+%v): %v", windows.DurationSinceBoot(), err)
+ }
+ wintun, err = tun.CreateTUNWithRequestedGUID(config.Name, deterministicGUID(config), 0)
+ if err == nil || windows.DurationSinceBoot() > time.Minute*4 {
+ break
+ }
+ }
if err != nil {
serviceError = services.ErrorCreateWintun
return