diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-10-12 00:28:36 -0600 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-10-12 00:28:36 -0600 |
commit | 838c6f1c7b58b0e0c217495834410ff0d3b5eb65 (patch) | |
tree | 92fb9e0a495b5d0b1a761ccdb743f74ac54154ee | |
parent | go-patches: make unsafe.Slice fast (diff) | |
download | wireguard-windows-838c6f1c7b58b0e0c217495834410ff0d3b5eb65.tar.xz wireguard-windows-838c6f1c7b58b0e0c217495834410ff0d3b5eb65.zip |
manager: use newer wireguard-go APIs
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r-- | driver/driver_windows.go | 14 | ||||
-rw-r--r-- | go.mod | 16 | ||||
-rw-r--r-- | go.mod.master | 2 | ||||
-rw-r--r-- | go.sum | 46 | ||||
-rw-r--r-- | main.go | 15 | ||||
-rw-r--r-- | manager/interfacecleanup.go | 55 | ||||
-rw-r--r-- | manager/ipc_server.go | 6 | ||||
-rw-r--r-- | manager/service.go | 7 |
8 files changed, 51 insertions, 110 deletions
diff --git a/driver/driver_windows.go b/driver/driver_windows.go index 3bc838bf..42ba3e2e 100644 --- a/driver/driver_windows.go +++ b/driver/driver_windows.go @@ -12,7 +12,6 @@ import ( "unsafe" "golang.org/x/sys/windows" - "golang.zx2c4.com/wireguard/windows/ringlogger" "golang.zx2c4.com/wireguard/windows/tunnel/winipcfg" ) @@ -32,7 +31,7 @@ type Adapter struct { } var ( - modwireguard = newLazyDLL("wireguard.dll", setupLogger) + modwireguard = newLazyDLL("wireguard.dll", setupLogger) procWireGuardCreateAdapter = modwireguard.NewProc("WireGuardCreateAdapter") procWireGuardOpenAdapter = modwireguard.NewProc("WireGuardOpenAdapter") procWireGuardCloseAdapter = modwireguard.NewProc("WireGuardCloseAdapter") @@ -42,11 +41,13 @@ var ( procWireGuardSetAdapterLogging = modwireguard.NewProc("WireGuardSetAdapterLogging") ) +type TimestampedWriter interface { + WriteWithTimestamp(p []byte, ts int64) (n int, err error) +} + func logMessage(level loggerLevel, timestamp uint64, msg *uint16) int { - // This is a filthy hack that breaks layers of encapsulation and also introduces - // an unfortunate dependency of this package. - if rl, ok := log.Default().Writer().(*ringlogger.Ringlogger); ok { - rl.WriteWithTimestamp([]byte(log.Default().Prefix()+windows.UTF16PtrToString(msg)), (int64(timestamp)-116444736000000000)*100) + if tw, ok := log.Default().Writer().(TimestampedWriter); ok { + tw.WriteWithTimestamp([]byte(log.Default().Prefix()+windows.UTF16PtrToString(msg)), (int64(timestamp)-116444736000000000)*100) } else { log.Println(windows.UTF16PtrToString(msg)) } @@ -129,7 +130,6 @@ func Uninstall() (err error) { err = e1 } return - } type AdapterLogState uint32 @@ -5,11 +5,17 @@ go 1.17 require ( github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 github.com/lxn/win v0.0.0-20210218163916-a377121e959e - golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 - golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f - golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 - golang.org/x/text v0.3.7 - golang.zx2c4.com/wireguard v0.0.0-20210905140043-2ef39d47540c + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 + golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0 + golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac + golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b + golang.zx2c4.com/wireguard v0.0.0-20211012062646-82d2aa87aa62 +) + +require ( + golang.org/x/mod v0.4.2 // indirect + golang.org/x/tools v0.1.7 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect ) replace ( diff --git a/go.mod.master b/go.mod.master index a61c1ed9..ecda4c13 100644 --- a/go.mod.master +++ b/go.mod.master @@ -1,6 +1,6 @@ module golang.zx2c4.com/wireguard/windows -go 1.16 +go 1.17 require ( github.com/lxn/walk latest @@ -1,31 +1,31 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f h1:w6wWR0H+nyVpbSAQbzVEIACVyr/h8l/BEkY6Sokc7Eg= -golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0 h1:qOfNqBm5gk93LjGZo1MJaKY6Bph39zOKz1Hz2ogHj1w= +golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 h1:GkvMjFtXUmahfDtashnc1mnrCtuBVcwse5QV2lUk/tI= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac h1:oN6lz7iLW/YC7un8pq+9bOLyXrprv2+DKfkJY+2LJJw= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e h1:FDhOuMEY4JVRztM/gsbk+IKUQ8kj74bxZrgw87eMMVc= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.zx2c4.com/wireguard v0.0.0-20210905140043-2ef39d47540c h1:IsAez/yRA23H/i9A02IHbYnmtVOs7DsP3aVP2cu5SNE= -golang.zx2c4.com/wireguard v0.0.0-20210905140043-2ef39d47540c/go.mod h1:laHzsbfMhGSobUmruXWAyMKKHSqvIcrqZJMyHD+/3O8= +golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b h1:NXqSWXSRUSCaFuvitrWtU169I3876zRTalMRbfd6LL0= +golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.zx2c4.com/wireguard v0.0.0-20211012062646-82d2aa87aa62 h1:c39XZipaMOiSSqTCpqJmYgnzscTBGLFPgMmGvubmZ6E= +golang.zx2c4.com/wireguard v0.0.0-20211012062646-82d2aa87aa62/go.mod h1:id8Oh3eCCmpj9uVGWVjsUAl6UPX5ysMLzu6QxJU2UOU= golang.zx2c4.com/wireguard/windows v0.0.0-20210121140954-e7fc19d483bd h1:kAUzMAITME2MCtrXBaUa9P4tndiXGWO674k9gn6ZR28= golang.zx2c4.com/wireguard/windows v0.0.0-20210121140954-e7fc19d483bd/go.mod h1:Y+FYqVFaQO6a+1uigm0N0GiuaZrLEaBxEiJ8tfH9sMQ= golang.zx2c4.com/wireguard/windows v0.0.0-20210224134948-620c54ef6199 h1:ogXKLng/Myrt2odYTkleySGzQj/GWg9GV1AQ8P9NnU4= @@ -17,7 +17,7 @@ import ( "time" "golang.org/x/sys/windows" - "golang.zx2c4.com/wireguard/tun" + "golang.zx2c4.com/wireguard/tun/wintun" "golang.zx2c4.com/wireguard/windows/conf" "golang.zx2c4.com/wireguard/windows/driver" @@ -319,14 +319,13 @@ func main() { if len(os.Args) != 2 { usage() } - var err error - err = driver.Uninstall() - if err != nil { - fatal(err) + err1 := driver.Uninstall() + err2 := wintun.Uninstall() + if err1 != nil { + fatal(err1) } - _, err = tun.WintunPool.DeleteDriver() - if err != nil { - fatal(err) + if err2 != nil { + fatal(err2) } return } diff --git a/manager/interfacecleanup.go b/manager/interfacecleanup.go deleted file mode 100644 index 96c4aad6..00000000 --- a/manager/interfacecleanup.go +++ /dev/null @@ -1,55 +0,0 @@ -/* SPDX-License-Identifier: MIT - * - * Copyright (C) 2019-2021 WireGuard LLC. All Rights Reserved. - */ - -package manager - -import ( - "log" - - "golang.org/x/sys/windows" - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/mgr" - "golang.zx2c4.com/wireguard/tun" - "golang.zx2c4.com/wireguard/tun/wintun" - "golang.zx2c4.com/wireguard/windows/services" -) - -func cleanupStaleWintunInterfaces() { - m, err := mgr.Connect() - if err != nil { - return - } - defer m.Disconnect() - - tun.WintunPool.DeleteMatchingAdapters(func(adapter *wintun.Adapter) bool { - interfaceName, err := adapter.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 - }, false) -} diff --git a/manager/ipc_server.go b/manager/ipc_server.go index a8c8064b..e88ab7e4 100644 --- a/manager/ipc_server.go +++ b/manager/ipc_server.go @@ -148,9 +148,6 @@ func (s *ManagerService) Start(tunnelName string) error { } } }() - 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 { @@ -160,9 +157,6 @@ func (s *ManagerService) Start(tunnelName string) error { } func (s *ManagerService) Stop(tunnelName string) error { - 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 71be634d..22188ade 100644 --- a/manager/service.go +++ b/manager/service.go @@ -17,7 +17,7 @@ import ( "golang.org/x/sys/windows" "golang.org/x/sys/windows/svc" - "golang.zx2c4.com/wireguard/tun" + "golang.zx2c4.com/wireguard/tun/wintun" "golang.zx2c4.com/wireguard/windows/conf" "golang.zx2c4.com/wireguard/windows/elevate" @@ -261,12 +261,9 @@ func (service *managerService) Execute(args []string, r <-chan svc.ChangeRequest }() } - if conf.AdminBool("UseUserspaceImplementation") { - time.AfterFunc(time.Second*10, cleanupStaleWintunInterfaces) - } time.AfterFunc(time.Second*15, func() { if !conf.AdminBool("UseUserspaceImplementation") { - tun.WintunPool.DeleteDriver() + wintun.Uninstall() } }) go checkForUpdates() |