summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)Author
2020-11-06device: format a few thingsJason A. Donenfeld
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-27tun: use SockaddrCtl from golang.org/x/sys/unix on macOSTobias Klauser
Direct syscalls using unix.Syscall(unix.SYS_*, ...) are discouraged on macOS and might not be supported in future versions. Switch to use unix.Connect with unix.SockaddrCtl instead. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-27tun: use Ioctl{Get,Set}IfreqMTU from golang.org/x/sys/unix on macOSTobias Klauser
Direct syscalls using unix.Syscall(unix.SYS_*, ...) are discouraged on macOS and might not be supported in future versions. Switch to use unix.Ioctl{Get,Set}IfreqMTU to get and set an interface's MTU. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-27tun: use IoctlCtlInfo from golang.org/x/sys/unix on macOSTobias Klauser
Direct syscalls using unix.Syscall(unix.SYS_*, ...) are discouraged on macOS and might not be supported in future versions. Switch to use unix.IoctlCtlInfo to get the kernel control info. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-27tun: use GetsockoptString in (*NativeTun).Name on macOSTobias Klauser
Direct syscalls using unix.Syscall(unix.SYS_*, ...) are discouraged on macOS and might not be supported in future versions. Instead, use the existing unix.GetsockoptString wrapper to get the interface name. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-27go.mod: bump golang.org/x/sys to latest versionTobias Klauser
This adds the fixes for golang/go#41868 which are needed to build wireguard without direct syscalls on macOS. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-21tun/wintun/registry: fix Go 1.15 race/checkptr failureBrad Fitzpatrick
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com> [Jason: ran go mod tidy.] Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-20Makefile: Add test targetFrank Werner
Signed-off-by: Frank Werner <mail@hb9fxq.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-14replay: minor API changes to more idiomatic GoRiobard Zhan
Signed-off-by: Riobard Zhan <me@riobard.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-14replay: clean up internals and better documentationRiobard Zhan
Signed-off-by: Riobard Zhan <me@riobard.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-10-14device: remove global for roaming escape hatchJason A. Donenfeld
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-09-07replay: divide by bits-per-byteJason A. Donenfeld
Bits / Bytes-per-Word misses the step of also dividing by Bits-per-Byte, which we need in order for this to make sense. Reported-by: Riobard Zhan <me@riobard.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-07-31device: get free port when testingSina Siadat
Signed-off-by: Sina Siadat <siadat@gmail.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-07-14device: remove bindsocketshim.goDavid Crawshaw
Both wireguard-windows and wireguard-android access Bind directly for these methods now. Signed-off-by: David Crawshaw <crawshaw@tailscale.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-07-15device: remove some unnecessary unsafeBrad Fitzpatrick
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2020-07-13device: use RTMGRP_IPV4_ROUTE to specify multicast groups maskTobias Klauser
Use the RTMGRP_IPV4_ROUTE const from x/sys/unix instead of using the corresponding RTNLGRP_IPV4_ROUTE const to create the multicast groups mask. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-07-04device: wait for routines to stop before removing peersDmytro Shynkevych
Peers are currently removed after Device's goroutines are signaled to stop, but without waiting for them to actually do so, which is racy. For example, RoutineHandshake may be in Peer.SendKeepalive when the corresponding peer is removed, which closes its nonce channel. This causes a send on a closed channel, as observed in tailscale/tailscale#487. This patch seems to be the correct synchronizing action: Peer's goroutines are receivers and handle channel closure gracefully, so Device's goroutines are the ones that should be fully stopped first. Signed-Off-By: Dmytro Shynkevych <dmytro@tailscale.com>
2020-06-22device: export Bind and remove socketfd shims for androidDavid Crawshaw
Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2020-06-22ipc: add comment about socketDirectory linker override on androidDavid Crawshaw
Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2020-06-22conn: add comments saying what uses these interfacesDavid Crawshaw
Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2020-06-07device: do not include sticky sockets on androidJason A. Donenfeld
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-06-07conn: unbreak boundif on androidJason A. Donenfeld
Another thing never tested ever. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-06-07conn: remove useless commentJason A. Donenfeld
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-06-07conn: fix windows situation with boundifJason A. Donenfeld
This was evidently never tested before committing. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-05-19replay: account for fqcodel reorderingJason A. Donenfeld
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-05-18device: rework padding calculation and don't shadow paddedSizeJason A. Donenfeld
Reported-by: Jayakumar S <jayakumar82.s@gmail.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-05-06tai64n: make the test deterministicDmytro Shynkevych
In the presence of preemption, the current test may fail transiently. This uses static test data instead to ensure consistent behavior. Signed-off-by: Dmytro Shynkevych <dmytro@tailscale.com>
2020-05-02main: now that we're upstreamed, relax Linux warningJason A. Donenfeld
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-05-02README: specify go 1.13Jason A. Donenfeld
Due to the use of the new errors module, we now require at least 1.13 instead of 1.12. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-05-02global: update header comments and modulesJason A. Donenfeld
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-05-02ipc: deduplicate some unix-specific codeDavid Crawshaw
Cleans up and splits out UAPIOpen to its own file. Signed-off-by: David Crawshaw <crawshaw@tailscale.com> [zx2c4: changed const to var for socketDirectory] Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-05-02ipc: remove unnecessary error checkDavid Crawshaw
os.MkdirAll never returns an os.IsExist error. Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2020-05-02device: use atomic access for unlocked keypair.nextJason A. Donenfeld
Go's GC semantics might not always guarantee the safety of this, and the race detector gets upset too, so instead we wrap this all in atomic accessors. Reported-by: David Anderson <danderson@tailscale.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-05-02wintun: make remaining HWID comparisons case insensitiveSimon Rozman
c85e4a410f27986a2967a49c0155633c716bf3ca introduced preliminary HWID checking to speed up Wintun adapter enumeration. However, all HWID are case insensitive by Windows convention. Furthermore, a device might have multiple HWIDs. When DevInfo's DeviceRegistryProperty(SPDRP_HARDWAREID) method returns []string, all strings returned should be checked against given hardware ID. This issue was discovered when researching Wintun and wireguard-go on Windows 10 ARM64. The Wintun adapter was created using devcon.exe utility with "wintun" hardware ID, causing wireguard-go fail to enumerate the adapter properly. Signed-off-by: Simon Rozman <simon@rozman.si>
2020-05-02setupapi: extend struct size constant definitions for arm(64)Simon Rozman
Signed-off-by: Simon Rozman <simon@rozman.si>
2020-05-02device: add debug logs describing handshake rejectionAvery Pennarun
Useful in testing when bad network stacks repeat or batch large numbers of packets. Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
2020-05-02tun: return a better error message if /dev/net/tun doesn't existBrad Fitzpatrick
It was just returning "no such file or directory" (the String of the syscall.Errno returned by CreateTUN). Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2020-05-02device: return generic error from Ipc{Get,Set}Operation.David Anderson
This makes uapi.go's public API conform to Go style in terms of error types. Signed-off-by: David Anderson <danderson@tailscale.com>
2020-05-02tun: NetlinkListener: don't send EventDown before sending EventUpAvery Pennarun
This works around a startup race condition when competing with HackListener, which is trying to do the same job. If HackListener detects that the tundev is running while there is still an event in the netlink queue that says it isn't running, then the device receives a string of events like EventUp (HackListener) EventDown (NetlinkListener) EventUp (NetlinkListener) Unfortunately, after the first EventDown, the device stops itself, thinking incorrectly that the administrator has downed its tundev. The device is ignoring the initial EventDown anyway, so just don't emit it. Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
2020-05-02device: give handshake state a typeDavid Crawshaw
And unexport handshake constants. Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2020-05-02tuntest: split out testing packageDavid Crawshaw
This code is useful to other packages writing tests. Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2020-05-02tun: fix data race on name fieldBrad Fitzpatrick
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2020-05-02tun: remove unused isUp methodBrad Fitzpatrick
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2020-05-02conn: introduce new package that splits out the Bind and Endpoint typesDavid Crawshaw
The sticky socket code stays in the device package for now, as it reaches deeply into the peer list. This is the first step in an effort to split some code out of the very busy device package. Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2020-05-02wintun: split error message for create vs open namespace.Avery Pennarun
Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
2020-05-02device: add test to ensure Peer fields are safe for atomic access on 32-bitDavid Anderson
Adds a test that will fail consistently on 32-bit platforms if the struct ever changes again to violate the rules. This is likely not needed because unaligned access crashes reliably, but this will reliably fail even if tests accidentally pass due to lucky alignment. Signed-Off-By: David Anderson <danderson@tailscale.com>
2020-03-30rwcancel: no-op builds for windows and darwinDavid Crawshaw
This lets us include the package on those platforms in a followup commit where we split out a conn package from device. It also lets us run `go test ./...` when developing on macOS. Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2020-03-30ratelimiter: use a fake clock in tests and style cleanupsDavid Crawshaw
The existing test would occasionally flake out with: --- FAIL: TestRatelimiter (0.12s) ratelimiter_test.go:99: Test failed for 127.0.0.1 , on: 7 ( not having refilled enough ) expected: false got: true FAIL FAIL golang.zx2c4.com/wireguard/ratelimiter 0.171s The fake clock also means the tests run much faster, so testing this package with -count=1000 now takes < 100ms. While here, several style cleanups. The most significant one is unembeding the sync.Mutex fields in the rate limiter objects. Embedded as they were, the lock methods were accessible outside the ratelimiter package. As they aren't needed externally, keep them internal to make them easier to reason about. Passes `go test -race -count=10000 ./ratelimiter` Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
2020-03-20version: bump snapshotdmwg-0.0.1Jason A. Donenfeld
2020-03-17noise: unify zero checking of ecdhJason A. Donenfeld