aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/manager
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-10-05 23:56:27 -0600
committerJason A. Donenfeld <Jason@zx2c4.com>2021-10-05 23:56:27 -0600
commitb9e3a703e8ab176dac0e22a74354e9627277c302 (patch)
treeb03cc7a3ac2c11b0ff7f9b4f960a843ceea9594c /manager
parentdocs: add example for task scheduler (diff)
downloadwireguard-windows-b9e3a703e8ab176dac0e22a74354e9627277c302.tar.xz
wireguard-windows-b9e3a703e8ab176dac0e22a74354e9627277c302.zip
driver: use new API
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'manager')
-rw-r--r--manager/interfacecleanup.go33
-rw-r--r--manager/ipc_driver.go2
-rw-r--r--manager/ipc_server.go10
-rw-r--r--manager/service.go4
4 files changed, 11 insertions, 38 deletions
diff --git a/manager/interfacecleanup.go b/manager/interfacecleanup.go
index 007c94d7..96c4aad6 100644
--- a/manager/interfacecleanup.go
+++ b/manager/interfacecleanup.go
@@ -13,47 +13,16 @@ import (
"golang.org/x/sys/windows/svc/mgr"
"golang.zx2c4.com/wireguard/tun"
"golang.zx2c4.com/wireguard/tun/wintun"
- "golang.zx2c4.com/wireguard/windows/driver"
"golang.zx2c4.com/wireguard/windows/services"
)
-func cleanupStaleNetworkInterfaces() {
+func cleanupStaleWintunInterfaces() {
m, err := mgr.Connect()
if err != nil {
return
}
defer m.Disconnect()
- driver.DefaultPool.DeleteMatchingAdapters(func(wintun *driver.Adapter) bool {
- interfaceName, err := wintun.Name()
- if err != nil {
- log.Printf("Removing network adapter because determining interface name failed: %v", err)
- return true
- }
- serviceName, err := services.ServiceNameOfTunnel(interfaceName)
- if err != nil {
- log.Printf("Removing network adapter ‘%s’ because determining tunnel service name failed: %v", interfaceName, err)
- return true
- }
- service, err := m.OpenService(serviceName)
- if err == windows.ERROR_SERVICE_DOES_NOT_EXIST {
- log.Printf("Removing network adapter ‘%s’ because no service for it exists", interfaceName)
- return true
- } else if err != nil {
- return false
- }
- defer service.Close()
- status, err := service.Query()
- if err != nil {
- return false
- }
- if status.State == svc.Stopped {
- log.Printf("Removing network adapter ‘%s’ because its service is stopped", interfaceName)
- return true
- }
- return false
- })
-
tun.WintunPool.DeleteMatchingAdapters(func(adapter *wintun.Adapter) bool {
interfaceName, err := adapter.Name()
if err != nil {
diff --git a/manager/ipc_driver.go b/manager/ipc_driver.go
index dae213de..2155207b 100644
--- a/manager/ipc_driver.go
+++ b/manager/ipc_driver.go
@@ -37,7 +37,7 @@ func findDriverAdapter(tunnelName string) (*lockedDriverAdapter, error) {
}
driverAdapter = &lockedDriverAdapter{}
var err error
- driverAdapter.Adapter, err = driver.DefaultPool.OpenAdapter(tunnelName)
+ driverAdapter.Adapter, err = driver.OpenAdapter(tunnelName)
if err != nil {
return nil, err
}
diff --git a/manager/ipc_server.go b/manager/ipc_server.go
index 48db057e..a8c8064b 100644
--- a/manager/ipc_server.go
+++ b/manager/ipc_server.go
@@ -148,8 +148,9 @@ func (s *ManagerService) Start(tunnelName string) error {
}
}
}()
- time.AfterFunc(time.Second*10, cleanupStaleNetworkInterfaces)
-
+ if conf.AdminBool("UseUserspaceImplementation") {
+ time.AfterFunc(time.Second*10, cleanupStaleWintunInterfaces)
+ }
// After the stop process has begun, but before it's finished, we install the new one.
path, err := c.Path()
if err != nil {
@@ -159,8 +160,9 @@ func (s *ManagerService) Start(tunnelName string) error {
}
func (s *ManagerService) Stop(tunnelName string) error {
- time.AfterFunc(time.Second*10, cleanupStaleNetworkInterfaces)
-
+ if conf.AdminBool("UseUserspaceImplementation") {
+ time.AfterFunc(time.Second*10, cleanupStaleWintunInterfaces)
+ }
err := UninstallTunnel(tunnelName)
if err == windows.ERROR_SERVICE_DOES_NOT_EXIST {
_, notExistsError := conf.LoadFromName(tunnelName)
diff --git a/manager/service.go b/manager/service.go
index 1deb50a4..2b553793 100644
--- a/manager/service.go
+++ b/manager/service.go
@@ -261,7 +261,9 @@ func (service *managerService) Execute(args []string, r <-chan svc.ChangeRequest
}()
}
- time.AfterFunc(time.Second*10, cleanupStaleNetworkInterfaces)
+ if conf.AdminBool("UseUserspaceImplementation") {
+ time.AfterFunc(time.Second*10, cleanupStaleWintunInterfaces)
+ }
time.AfterFunc(time.Second*15, func() {
if !conf.AdminBool("UseUserspaceImplementation") {
tun.WintunPool.DeleteDriver()