aboutsummaryrefslogtreecommitdiffstats
path: root/device/uapi.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-01-27 18:13:53 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2021-01-27 18:38:27 +0100
commit1b092ce584cbee0f86f3e25b5498870c8ca96652 (patch)
treef8f7119546aafab5d48f6dd9078bfbf18a753b1a /device/uapi.go
parenttun: use %w for errors on linux (diff)
downloadwireguard-go-1b092ce584cbee0f86f3e25b5498870c8ca96652.tar.xz
wireguard-go-1b092ce584cbee0f86f3e25b5498870c8ca96652.zip
device: get rid of nonce routine
This moves to a simple queue with no routine processing it, to reduce scheduler pressure. This splits latency in half! benchmark old ns/op new ns/op delta BenchmarkThroughput-16 2394 2364 -1.25% BenchmarkLatency-16 259652 120810 -53.47% Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'device/uapi.go')
-rw-r--r--device/uapi.go8
1 files changed, 8 insertions, 0 deletions
diff --git a/device/uapi.go b/device/uapi.go
index cbfe25e..bfef877 100644
--- a/device/uapi.go
+++ b/device/uapi.go
@@ -156,6 +156,7 @@ func (device *Device) IpcSetOperation(r io.Reader) (err error) {
if deviceConfig {
deviceConfig = false
}
+ peer.handlePostConfig()
// Load/create the peer we are now configuring.
err := device.handlePublicKeyLine(peer, value)
if err != nil {
@@ -174,6 +175,7 @@ func (device *Device) IpcSetOperation(r io.Reader) (err error) {
return err
}
}
+ peer.handlePostConfig()
if err := scanner.Err(); err != nil {
return ipcErrorf(ipc.IpcErrorIO, "failed to read input: %w", err)
@@ -241,6 +243,12 @@ type ipcSetPeer struct {
created bool // new reports whether this is a newly created peer
}
+func (peer *ipcSetPeer) handlePostConfig() {
+ if peer.Peer != nil && !peer.dummy && peer.Peer.device.isUp.Get() {
+ peer.SendStagedPackets()
+ }
+}
+
func (device *Device) handlePublicKeyLine(peer *ipcSetPeer, value string) error {
// Load/create the peer we are configuring.
var publicKey NoisePublicKey