build: update tailscale.com to v1.103.0-pre.0.20260819232550-0e84b4a3a0a0

PR tailscale/tailscale#20646 changed the representation of DERP region
IDs from plain ints to a tailcfg.DERPRegionID type. This patch
requires that version of the tailscale.com library and updates our
code to also use the new type.

Updates: tailscale/tailscale#20165
(cherry picked from commit 79695ab51b)
This commit is contained in:
Simon Law authored and Kristoffer Dalby committed 2026-08-25 21:59:00 +02:00
1 parent 9ceb4511de
commit 3aece65014
17 files changed
+69 -69

No files matched your search

+5 -5
View File
@@ -18,7 +18,7 @@ require (
github.com/go-chi/chi/v5 v5.3.0 github.com/go-chi/chi/v5 v5.3.0
github.com/go-chi/metrics v0.1.1 github.com/go-chi/metrics v0.1.1
github.com/go-gormigrate/gormigrate/v2 v2.1.6 github.com/go-gormigrate/gormigrate/v2 v2.1.6
github.com/go-json-experiment/json v0.0.0-20260601182631-00ed12fed2a6 github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68
github.com/google/go-cmp v0.7.0 github.com/google/go-cmp v0.7.0
github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/jagottsicher/termcolor v1.0.2 github.com/jagottsicher/termcolor v1.0.2
@@ -44,7 +44,7 @@ require (
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
golang.org/x/crypto v0.54.0 golang.org/x/crypto v0.54.0
golang.org/x/exp v0.0.0-20260603202125-055de637280b golang.org/x/exp v0.0.0-20260603202125-055de637280b
golang.org/x/net v0.56.0 golang.org/x/net v0.57.1-0.20260729233039-99c3b0a8f463
golang.org/x/oauth2 v0.36.0 golang.org/x/oauth2 v0.36.0
golang.org/x/sync v0.22.0 golang.org/x/sync v0.22.0
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
@@ -70,7 +70,7 @@ require (
// go get modernc.org/libc@v1.55.3 modernc.org/sqlite@v1.33.1 // go get modernc.org/libc@v1.55.3 modernc.org/sqlite@v1.33.1
modernc.org/sqlite v1.52.0 modernc.org/sqlite v1.52.0
pgregory.net/rapid v1.3.0 pgregory.net/rapid v1.3.0
tailscale.com v1.103.0-pre tailscale.com v1.103.0-pre.0.20260819232550-0e84b4a3a0a0
tailscale.com/client/tailscale/v2 v2.9.0 tailscale.com/client/tailscale/v2 v2.9.0
zombiezen.com/go/postgrestest v1.0.1 zombiezen.com/go/postgrestest v1.0.1
) )
@@ -207,7 +207,7 @@ require (
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect
github.com/tailscale/setec v0.0.0-20260310221408-dcd97e42f251 // indirect github.com/tailscale/setec v0.0.0-20260310221408-dcd97e42f251 // indirect
github.com/tailscale/web-client-prebuilt v0.0.0-20251127225136-f19339b67368 // indirect github.com/tailscale/web-client-prebuilt v0.0.0-20251127225136-f19339b67368 // indirect
github.com/tailscale/wireguard-go v0.0.0-20260715223240-2e01ba5b00f0 // indirect github.com/tailscale/wireguard-go v0.0.0-20260813211458-aa425f19bcbf // indirect
github.com/toqueteos/webbrowser v1.2.0 // indirect github.com/toqueteos/webbrowser v1.2.0 // indirect
github.com/x448/float16 v0.8.4 // indirect github.com/x448/float16 v0.8.4 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
@@ -245,7 +245,7 @@ require (
// go.mod file for the gvisor.dev/gvisor version: // go.mod file for the gvisor.dev/gvisor version:
// https://github.com/tailscale/tailscale/blob/main/go.mod // https://github.com/tailscale/tailscale/blob/main/go.mod
gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8 // indirect gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8 // indirect
k8s.io/client-go v0.34.0 // indirect k8s.io/client-go v0.35.3 // indirect
// NOTE: keep in lockstep with modernc.org/sqlite; see the // NOTE: keep in lockstep with modernc.org/sqlite; see the
// upgrade note in the direct require block above. // upgrade note in the direct require block above.
+24 -24
View File
@@ -18,8 +18,8 @@ fyne.io/systray v1.11.1-0.20250812065214-4856ac3adc3c h1:km4PIleGtbbF1oxmFQuO93C
fyne.io/systray v1.11.1-0.20250812065214-4856ac3adc3c/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs= fyne.io/systray v1.11.1-0.20250812065214-4856ac3adc3c/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs=
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9 h1:1ltqoej5GtaWF8jaiA49HwsZD459jqm9YFz9ZtMFpQA= github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9 h1:1ltqoej5GtaWF8jaiA49HwsZD459jqm9YFz9ZtMFpQA=
github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I= github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I=
github.com/MarvinJWendt/testza v0.5.2 h1:53KDo64C1z/h/d/stCYCPY69bt/OSwjq5KpFNwi+zB4= github.com/MarvinJWendt/testza v0.5.2 h1:53KDo64C1z/h/d/stCYCPY69bt/OSwjq5KpFNwi+zB4=
@@ -45,8 +45,8 @@ github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
github.com/aws/aws-sdk-go-v2 v1.42.1 h1:9eOTgu1z/dVtYpNZ3/8/XbbaX0x/BqE3HUzAzs6K0ek= github.com/aws/aws-sdk-go-v2 v1.42.1 h1:9eOTgu1z/dVtYpNZ3/8/XbbaX0x/BqE3HUzAzs6K0ek=
github.com/aws/aws-sdk-go-v2 v1.42.1/go.mod h1:5pKeft2eJj+gElQ38Jqg4ibCqh+/AK33/0X3hip7IjM= github.com/aws/aws-sdk-go-v2 v1.42.1/go.mod h1:5pKeft2eJj+gElQ38Jqg4ibCqh+/AK33/0X3hip7IjM=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 h1:489krEF9xIGkOaaX3CE/Be2uWjiXrkCH6gUX+bZA/BU= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4/go.mod h1:IOAPF6oT9KCsceNTvvYMNHy0+kMF8akOjeDvPENWxp4= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI=
github.com/aws/aws-sdk-go-v2/config v1.32.17 h1:FpL4/758/diKwqbytU0prpuiu60fgXKUWCpDJtApclU= github.com/aws/aws-sdk-go-v2/config v1.32.17 h1:FpL4/758/diKwqbytU0prpuiu60fgXKUWCpDJtApclU=
github.com/aws/aws-sdk-go-v2/config v1.32.17/go.mod h1:OXqUMzgXytfoF9JaKkhrOYsyh72t9G+MJH8mMRaexOE= github.com/aws/aws-sdk-go-v2/config v1.32.17/go.mod h1:OXqUMzgXytfoF9JaKkhrOYsyh72t9G+MJH8mMRaexOE=
github.com/aws/aws-sdk-go-v2/credentials v1.19.16 h1:r3RJBuU7X9ibt8RHbMjWE6y60QbKBiII6wSrXnapxSU= github.com/aws/aws-sdk-go-v2/credentials v1.19.16 h1:r3RJBuU7X9ibt8RHbMjWE6y60QbKBiII6wSrXnapxSU=
@@ -61,14 +61,14 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 h1:OQqn11BtaYv1WLUowvcA30MpzIu
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24/go.mod h1:X5ZJyfwVrWA96GzPmUCWFQaEARPR7gCrpq2E92PJwAE= github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24/go.mod h1:X5ZJyfwVrWA96GzPmUCWFQaEARPR7gCrpq2E92PJwAE=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13 h1:mbRIur/BiHK6SKPjoBIXSE/hJ6g6JGRLuxQy1jGjlN4= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13 h1:mbRIur/BiHK6SKPjoBIXSE/hJ6g6JGRLuxQy1jGjlN4=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13/go.mod h1:ITg9em2KbJx1s0y4aqRX5OYWG6HBZ5TVR//OdpEZ2CQ= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13/go.mod h1:ITg9em2KbJx1s0y4aqRX5OYWG6HBZ5TVR//OdpEZ2CQ=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.7 h1:DIBqIrJ7hv+e4CmIk2z3pyKT+3B6qVMgRsawHiR3qso= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 h1:JRaIgADQS/U6uXDqlPiefP32yXTda7Kqfx+LgspooZM=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.7/go.mod h1:vLm00xmBke75UmpNvOcZQ/Q30ZFjbczeLFqGx5urmGo= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.30 h1:/Z5jmNrKsSD7EmDjzAPsm/3L9IuOkzaynklJZ1qX7S4= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.30 h1:/Z5jmNrKsSD7EmDjzAPsm/3L9IuOkzaynklJZ1qX7S4=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.30/go.mod h1:lEzEZnOosE7zi8Z6royW1cFJTD9fpab4Ul1SBrllewk= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.30/go.mod h1:lEzEZnOosE7zi8Z6royW1cFJTD9fpab4Ul1SBrllewk=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.16 h1:NSbvS17MlI2lurYgXnCOLvCFX38sBW4eiVER7+kkgsU= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.16/go.mod h1:SwT8Tmqd4sA6G1qaGdzWCJN99bUmPGHfRwwq3G5Qb+A= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ=
github.com/aws/aws-sdk-go-v2/service/s3 v1.93.2 h1:U3ygWUhCpiSPYSHOrRhb3gOl9T5Y3kB8k5Vjs//57bE= github.com/aws/aws-sdk-go-v2/service/s3 v1.97.3 h1:HwxWTbTrIHm5qY+CAEur0s/figc3qwvLWsNkF4RPToo=
github.com/aws/aws-sdk-go-v2/service/s3 v1.93.2/go.mod h1:79S2BdqCJpScXZA2y+cpZuocWsjGjJINyXnOsf5DTz8= github.com/aws/aws-sdk-go-v2/service/s3 v1.97.3/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM=
github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc= github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc=
github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI= github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI=
github.com/aws/aws-sdk-go-v2/service/ssm v1.45.0 h1:IOdss+igJDFdic9w3WKwxGCmHqUxydvIhJOm9LJ32Dk= github.com/aws/aws-sdk-go-v2/service/ssm v1.45.0 h1:IOdss+igJDFdic9w3WKwxGCmHqUxydvIhJOm9LJ32Dk=
@@ -105,8 +105,8 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P
github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=
github.com/cilium/ebpf v0.17.3 h1:FnP4r16PWYSE4ux6zN+//jMcW4nMVRvuTLVTvCjyyjg= github.com/cilium/ebpf v0.22.0 h1:v2ktp0roffpMOj2MMf3idtCQZOsAoC4BJbAJN+ke2bY=
github.com/cilium/ebpf v0.17.3/go.mod h1:G5EDHij8yiLzaqn0WjyfJHvRa+3aDlReIaLVRMvOyJk= github.com/cilium/ebpf v0.22.0/go.mod h1:CDzZbe2hC5JjlDC+CY3KFCzlYwN4gbxppYM+Z10bQt4=
github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk=
github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g= github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g=
@@ -199,8 +199,8 @@ github.com/go-jose/go-jose/v3 v3.0.5 h1:BLLJWbC4nMZOfuPVxoZIxeYsn6Nl2r1fITaJ78UQ
github.com/go-jose/go-jose/v3 v3.0.5/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= github.com/go-jose/go-jose/v3 v3.0.5/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA=
github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08=
github.com/go-json-experiment/json v0.0.0-20260601182631-00ed12fed2a6 h1:nxP4pPoyqOAgX8lYDFCfl3DyKeXErCvSvhcyzwGV9CE= github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68 h1:KZaTBSyshWX3MP5jukJcNSuXDQTO+rNpt0J564dX/eg=
github.com/go-json-experiment/json v0.0.0-20260601182631-00ed12fed2a6/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -484,8 +484,8 @@ github.com/tailscale/web-client-prebuilt v0.0.0-20251127225136-f19339b67368 h1:0
github.com/tailscale/web-client-prebuilt v0.0.0-20251127225136-f19339b67368/go.mod h1:agQPE6y6ldqCOui2gkIh7ZMztTkIQKH049tv8siLuNQ= github.com/tailscale/web-client-prebuilt v0.0.0-20251127225136-f19339b67368/go.mod h1:agQPE6y6ldqCOui2gkIh7ZMztTkIQKH049tv8siLuNQ=
github.com/tailscale/wf v0.0.0-20240214030419-6fbb0a674ee6 h1:l10Gi6w9jxvinoiq15g8OToDdASBni4CyJOdHY1Hr8M= github.com/tailscale/wf v0.0.0-20240214030419-6fbb0a674ee6 h1:l10Gi6w9jxvinoiq15g8OToDdASBni4CyJOdHY1Hr8M=
github.com/tailscale/wf v0.0.0-20240214030419-6fbb0a674ee6/go.mod h1:ZXRML051h7o4OcI0d3AaILDIad/Xw0IkXaHM17dic1Y= github.com/tailscale/wf v0.0.0-20240214030419-6fbb0a674ee6/go.mod h1:ZXRML051h7o4OcI0d3AaILDIad/Xw0IkXaHM17dic1Y=
github.com/tailscale/wireguard-go v0.0.0-20260715223240-2e01ba5b00f0 h1:CnIEL2n7Xql6Ux1k+Vu5S5ubDHCT/kxFgkKCY8FjefU= github.com/tailscale/wireguard-go v0.0.0-20260813211458-aa425f19bcbf h1:TQTeMPbY+rI4jMtp2p1kPTzBlv8yloP4fy6nb5l+D38=
github.com/tailscale/wireguard-go v0.0.0-20260715223240-2e01ba5b00f0/go.mod h1:6SerzcvHWQchKO2BfNdmquA77CHSECZuFl+D9fp4RnI= github.com/tailscale/wireguard-go v0.0.0-20260813211458-aa425f19bcbf/go.mod h1:6SerzcvHWQchKO2BfNdmquA77CHSECZuFl+D9fp4RnI=
github.com/tailscale/xnet v0.0.0-20240729143630-8497ac4dab2e h1:zOGKqN5D5hHhiYUp091JqK7DPCqSARyUfduhGUY8Bek= github.com/tailscale/xnet v0.0.0-20240729143630-8497ac4dab2e h1:zOGKqN5D5hHhiYUp091JqK7DPCqSARyUfduhGUY8Bek=
github.com/tailscale/xnet v0.0.0-20240729143630-8497ac4dab2e/go.mod h1:orPd6JZXXRyuDusYilywte7k094d7dycXXU5YnWsrwg= github.com/tailscale/xnet v0.0.0-20240729143630-8497ac4dab2e/go.mod h1:orPd6JZXXRyuDusYilywte7k094d7dycXXU5YnWsrwg=
github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA= github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA=
@@ -566,8 +566,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= golang.org/x/net v0.57.1-0.20260729233039-99c3b0a8f463 h1:56+vNxUDjzdwAJjglL/DMnp31nd8UeytlPRLbZfz55Q=
golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= golang.org/x/net v0.57.1-0.20260729233039-99c3b0a8f463/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU=
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -646,12 +646,12 @@ gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8 h1:Zy8IV/+FMLxy6j6p87vk/vQGKcdnbprwjTxc8UiUtsA= gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8 h1:Zy8IV/+FMLxy6j6p87vk/vQGKcdnbprwjTxc8UiUtsA=
gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8/go.mod h1:QkHjoMIBaYtpVufgwv3keYAbln78mBoCuShZrPrer1Q= gvisor.dev/gvisor v0.0.0-20260224225140-573d5e7127a8/go.mod h1:QkHjoMIBaYtpVufgwv3keYAbln78mBoCuShZrPrer1Q=
honnef.co/go/tools v0.7.0 h1:w6WUp1VbkqPEgLz4rkBzH/CSU6HkoqNLp6GstyTx3lU= honnef.co/go/tools v0.8.0-rc.1 h1:wqMm2kjcEXMOr+6yau+pdKqJKe6l2N1aKPkpini+Kzk=
honnef.co/go/tools v0.7.0/go.mod h1:pm29oPxeP3P82ISxZDgIYeOaf9ta6Pi0EWvCFoLG2vc= honnef.co/go/tools v0.8.0-rc.1/go.mod h1:XA+OnlRA9EDh/ukGvXMNSZNKGwFQJ+5dER0ioUkOxks=
howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM=
howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g=
k8s.io/client-go v0.34.0 h1:YoWv5r7bsBfb0Hs2jh8SOvFbKzzxyNo0nSb0zC19KZo= k8s.io/client-go v0.35.3 h1:s1lZbpN4uI6IxeTM2cpdtrwHcSOBML1ODNTCCfsP1pg=
k8s.io/client-go v0.34.0/go.mod h1:ozgMnEKXkRjeMvBZdV1AijMHLTh3pbACPvK7zFR+QQY= k8s.io/client-go v0.35.3/go.mod h1:RzoXkc0mzpWIDvBrRnD+VlfXP+lRzqQjCmKtiwZ8Q9c=
modernc.org/cc/v4 v4.28.2 h1:3tQ0lf2ADtoby2EtSP+J7IE2SHwEJdP8ioR59wx7XpY= modernc.org/cc/v4 v4.28.2 h1:3tQ0lf2ADtoby2EtSP+J7IE2SHwEJdP8ioR59wx7XpY=
modernc.org/cc/v4 v4.28.2/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI= modernc.org/cc/v4 v4.28.2/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI=
modernc.org/ccgo/v4 v4.34.0 h1:yRLPFZieg532OT4rp4JFNIVcquwalMX26G95WQDqwCQ= modernc.org/ccgo/v4 v4.34.0 h1:yRLPFZieg532OT4rp4JFNIVcquwalMX26G95WQDqwCQ=
@@ -686,8 +686,8 @@ sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=
software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k=
software.sslmate.com/src/go-pkcs12 v0.4.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= software.sslmate.com/src/go-pkcs12 v0.4.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI=
tailscale.com v1.103.0-pre h1:1Ntl/O0Gu5ZUXK9uhfv4RPBdqJEt17rsLPqfp8qPGUk= tailscale.com v1.103.0-pre.0.20260819232550-0e84b4a3a0a0 h1:nIHx5ElZ6YmM4ExbfLygId3BmQwbV7PuI00nuSuDYSY=
tailscale.com v1.103.0-pre/go.mod h1:NdndXfkSklVPbRUZMAzzRuDNaR5B+YWGbAyE1HpSQZg= tailscale.com v1.103.0-pre.0.20260819232550-0e84b4a3a0a0/go.mod h1:dTIBg+L0r0+A3BGQpR6I1WF87NMLZDS8L05BqNvSnN0=
tailscale.com/client/tailscale/v2 v2.9.0 h1:zBZIIeIYXL42qvvile7d29O2DKSr3AfNc2gzd1JCf2o= tailscale.com/client/tailscale/v2 v2.9.0 h1:zBZIIeIYXL42qvvile7d29O2DKSr3AfNc2gzd1JCf2o=
tailscale.com/client/tailscale/v2 v2.9.0/go.mod h1:FGjvGT3ThHelqo0gfdK3IN3k1dwNbRzYbQh2XO3C47U= tailscale.com/client/tailscale/v2 v2.9.0/go.mod h1:FGjvGT3ThHelqo0gfdK3IN3k1dwNbRzYbQh2XO3C47U=
zombiezen.com/go/postgrestest v1.0.1 h1:aXoADQAJmZDU3+xilYVut0pHhgc0sF8ZspPW9gFNwP4= zombiezen.com/go/postgrestest v1.0.1 h1:aXoADQAJmZDU3+xilYVut0pHhgc0sF8ZspPW9gFNwP4=
+2 -2
View File
@@ -74,7 +74,7 @@ func loadDERPMapFromURL(addr url.URL) (*tailcfg.DERPMap, error) {
func mergeDERPMaps(derpMaps []*tailcfg.DERPMap) *tailcfg.DERPMap { func mergeDERPMaps(derpMaps []*tailcfg.DERPMap) *tailcfg.DERPMap {
result := tailcfg.DERPMap{ result := tailcfg.DERPMap{
OmitDefaultRegions: false, OmitDefaultRegions: false,
Regions: map[int]*tailcfg.DERPRegion{}, Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{},
} }
for _, derpMap := range derpMaps { for _, derpMap := range derpMaps {
@@ -129,7 +129,7 @@ func shuffleDERPMap(dm *tailcfg.DERPMap) {
// Collect region IDs and sort them to ensure deterministic iteration order. // Collect region IDs and sort them to ensure deterministic iteration order.
// Map iteration order is non-deterministic in Go, which would cause the // Map iteration order is non-deterministic in Go, which would cause the
// shuffle to be non-deterministic even with a fixed seed. // shuffle to be non-deterministic even with a fixed seed.
ids := make([]int, 0, len(dm.Regions)) ids := make([]tailcfg.DERPRegionID, 0, len(dm.Regions))
for id := range dm.Regions { for id := range dm.Regions {
ids = append(ids, id) ids = append(ids, id)
} }
+1 -1
View File
@@ -12,7 +12,7 @@ import (
// cannot mutate a shared or previously served map. // cannot mutate a shared or previously served map.
func TestMergeDERPMapsClonesRegions(t *testing.T) { func TestMergeDERPMapsClonesRegions(t *testing.T) {
src := &tailcfg.DERPMap{ src := &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
1: {RegionID: 1, Nodes: []*tailcfg.DERPNode{{Name: "a"}, {Name: "b"}}}, 1: {RegionID: 1, Nodes: []*tailcfg.DERPNode{{Name: "a"}, {Name: "b"}}},
}, },
} }
+16 -16
View File
@@ -19,7 +19,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
name: "single region with 4 nodes", name: "single region with 4 nodes",
baseDomain: "test1.example.com", baseDomain: "test1.example.com",
derpMap: &tailcfg.DERPMap{ derpMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
1: { 1: {
RegionID: 1, RegionID: 1,
RegionCode: "nyc", RegionCode: "nyc",
@@ -34,7 +34,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
}, },
}, },
expected: &tailcfg.DERPMap{ expected: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
1: { 1: {
RegionID: 1, RegionID: 1,
RegionCode: "nyc", RegionCode: "nyc",
@@ -53,7 +53,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
name: "multiple regions with nodes", name: "multiple regions with nodes",
baseDomain: "test2.example.com", baseDomain: "test2.example.com",
derpMap: &tailcfg.DERPMap{ derpMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
10: { 10: {
RegionID: 10, RegionID: 10,
RegionCode: "sea", RegionCode: "sea",
@@ -77,7 +77,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
}, },
}, },
expected: &tailcfg.DERPMap{ expected: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
10: { 10: {
RegionID: 10, RegionID: 10,
RegionCode: "sea", RegionCode: "sea",
@@ -105,7 +105,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
name: "large region with many nodes", name: "large region with many nodes",
baseDomain: "test3.example.com", baseDomain: "test3.example.com",
derpMap: &tailcfg.DERPMap{ derpMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
4: { 4: {
RegionID: 4, RegionID: 4,
RegionCode: "fra", RegionCode: "fra",
@@ -120,7 +120,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
}, },
}, },
expected: &tailcfg.DERPMap{ expected: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
4: { 4: {
RegionID: 4, RegionID: 4,
RegionCode: "fra", RegionCode: "fra",
@@ -139,7 +139,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
name: "same region different base domain", name: "same region different base domain",
baseDomain: "different.example.com", baseDomain: "different.example.com",
derpMap: &tailcfg.DERPMap{ derpMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
4: { 4: {
RegionID: 4, RegionID: 4,
RegionCode: "fra", RegionCode: "fra",
@@ -154,7 +154,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
}, },
}, },
expected: &tailcfg.DERPMap{ expected: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
4: { 4: {
RegionID: 4, RegionID: 4,
RegionCode: "fra", RegionCode: "fra",
@@ -173,7 +173,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
name: "same dataset with another base domain", name: "same dataset with another base domain",
baseDomain: "another.example.com", baseDomain: "another.example.com",
derpMap: &tailcfg.DERPMap{ derpMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
4: { 4: {
RegionID: 4, RegionID: 4,
RegionCode: "fra", RegionCode: "fra",
@@ -188,7 +188,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
}, },
}, },
expected: &tailcfg.DERPMap{ expected: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
4: { 4: {
RegionID: 4, RegionID: 4,
RegionCode: "fra", RegionCode: "fra",
@@ -207,7 +207,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
name: "same dataset with yet another base domain", name: "same dataset with yet another base domain",
baseDomain: "yetanother.example.com", baseDomain: "yetanother.example.com",
derpMap: &tailcfg.DERPMap{ derpMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
4: { 4: {
RegionID: 4, RegionID: 4,
RegionCode: "fra", RegionCode: "fra",
@@ -222,7 +222,7 @@ func TestShuffleDERPMapDeterministic(t *testing.T) {
}, },
}, },
expected: &tailcfg.DERPMap{ expected: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
4: { 4: {
RegionID: 4, RegionID: 4,
RegionCode: "fra", RegionCode: "fra",
@@ -269,13 +269,13 @@ func TestShuffleDERPMapEdgeCases(t *testing.T) {
{ {
name: "empty derp map", name: "empty derp map",
derpMap: &tailcfg.DERPMap{ derpMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{}, Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{},
}, },
}, },
{ {
name: "region with no nodes", name: "region with no nodes",
derpMap: &tailcfg.DERPMap{ derpMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
1: { 1: {
RegionID: 1, RegionID: 1,
RegionCode: "empty", RegionCode: "empty",
@@ -288,7 +288,7 @@ func TestShuffleDERPMapEdgeCases(t *testing.T) {
{ {
name: "region with single node", name: "region with single node",
derpMap: &tailcfg.DERPMap{ derpMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
1: { 1: {
RegionID: 1, RegionID: 1,
RegionCode: "single", RegionCode: "single",
@@ -314,7 +314,7 @@ func TestShuffleDERPMapWithoutBaseDomain(t *testing.T) {
resetDerpRandomForTesting() resetDerpRandomForTesting()
derpMap := &tailcfg.DERPMap{ derpMap := &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
1: { 1: {
RegionID: 1, RegionID: 1,
RegionCode: "test", RegionCode: "test",
+1 -1
View File
@@ -114,7 +114,7 @@ func (d *DERPServer) GenerateRegion() (tailcfg.DERPRegion, error) {
RegionName: d.cfg.ServerRegionName, RegionName: d.cfg.ServerRegionName,
Nodes: []*tailcfg.DERPNode{ Nodes: []*tailcfg.DERPNode{
{ {
Name: strconv.Itoa(d.cfg.ServerRegionID), Name: d.cfg.ServerRegionID.String(),
RegionID: d.cfg.ServerRegionID, RegionID: d.cfg.ServerRegionID,
HostName: host, HostName: host,
DERPPort: port, DERPPort: port,
+2 -2
View File
@@ -188,7 +188,7 @@ func setupBatcherWithTestData(
DERP: types.DERPConfig{ DERP: types.DERPConfig{
ServerEnabled: false, ServerEnabled: false,
DERPMap: &tailcfg.DERPMap{ DERPMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
999: { 999: {
RegionID: 999, RegionID: 999,
}, },
@@ -348,7 +348,7 @@ func assertDERPMapResponse(t *testing.T, resp *tailcfg.MapResponse) {
assert.NotNil(t, resp.DERPMap, "DERPMap should not be nil in response") assert.NotNil(t, resp.DERPMap, "DERPMap should not be nil in response")
assert.Len(t, resp.DERPMap.Regions, 1, "Expected exactly one DERP region in response") assert.Len(t, resp.DERPMap.Regions, 1, "Expected exactly one DERP region in response")
assert.Equal(t, 999, resp.DERPMap.Regions[999].RegionID, "Expected DERP region ID to be 999") assert.Equal(t, tailcfg.DERPRegionID(999), resp.DERPMap.Regions[999].RegionID, "Expected DERP region ID to be 999")
} }
func assertOnlineMapResponse(t *testing.T, resp *tailcfg.MapResponse, expected bool) { func assertOnlineMapResponse(t *testing.T, resp *tailcfg.MapResponse, expected bool) {
+1 -1
View File
@@ -49,7 +49,7 @@ func setupStormBatcher(tb testing.TB, nodeCount, workers int, policy string) (*T
DERP: types.DERPConfig{ DERP: types.DERPConfig{
ServerEnabled: false, ServerEnabled: false,
DERPMap: &tailcfg.DERPMap{ DERPMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{999: {RegionID: 999}}, Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{999: {RegionID: 999}},
}, },
}, },
Tuning: types.Tuning{ Tuning: types.Tuning{
+4 -4
View File
@@ -223,7 +223,7 @@ func TestBuildFromChangeFiltersPeerPatchesByVisibility(t *testing.T) {
Policy: types.PolicyConfig{Mode: types.PolicyModeDB}, Policy: types.PolicyConfig{Mode: types.PolicyModeDB},
DERP: types.DERPConfig{ DERP: types.DERPConfig{
DERPMap: &tailcfg.DERPMap{ DERPMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{999: {RegionID: 999}}, Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{999: {RegionID: 999}},
}, },
}, },
Tuning: types.Tuning{ Tuning: types.Tuning{
@@ -309,7 +309,7 @@ func TestBuildFromChangeFiltersUserProfilesByVisibility(t *testing.T) {
Policy: types.PolicyConfig{Mode: types.PolicyModeDB}, Policy: types.PolicyConfig{Mode: types.PolicyModeDB},
DERP: types.DERPConfig{ DERP: types.DERPConfig{
DERPMap: &tailcfg.DERPMap{ DERPMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{999: {RegionID: 999}}, Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{999: {RegionID: 999}},
}, },
}, },
Tuning: types.Tuning{ Tuning: types.Tuning{
@@ -381,7 +381,7 @@ func TestBuildFromChangeVisibilityMatchesFullMap(t *testing.T) {
Policy: types.PolicyConfig{Mode: types.PolicyModeDB}, Policy: types.PolicyConfig{Mode: types.PolicyModeDB},
DERP: types.DERPConfig{ DERP: types.DERPConfig{
DERPMap: &tailcfg.DERPMap{ DERPMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{999: {RegionID: 999}}, Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{999: {RegionID: 999}},
}, },
}, },
Tuning: types.Tuning{ Tuning: types.Tuning{
@@ -574,7 +574,7 @@ func TestFullMapResponseSurvivesPeerWithInvalidName(t *testing.T) {
Policy: types.PolicyConfig{Mode: types.PolicyModeDB}, Policy: types.PolicyConfig{Mode: types.PolicyModeDB},
DERP: types.DERPConfig{ DERP: types.DERPConfig{
DERPMap: &tailcfg.DERPMap{ DERPMap: &tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{999: {RegionID: 999}}, Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{999: {RegionID: 999}},
}, },
}, },
Tuning: types.Tuning{ Tuning: types.Tuning{
+1 -1
View File
@@ -154,7 +154,7 @@ func NewServer(tb testing.TB, opts ...ServerOption) *TestServer {
// Set a minimal DERP map so MapResponse generation works. // Set a minimal DERP map so MapResponse generation works.
app.GetState().SetDERPMap(&tailcfg.DERPMap{ app.GetState().SetDERPMap(&tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
900: { 900: {
RegionID: 900, RegionID: 900,
RegionCode: "test", RegionCode: "test",
+3 -3
View File
@@ -37,12 +37,12 @@ type DebugOverviewInfo struct {
type DebugDERPInfo struct { type DebugDERPInfo struct {
Configured bool `json:"configured"` Configured bool `json:"configured"`
TotalRegions int `json:"total_regions"` TotalRegions int `json:"total_regions"`
Regions map[int]*DebugDERPRegion `json:"regions,omitempty"` Regions map[tailcfg.DERPRegionID]*DebugDERPRegion `json:"regions,omitempty"`
} }
// DebugDERPRegion represents a single DERP region. // DebugDERPRegion represents a single DERP region.
type DebugDERPRegion struct { type DebugDERPRegion struct {
RegionID int `json:"region_id"` RegionID tailcfg.DERPRegionID `json:"region_id"`
RegionName string `json:"region_name"` RegionName string `json:"region_name"`
Nodes []*DebugDERPNode `json:"nodes"` Nodes []*DebugDERPNode `json:"nodes"`
} }
@@ -346,7 +346,7 @@ func (s *State) DebugDERPJSON() DebugDERPInfo {
info := DebugDERPInfo{ info := DebugDERPInfo{
Configured: derpMap != nil, Configured: derpMap != nil,
Regions: make(map[int]*DebugDERPRegion), Regions: make(map[tailcfg.DERPRegionID]*DebugDERPRegion),
} }
if derpMap == nil { if derpMap == nil {
+1 -1
View File
@@ -27,7 +27,7 @@ func netInfoFromMapRequest(
log.Debug(). log.Debug().
Caller(). Caller().
Uint64("node.id", nodeID.Uint64()). Uint64("node.id", nodeID.Uint64()).
Int("preferredDERP", currentHostinfo.NetInfo.PreferredDERP). Int64("preferredDERP", currentHostinfo.NetInfo.PreferredDERP.Int64()).
Msg("using NetInfo from previous Hostinfo in MapRequest") Msg("using NetInfo from previous Hostinfo in MapRequest")
return currentHostinfo.NetInfo return currentHostinfo.NetInfo
+2 -2
View File
@@ -104,7 +104,7 @@ func TestNetInfoPreservationInRegistrationFlow(t *testing.T) {
// CORRECT: Using the existing node's hostinfo (has NetInfo) // CORRECT: Using the existing node's hostinfo (has NetInfo)
correctResult := netInfoFromMapRequest(nodeID, existingNodeHostinfo, newRegistrationHostinfo) correctResult := netInfoFromMapRequest(nodeID, existingNodeHostinfo, newRegistrationHostinfo)
assert.NotNil(t, correctResult, "Fix: Should preserve NetInfo when using correct hostinfo reference") assert.NotNil(t, correctResult, "Fix: Should preserve NetInfo when using correct hostinfo reference")
assert.Equal(t, 5, correctResult.PreferredDERP, "Should preserve the DERP region from existing node") assert.Equal(t, tailcfg.DERPRegionID(5), correctResult.PreferredDERP, "Should preserve the DERP region from existing node")
}) })
t.Run("new_node_creation_for_different_user_should_preserve_netinfo", func(t *testing.T) { t.Run("new_node_creation_for_different_user_should_preserve_netinfo", func(t *testing.T) {
@@ -130,6 +130,6 @@ func TestNetInfoPreservationInRegistrationFlow(t *testing.T) {
// When creating a new node for user2, we should preserve NetInfo from user1's node // When creating a new node for user2, we should preserve NetInfo from user1's node
result := netInfoFromMapRequest(types.NodeID(2), existingNodeUser1Hostinfo, newNodeUser2Hostinfo) result := netInfoFromMapRequest(types.NodeID(2), existingNodeUser1Hostinfo, newNodeUser2Hostinfo)
assert.NotNil(t, result, "New node for user2 should preserve NetInfo from user1's node") assert.NotNil(t, result, "New node for user2 should preserve NetInfo from user1's node")
assert.Equal(t, 7, result.PreferredDERP, "Should preserve DERP region from existing node") assert.Equal(t, tailcfg.DERPRegionID(7), result.PreferredDERP, "Should preserve DERP region from existing node")
}) })
} }
+3 -3
View File
@@ -244,7 +244,7 @@ type OIDCConfig struct {
type DERPConfig struct { type DERPConfig struct {
ServerEnabled bool ServerEnabled bool
AutomaticallyAddEmbeddedDerpRegion bool AutomaticallyAddEmbeddedDerpRegion bool
ServerRegionID int ServerRegionID tailcfg.DERPRegionID
ServerRegionCode string ServerRegionCode string
ServerRegionName string ServerRegionName string
ServerPrivateKeyPath string ServerPrivateKeyPath string
@@ -731,7 +731,7 @@ func tlsConfig() TLSConfig {
func derpConfig() DERPConfig { func derpConfig() DERPConfig {
serverEnabled := viper.GetBool("derp.server.enabled") serverEnabled := viper.GetBool("derp.server.enabled")
serverRegionID := viper.GetInt("derp.server.region_id") serverRegionID := viper.GetInt64("derp.server.region_id")
serverRegionCode := viper.GetString("derp.server.region_code") serverRegionCode := viper.GetString("derp.server.region_code")
serverRegionName := viper.GetString("derp.server.region_name") serverRegionName := viper.GetString("derp.server.region_name")
serverVerifyClients := viper.GetBool("derp.server.verify_clients") serverVerifyClients := viper.GetBool("derp.server.verify_clients")
@@ -780,7 +780,7 @@ func derpConfig() DERPConfig {
return DERPConfig{ return DERPConfig{
ServerEnabled: serverEnabled, ServerEnabled: serverEnabled,
ServerRegionID: serverRegionID, ServerRegionID: tailcfg.DERPRegionID(serverRegionID),
ServerRegionCode: serverRegionCode, ServerRegionCode: serverRegionCode,
ServerRegionName: serverRegionName, ServerRegionName: serverRegionName,
ServerVerifyClients: serverVerifyClients, ServerVerifyClients: serverVerifyClients,
+1 -1
View File
@@ -1159,7 +1159,7 @@ func (nv NodeView) TailNode(
return nil, err return nil, err
} }
var derp int var derp tailcfg.DERPRegionID
if nv.Hostinfo().Valid() && nv.Hostinfo().NetInfo().Valid() { if nv.Hostinfo().Valid() && nv.Hostinfo().NetInfo().Valid() {
derp = nv.Hostinfo().NetInfo().PreferredDERP() derp = nv.Hostinfo().NetInfo().PreferredDERP()
} }
+1 -1
View File
@@ -48,7 +48,7 @@ func (s SafeHostinfo) MarshalZerologObject(e *zerolog.Event) {
} }
if s.hi.NetInfo != nil && s.hi.NetInfo.PreferredDERP != 0 { if s.hi.NetInfo != nil && s.hi.NetInfo.PreferredDERP != 0 {
e.Int(zf.DERP, s.hi.NetInfo.PreferredDERP) e.Int64(zf.DERP, s.hi.NetInfo.PreferredDERP.Int64())
} }
// SECURITY: The following fields are intentionally NOT logged: // SECURITY: The following fields are intentionally NOT logged:
+1 -1
View File
@@ -67,7 +67,7 @@ func TestDERPVerifyEndpoint(t *testing.T) {
}, },
} }
derpMap := tailcfg.DERPMap{ derpMap := tailcfg.DERPMap{
Regions: map[int]*tailcfg.DERPRegion{ Regions: map[tailcfg.DERPRegionID]*tailcfg.DERPRegion{
900: &derpRegion, 900: &derpRegion,
}, },
} }