aboutsummaryrefslogtreecommitdiffstats
path: root/device/uapi.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-01-26 23:44:37 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2021-01-27 01:48:58 +0100
commit8cc99631d025f5013e40f8a5a7b3370bff1c577e (patch)
tree0ac01dbe4785fc450b73054759f537f92f34a364 /device/uapi.go
parentdevice: combine debug and info log levels into 'verbose' (diff)
downloadwireguard-go-8cc99631d025f5013e40f8a5a7b3370bff1c577e.tar.xz
wireguard-go-8cc99631d025f5013e40f8a5a7b3370bff1c577e.zip
device: use linked list for per-peer allowed-ip traversal
This makes the IpcGet method much faster. We also refactor the traversal API to use a callback so that we don't need to allocate at all. Avoiding allocations we do self-masking on insertion, which in turn means that split intermediate nodes require a copy of the bits. benchmark old ns/op new ns/op delta BenchmarkUAPIGet-16 3243 2659 -18.01% benchmark old allocs new allocs delta BenchmarkUAPIGet-16 35 30 -14.29% benchmark old bytes new bytes delta BenchmarkUAPIGet-16 1218 737 -39.49% This benchmark is good, though it's only for a pair of peers, each with only one allowedips. As this grows, the delta expands considerably. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'device/uapi.go')
-rw-r--r--device/uapi.go7
1 files changed, 4 insertions, 3 deletions
diff --git a/device/uapi.go b/device/uapi.go
index 148a7a2..cbfe25e 100644
--- a/device/uapi.go
+++ b/device/uapi.go
@@ -108,9 +108,10 @@ func (device *Device) IpcGetOperation(w io.Writer) error {
sendf("rx_bytes=%d", atomic.LoadUint64(&peer.stats.rxBytes))
sendf("persistent_keepalive_interval=%d", atomic.LoadUint32(&peer.persistentKeepaliveInterval))
- for _, ip := range device.allowedips.EntriesForPeer(peer) {
- sendf("allowed_ip=%s", ip.String())
- }
+ device.allowedips.EntriesForPeer(peer, func(ip net.IP, cidr uint) bool {
+ sendf("allowed_ip=%s/%d", ip.String(), cidr)
+ return true
+ })
}
}()