Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
189 commits
Select commit Hold shift + click to select a range
bf47d8e
VERSION.txt: this is v1.91.0
nickkhyl Oct 20, 2025
3dde233
ipn/ipnlocal: use eventbus.SubscribeFunc in LocalBackend (#17524)
creachadair Oct 20, 2025
ab435ce
client/systray: warn users launching the application with sudo (#17595)
cmol Oct 20, 2025
675b1c6
cmd/tailscale/cli: error when advertising a Service from an untagged …
hwh33 Oct 20, 2025
3944809
.github/workflows: pin the google/oss-fuzz GitHub Actions
alexwlchan Oct 21, 2025
2b448f0
ipn, tka: improve the logging around TKA sync and AUM errors
alexwlchan Oct 20, 2025
23359dc
tka: don't try to read AUMs which are partway through being written
alexwlchan Oct 21, 2025
c59c859
tsconsensus: mark several of these tests as known flaky
alexwlchan Oct 21, 2025
c2d62d2
CODE_OF_CONDUCT: convert to semantic line breaks
willnorris Oct 21, 2025
afaa23c
CODE_OF_CONDUCT: update document title
willnorris Oct 21, 2025
36ad24b
feature/tpm: check TPM family data for compatibility (#17624)
patrickod Oct 23, 2025
672b1f0
feature/tpm: use withSRK to probe TPM availability (#17627)
patrickod Oct 23, 2025
8576a80
util/linuxfw: fix 32-bit arm regression with iptables
bradfitz Oct 24, 2025
d47c697
ipn/ipnlocal: skip TKA bootstrap request if Tailnet Lock is unavailable
alexwlchan Oct 21, 2025
7418583
health: compare warnable codes to avoid errors on release branch (#17…
cmol Oct 24, 2025
fd0e541
net/tsdial: do not panic if setting the same eventbus twice (#17640)
cmol Oct 24, 2025
4346615
logtail: avoid racing eventbus subscriptions with Shutdown (#17639)
creachadair Oct 24, 2025
a760cbe
control/controlclient: back out HW key attestation (#17664)
patrickod Oct 27, 2025
34e992f
feature/identityfederation: strip query params on clientID (#17666)
mcoulombe Oct 27, 2025
f4e2720
cmd/tailscale/cli: move JetKVM scripts to /userdata/init.d for persis…
srwareham Oct 27, 2025
576aacd
ipn/ipnlocal/serve: add grant headers
neinkeinkaffee Oct 3, 2025
d6fa899
ipn/ipnlocal/serve: remove grant header truncation logic
neinkeinkaffee Oct 15, 2025
d2e4a20
ipn/ipnlocal/serve: error when PeerCaps serialisation fails
neinkeinkaffee Oct 22, 2025
0268173
.github: drop branches filter with single asterisk from workflows (#1…
mpminardi Oct 28, 2025
db5815f
Revert "logtail: avoid racing eventbus subscriptions with Shutdown (#…
creachadair Oct 28, 2025
0a5ba82
CODE_OF_CONDUCT.md: update code of conduct
willnorris Oct 28, 2025
edb11e0
wgengine/magicsock: fix js/wasm crash regression loading non-existent…
bradfitz Oct 28, 2025
09a2a10
derp: fix an unchecked error in a test (#17694)
creachadair Oct 28, 2025
fcb614a
cmd/jsonimports: add static analyzer for consistent "json" imports (#…
dsnet Oct 28, 2025
478342a
wgengine/netlog: embed node information in network flow logs (#17668)
dsnet Oct 28, 2025
9ac8105
cmd/jsontags: add static analyzer for incompatible `json` struct tags…
dsnet Oct 28, 2025
3c19add
tka: rename a mutex to `mu` instead of single-letter `l`
alexwlchan Oct 29, 2025
06b0923
ipn/ipnlocal: do not stall event processing for appc route updates (#…
creachadair Oct 29, 2025
da90e3d
cmd/k8s-operator: rename 'l' variables (#17700)
fserb Oct 29, 2025
74f1d8b
cmd/tailscale/cli: unhide serve get-config and serve set-config (#17598)
hwh33 Oct 29, 2025
d5a40c0
cmd/k8s-operator/generate: skip tests if no network or Helm is down
bradfitz Oct 29, 2025
8996254
sessionrecording: fix regression in recent http2 package change
bradfitz Oct 29, 2025
05d2dca
words: remove a fish (#17704)
Erisa Oct 29, 2025
d68513b
ipn: add support for HTTP Redirects (#17594)
fserb Oct 30, 2025
95426b7
logtail: avoid racing eventbus subscriptions with shutdown (#17695)
creachadair Oct 30, 2025
adee8b9
cmd/tailscale/cli/serve_v2: improve validation error
neinkeinkaffee Oct 30, 2025
b6c6960
control/controlclient: remove unused reference to mapCtx (#17614)
zofrex Oct 30, 2025
f522b9d
feature/tpm: protect all TPM handle operations with a mutex (#17708)
awly Oct 30, 2025
061e626
util/eventbus: allow logging of slow subscribers (#17705)
creachadair Oct 30, 2025
4c85607
util/eventbus: block for the subscriber during SubscribeFunc close (#…
creachadair Oct 31, 2025
db7dcd5
Revert "control/controlclient: back out HW key attestation (#17664)" …
awly Oct 31, 2025
77123a5
wgengine/netlog: include node OS in logged attributes (#17755)
dsnet Nov 4, 2025
4467526
cmd/vet: move jsontags into vet (#17777)
dsnet Nov 5, 2025
5b40f0b
cmd/vet: add static vet checker that runs jsontags (#17778)
dsnet Nov 6, 2025
1ed117d
cmd/k8s-operator: remove Services feature flag detection
tomhjp Nov 6, 2025
d4c5b27
cmd/k8s-operator: support workload identity federation
tomhjp Oct 5, 2025
bab5e68
net/udprelay: use GetGlobalAddrs and add local port endpoint (#17797)
rajsinghtech Nov 7, 2025
875a9c5
tsnet: skip a 30s long flaky-ish test on macOS
bradfitz Nov 9, 2025
de733c5
tailcfg: kill off rest of HairPinning symbols
bradfitz Nov 9, 2025
2e26521
tsnet: fix TestConn to be fast, not flaky
bradfitz Nov 9, 2025
ae3dff1
ipn/ipnlocal: clean up some of the weird locking (#17802)
awly Nov 9, 2025
c7dbd39
tka: remove an unused parameter from `computeActiveAncestor`
alexwlchan Nov 10, 2025
4c67df4
tka: log a better error if there are no chain candidates
alexwlchan Nov 10, 2025
fe5501a
wgengine: make getStatus a bit cheaper (less alloc-y)
bradfitz Nov 10, 2025
e059382
wgengine/magicsock: clean up determineEndpoints docs (#17822)
jwhited Nov 10, 2025
e0e8731
feature, ipn/ipnlocal: add, use feature.CanSystemdStatus for more DCE
bradfitz Nov 9, 2025
8ed6bb3
ipn/ipnlocal: move vipServiceHash etc to serve.go, out of local.go
bradfitz Nov 10, 2025
6e24f50
tsnet: add tstest.Shard on the slow tests
bradfitz Nov 11, 2025
4650061
ipn/ipnlocal: fix state_test data race seen in CI
bradfitz Nov 11, 2025
18806de
wgengine/magicsock: validate endpoint.derpAddr in Conn.onUDPRelayAllo…
jwhited Nov 11, 2025
2ad2d4d
wgengine/magicsock: fix UDPRelayAllocReq/Resp deadlock (#17831)
jwhited Nov 11, 2025
42ce5c8
wgengine/magicsock: unblock Conn.Synchronize on Conn.Close
bradfitz Nov 11, 2025
1eba5b0
util/eventbus: log goroutine stacks when hung in CI
bradfitz Nov 10, 2025
3280dac
wgengine/router/osrouter: fix linux magicsock port changing
sachiniyer Nov 11, 2025
85cb64c
wf: correct IPv6 link-local range from ff80::/10 to fe80::/10 (#17840)
sachiniyer Nov 11, 2025
d37884c
cmd/k8s-operator: remove early return in ingress matching (#17841)
sachiniyer Nov 12, 2025
16e90dc
net/batching: fix gro size handling for misordered UDP_GRO messages (…
sachiniyer Nov 12, 2025
e8d2f96
ipn/ipnlocal, net/netns: add node cap to disable netns interface bind…
barnstar Nov 12, 2025
27a0168
util/dnsname: increase maxNameLength to account for trailing dot
franbull Nov 6, 2025
f387b10
wgengine/wgcfg: remove two unused Config fields
bradfitz Nov 12, 2025
37aa7e6
util/dnsname: fix test error message
franbull Nov 12, 2025
31fe75a
licenses: update license notices
Nov 10, 2025
f4f9dd7
net/udprelay: replace VNI pool with selection algorithm (#17868)
jwhited Nov 12, 2025
6ac80b7
cmd/{cloner,viewer}: handle maps of views
andrew-d Nov 12, 2025
ca9b68a
cmd/tailscale/cli: remove service flag from funnel command (#17850)
tendstofortytwo Nov 13, 2025
08e74ef
cmd/cloner: support cloning arbitrarily-nested maps
andrew-d Nov 13, 2025
146ea42
ipn/ipnlocal: remove all the weird locking (LockedOnEntry, UnlockEarl…
bradfitz Nov 9, 2025
9e4d1fd
feature/relayserver,ipn/ipnlocal,net/udprelay: plumb DERPMap (#17881)
jwhited Nov 14, 2025
b5cd299
tka: add a test for unmarshaling existing AUMs
alexwlchan Nov 7, 2025
124301f
ipn/ipnlocal: log prefs changes and reason in Start (#17876)
zofrex Nov 14, 2025
0285e1d
feature/relayserver: fix Shutdown() deadlock (#17898)
jwhited Nov 14, 2025
0526027
control/controlclient: make Observer optional
bradfitz Nov 14, 2025
208a32a
logpolicy: fix nil pointer dereference with invalid TS_LOG_TARGET
andrew-d Nov 14, 2025
ce10f7c
wgengine/wgcfg/nmcfg: reduce wireguard reconfig log spam
bradfitz Nov 14, 2025
ab4b990
net/netmon: do not abandon a subscriber when exiting early (#17899)
creachadair Nov 14, 2025
bd36817
scripts/installer.sh: compare major versions numerically (#17904)
sfllaw Nov 14, 2025
9134440
various: adds missing apostrophes to comments
alexwlchan Nov 14, 2025
888a5d4
ipn/localapi: use constant-time comparison for RequiredPassword (#17906)
awly Nov 14, 2025
c5919b4
feature/tpm: check IsZero in clone instead of just nil (#17884)
awly Nov 14, 2025
a96ef43
control/controlclient,ipn/ipnlocal: replace State enum with boolean f…
raggi Nov 13, 2025
e1f0ad7
net/udprelay: implement Server.SetStaticAddrPorts (#17909)
jwhited Nov 15, 2025
8444659
cmd/tailscale/cli: fix panic in netcheck with mismatched DERP region IDs
kingcanfish Oct 17, 2025
8aa46a3
util/clientmetric: fix regression causing Metric.v to be uninitialised
quagsirus Nov 15, 2025
4e01e8a
wgengine/netlog: fix send to closed channel in test
bradfitz Nov 15, 2025
98aadba
util/cache: remove unused code
bradfitz Nov 15, 2025
653d073
types/netmap: remove PrivateKey from NetworkMap
bradfitz Nov 15, 2025
3a41c0c
ipn/ipnlocal: add PROXY protocol support to Funnel/Serve
andrew-d Oct 20, 2025
99b06ea
syncs: add Mutex/RWMutex alias/wrappers for future mutex debugging
bradfitz Nov 15, 2025
139c395
cmd/tailscale/cli: stabilise the output of `tailscale lock log --json`
alexwlchan Oct 22, 2025
a5b2f18
control/controlclient: remove some public API, move to Options & test…
bradfitz Nov 17, 2025
1e95bfa
ipn: fix typo in comment
bradfitz Nov 17, 2025
200383d
various: add more missing apostrophes in comments
alexwlchan Nov 17, 2025
d010816
go.mod: bump golang.org/x/crypto (#17907)
awly Nov 17, 2025
1723cb8
ipn/ipnlocal: use an in-memory TKA store if FS is unavailable
alexwlchan Oct 29, 2025
165a247
tka: fix typo in comment
bradfitz Nov 17, 2025
f1cddc6
ipn{,/local},cmd/tailscale: add "sync" flag and pref to disable contr…
bradfitz Nov 17, 2025
26f9b50
feature/tpm: disable dictionary attack protection on sealing key (#17…
awly Nov 17, 2025
41662f5
ssh/tailssh: fix incubator tests on macOS arm64
raggi Nov 16, 2025
4860c46
wgengine/netlog: strip dot suffix from node name (#17954)
dsnet Nov 18, 2025
a2e9dfa
cmd/tailscale/cli: warn if a simple up would change prefs (#17877)
zofrex Nov 18, 2025
9048ea2
ipn/localapi: log calls to localapi (#17880)
zofrex Nov 18, 2025
c2e474e
all: rename variables with lowercase-l/uppercase-I
alexwlchan Nov 17, 2025
85373ef
tka: move RemoveAll() to CompactableChonk
alexwlchan Nov 18, 2025
af7c26a
cmd/vet/jsontags: fix a typo in an error message
alexwlchan Nov 18, 2025
4e2f2d1
feature/buildfeatures: re-run go generate
bradfitz Nov 18, 2025
2a6cbb7
.github/workflows: make go_generate check detect new files
bradfitz Nov 18, 2025
bd29b18
types/netmap,*: remove some redundant fields from NetMap
bradfitz Nov 18, 2025
04a9d25
tka: mark young AUMs as active even if the chain is long
knyar Nov 18, 2025
d0daa5a
tka: marshal AUMHash totext even if Tailnet Lock is omitted
alexwlchan Nov 17, 2025
da508c5
appc: add ippool type
franbull Nov 17, 2025
c09c95e
types/key,wgengine/magicsock,control/controlclient,ipn: add debug dis…
raggi Nov 4, 2025
3b865d7
cmd/netlogfmt: support resolving IP addresses to synonymous labels (#…
dsnet Nov 18, 2025
5b0c57f
tailcfg: add some omitzero, adjust some omitempty to omitzero
bradfitz Nov 18, 2025
408336a
feature/featuretags: add CacheNetMap feature tag for upcoming work
bradfitz Nov 19, 2025
38ccdbe
cmd/k8s-operator: default to stable image (#17848)
davidsbond Nov 19, 2025
e1dd922
ipn/ipnlocal, tka: compact TKA state after every sync
alexwlchan Nov 17, 2025
62d64c0
cmd/k8s-operator: fix type comparison in apiserver proxy template (#1…
rajsinghtech Nov 19, 2025
aeda3e8
ipn/ipnlocal: reduce profileManager boilerplate in network-lock tests
alexwlchan Nov 19, 2025
336df56
cmd/tailscale/cli: remove Latin abbreviations from CLI help text
alexwlchan Nov 18, 2025
6ac4356
util/eventbus: simplify some reflect in Bus.pump
bradfitz Nov 19, 2025
976bf24
ipn/ipnlocal: remove the always-true CanSupportNetworkLock()
alexwlchan Nov 19, 2025
12c598d
licenses: update license notices
Nov 17, 2025
a0d059d
cmd/tailscale/cli: allow remote target as service destination (#17607)
KevinLiang10 Nov 19, 2025
86a8498
cmd/k8s-operator: use stable image for k8s-nameserver (#17985)
davidsbond Nov 20, 2025
7d19813
net/batching: fix import formatting
bradfitz Nov 19, 2025
682172c
net/netns: remove spammy logs for interface binding caps
barnstar Nov 19, 2025
42a5262
cmd/k8s-operator: add multi replica support for recorders (#17864)
davidsbond Nov 20, 2025
ac74d28
ipn/ipnlocal: add validations when setting serve config (#17950)
hwh33 Nov 20, 2025
de8ed20
go.mod: bump golang.org/x/crypto (#18011)
awly Nov 20, 2025
c679aab
cmd/tailscaled,ipn: show a health warning when state store fails to o…
awly Nov 20, 2025
ce95bc7
tka: don't panic if no clock set in tka.Mem
alexwlchan Nov 21, 2025
016ccae
util/eventbus: add tests for a subscriber trying to acquire the same …
nickkhyl Nov 20, 2025
3780f25
util/eventbus: add tests for a subscriber publishing events
nickkhyl Nov 20, 2025
e7f5ca1
wgengine/userspace: run link change subscribers in eventqueue (#18024)
cmol Nov 21, 2025
9245c71
feature/relayserver: don't publish from within a subscribe fn goroutine
jwhited Nov 21, 2025
1ccece0
util/eventbus: use unbounded event queues for DeliveredEvents in subs…
nickkhyl Nov 21, 2025
1658774
portlist,tstest: skip tests on kernels with /proc/net/tcp regression
andrew-d Nov 21, 2025
a20cdb5
tstest/integration/testcontrol: de-flake TestUserMetricsRouteGauges
andrew-d Nov 21, 2025
698eecd
ipn/ipnlocal: fix panic in driveTransport on network error
andrew-d Nov 21, 2025
6637003
cmd/cigocacher,go.mod: add cigocacher cmd
tomhjp Nov 18, 2025
755309c
net/udprelay: use blake2s-256 MAC for handshake challenge
jwhited Nov 21, 2025
7426eca
cmd/tailscale,feature/relayserver,ipn: add relay-server-static-endpoi…
jwhited Nov 21, 2025
9c3a2aa
ipn/ipnlocal: replace log.Printf with logf (#18045)
sfllaw Nov 25, 2025
d4821cd
cmd/k8s-operator: allow HA ingresses to be deleted when VIP service d…
davidsbond Nov 25, 2025
7073f24
ipn/ipnlocal: do not call controlclient.Client.Shutdown with b.mu held
nickkhyl Nov 25, 2025
848978e
ipn/ipnlocal: test traffic-steering when feature is not enabled (#17997)
sfllaw Nov 25, 2025
ac0b153
tailcfg, control/controlclient: start moving MapResponse.DefaultAutoU…
bradfitz Sep 29, 2025
f4a4bab
tsconsensus: skip integration tests in CI
franbull Nov 21, 2025
b38dd1a
ipn/ipnlocal: don't panic if there are no suitable exit nodes
alexwlchan Nov 25, 2025
c54d243
net/tstun: add TSMPDiscoAdvertisement to TSMPPing (#17995)
cmol Nov 25, 2025
53476ce
ipn/serve: validate service paths in HasPathHandler
sachiniyer Nov 11, 2025
8240273
cmd/tailscale/cli,ipn,all: make peer relay server port a *uint16
jwhited Nov 25, 2025
b7658a4
tstest/integration: add integration test for Tailnet Lock
alexwlchan Nov 19, 2025
8af7778
util/execqueue: don't hold mutex in RunSync
bradfitz Nov 26, 2025
9eff8a4
feature/tpm: return opening errors from both /dev/tpmrm0 and /dev/tpm…
awly Nov 26, 2025
822adaa
VERSION.txt: this is v1.92.0
barnstar Nov 26, 2025
fd7dd64
ipn/ipnlocal: fix LocalBackend deadlock when packet arrives during pr…
nickkhyl Dec 4, 2025
28e8e6b
wgengine: fix TSMP/ICMP callback leak
bradfitz Dec 2, 2025
826f16d
go.toolchain.rev: update to Go 1.25.5 (#18123) (#18134)
bradfitz Dec 4, 2025
2078eb5
VERSION.txt: this is v1.92.1
barnstar Dec 5, 2025
7508ea4
cmd/derper: add GCP Certificate Manager support (#18161)
rajsinghtech Dec 9, 2025
95a957c
VERSION.txt: this is 1.92.2
barnstar Dec 10, 2025
f5d1075
ipn/ipnlocal: avoid ResetAndStop panic
bradfitz Dec 11, 2025
9a08e8f
VERSION.txt: this is 1.92.3
barnstar Dec 16, 2025
3e7abb6
cmd/k8s-operator: fixes helm template for oauth secret volume mount (…
ChaosInTheCRD Dec 17, 2025
0d206ff
ipn/ipnlocal: log cert renewal failures (#18246) (#18247)
irbekrm Dec 18, 2025
5065307
VERSION.txt: This is 1.92.4
ChaosInTheCRD Dec 18, 2025
9ae9dfd
types/persist: omit Persist.AttestationKey based on IsZero (#18241) (…
awly Dec 18, 2025
4adbd14
cmd/k8s-operator,ipn/ipnlocal: allow opting out of ACME order replace…
irbekrm Jan 6, 2026
e893828
cmd/tailscaled/ipn{ipnlocal,store/kubestore}: disable hardware attest…
irbekrm Jan 6, 2026
b1eb1a0
VERSION.txt: this is v1.92.5 (#18345)
irbekrm Jan 6, 2026
91b4f69
Merge tag 'v1.92.0' into cpierre/coreweave-v1.92.5
ChandonPierre Jan 12, 2026
85a51be
Revert "control/controlclient: back out HW key attestation (#17664)" …
awly Oct 31, 2025
afae851
Merge tag 'v1.92.5' into cpierre/coreweave-v1.92.5
ChandonPierre Jan 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
38 changes: 38 additions & 0 deletions .github/workflows/vet.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: tailscale.com/cmd/vet

env:
HOME: ${{ github.workspace }}
# GOMODCACHE is the same definition on all OSes. Within the workspace, we use
# toplevel directories "src" (for the checked out source code), and "gomodcache"
# and other caches as siblings to follow.
GOMODCACHE: ${{ github.workspace }}/gomodcache

on:
push:
branches:
- main
- "release-branch/*"
paths:
- "**.go"
pull_request:
paths:
- "**.go"

jobs:
vet:
runs-on: [ self-hosted, linux ]
timeout-minutes: 5

steps:
- name: Check out code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
path: src

- name: Build 'go vet' tool
working-directory: src
run: ./tool/go build -o /tmp/vettool tailscale.com/cmd/vet

- name: Run 'go vet'
working-directory: src
run: ./tool/go vet -vettool=/tmp/vettool tailscale.com/...
160 changes: 58 additions & 102 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -1,147 +1,103 @@
# Contributor Covenant Code of Conduct
# Tailscale Community Code of Conduct

## Our Pledge

We are committed to creating an open, welcoming, diverse, inclusive,
healthy and respectful community.
We are committed to creating an open, welcoming, diverse, inclusive, healthy and respectful community.
Unacceptable, harmful and inappropriate behavior will not be tolerated.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people.
* Being respectful of differing opinions, viewpoints, and experiences.
* Giving and gracefully accepting constructive feedback.
* Accepting responsibility and apologizing to those affected by our
mistakes, and learning from the experience.
* Focusing on what is best not just for us as individuals, but for the
overall community.
Examples of behavior that contributes to a positive environment for our community include:

- Demonstrating empathy and kindness toward other people.
- Being respectful of differing opinions, viewpoints, and experiences.
- Giving and gracefully accepting constructive feedback.
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience.
- Focusing on what is best not just for us as individuals, but for the overall community.

Examples of unacceptable behavior include without limitation:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind.
* The use of violent, intimidating or bullying language or imagery.
* Trolling, insulting or derogatory comments, and personal or
political attacks.
* Public or private harassment.
* Publishing others' private information, such as a physical or email
address, without their explicit permission.
* Spamming community channels and members, such as sending repeat messages,
low-effort content, or automated messages.
* Phishing or any similar activity;
* Distributing or promoting malware;
* Other conduct which could reasonably be considered inappropriate in a
professional setting.

Please also see the Tailscale Acceptable Use Policy, available at
[tailscale.com/tailscale-aup](https://tailscale.com/tailscale-aup).

# Reporting Incidents

Instances of abusive, harassing, or otherwise unacceptable behavior
may be reported to Tailscale directly via info@tailscale.com, or to
the community leaders or moderators via DM or similar.

- The use of language, imagery or emojis (collectively "content") that is racist, sexist, homophobic, transphobic, or otherwise harassing or discriminatory based on any protected characteristic.
- The use of sexualized content and sexual attention or advances of any kind.
- The use of violent, intimidating or bullying content.
- Trolling, concern trolling, insulting or derogatory comments, and personal or political attacks.
- Public or private harassment.
- Publishing others' personal information, such as a photo, physical address, email address, online profile information, or other personal information, without their explicit permission or with the intent to bully or harass the other person.
- Posting deep fake or other AI generated content about or involving another person without the explicit permission.
- Spamming community channels and members, such as sending repeat messages, low-effort content, or automated messages.
- Phishing or any similar activity.
- Distributing or promoting malware.
- The use of any coded or suggestive content to hide or provoke otherwise unacceptable behavior.
- Other conduct which could reasonably be considered harmful, illegal, or inappropriate in a professional setting.

Please also see the Tailscale Acceptable Use Policy, available at [tailscale.com/tailscale-aup](https://tailscale.com/tailscale-aup).

## Reporting Incidents

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to Tailscale directly via <info@tailscale.com>, or to the community leaders or moderators via DM or similar.
All complaints will be reviewed and investigated promptly and fairly.
We will respect the privacy and safety of the reporter of any issues.

Please note that this community is not moderated by staff 24/7, and we
do not have, and do not undertake, any obligation to prescreen, monitor,
edit, or remove any content or data, or to actively seek facts or
circumstances indicating illegal activity. While we strive to keep the
community safe and welcoming, moderation may not be immediate at all hours.
Please note that this community is not moderated by staff 24/7, and we do not have, and do not undertake, any obligation to prescreen, monitor, edit, or remove any content or data, or to actively seek facts or circumstances indicating illegal activity.
While we strive to keep the community safe and welcoming, moderation may not be immediate at all hours.
If you encounter any issues, report them using the appropriate channels.

## Enforcement

Community leaders and moderators are responsible for clarifying and
enforcing our standards of acceptable behavior and will take appropriate
and fair corrective action in response to any behavior that they deem
inappropriate, threatening, offensive, or harmful.
## Enforcement Guidelines

Community leaders and moderators have the right and responsibility to remove,
edit, or reject comments, commits, code, wiki edits, issues, and other
contributions that are not aligned to this Community Code of Conduct.
Tailscale retains full discretion to take action (or not) in response
to a violation of these guidelines with or without notice or liability
to you. We will interpret our policies and resolve disputes in favor of
protecting users, customers, the public, our community and our company,
as a whole.
Community leaders and moderators are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

## Enforcement Guidelines
Community leaders and moderators have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Community Code of Conduct.
Tailscale retains full discretion to take action (or not) in response to a violation of these guidelines with or without notice or liability to you.
We will interpret our policies and resolve disputes in favor of protecting users, customers, the public, our community and our company, as a whole.

Community leaders will follow these Community Impact Guidelines in
determining the consequences for any action they deem in violation of
this Code of Conduct:
Community leaders will follow these community enforcement guidelines in determining the consequences for any action they deem in violation of this Code of Conduct,
and retain full discretion to apply the enforcement guidelines as necessary depending on the circumstances:

### 1. Correction

Community Impact: Use of inappropriate language or other behavior
deemed unprofessional or unwelcome in the community.
Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

Consequence: A private, written warning from community leaders,
providing clarity around the nature of the violation and an
explanation of why the behavior was inappropriate. A public apology
may be requested.
Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate.
A public apology may be requested.

### 2. Warning

Community Impact: A violation through a single incident or series
of actions.
Community Impact: A violation through a single incident or series of actions.

Consequence: A warning with consequences for continued
behavior. No interaction with the people involved, including
unsolicited interaction with those enforcing this Community Code of Conduct,
for a specified period of time. This includes avoiding interactions in
community spaces as well as external channels like social
media. Violating these terms may lead to a temporary or permanent ban.
Consequence: A warning with consequences for continued behavior.
No interaction with the people involved, including unsolicited interaction with those enforcing this Community Code of Conduct, for a specified period of time.
This includes avoiding interactions in community spaces as well as external channels like social media.
Violating these terms may lead to a temporary or permanent ban.

### 3. Temporary Ban

Community Impact: A serious violation of community standards,
including sustained inappropriate behavior.
Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

Consequence: A temporary ban from any sort of interaction or
public communication with the community for a specified period of
time. No public or private interaction with the people involved,
including unsolicited interaction with those enforcing the Code of Conduct,
is allowed during this period. Violating these terms may lead to a permanent ban.
Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time.
No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

Community Impact: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of
an individual, or aggression toward or disparagement of
classes of individuals.
Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

Consequence: A permanent ban from any sort of public interaction
within the community.
Consequence: A permanent ban from any sort of public interaction within the community.

## Acceptable Use Policy

Violation of this Community Code of Conduct may also violate the
Tailscale Acceptable Use Policy, which may result in suspension or
termination of your Tailscale account. For more information, please
see the Tailscale Acceptable Use Policy, available at
[tailscale.com/tailscale-aup](https://tailscale.com/tailscale-aup).
Violation of this Community Code of Conduct may also violate the Tailscale Acceptable Use Policy, which may result in suspension or termination of your Tailscale account.
For more information, please see the Tailscale Acceptable Use Policy, available at [tailscale.com/tailscale-aup](https://tailscale.com/tailscale-aup).

## Privacy

Please see the Tailscale [Privacy Policy](http://tailscale.com/privacy-policy)
for more information about how Tailscale collects, uses, discloses and protects
information.
Please see the Tailscale [Privacy Policy](https://tailscale.com/privacy-policy) for more information about how Tailscale collects, uses, discloses and protects information.

## Attribution

This Code of Conduct is adapted from the [Contributor
Covenant][homepage], version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at <https://www.contributor-covenant.org/version/2/0/code_of_conduct.html>.

Community Impact Guidelines were inspired by [Mozilla's code of
conduct enforcement ladder](https://github.com/mozilla/diversity).
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the
FAQ at https://www.contributor-covenant.org/faq. Translations are
available at https://www.contributor-covenant.org/translations.

For answers to common questions about this code of conduct, see the FAQ at <https://www.contributor-covenant.org/faq>.
Translations are available at <https://www.contributor-covenant.org/translations>.
2 changes: 1 addition & 1 deletion VERSION.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.90.8
1.92.5
18 changes: 9 additions & 9 deletions appc/appconnector.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ import (
"net/netip"
"slices"
"strings"
"sync"
"time"

"tailscale.com/syncs"
"tailscale.com/types/appctype"
"tailscale.com/types/logger"
"tailscale.com/types/views"
Expand Down Expand Up @@ -139,7 +139,7 @@ type AppConnector struct {
hasStoredRoutes bool

// mu guards the fields that follow
mu sync.Mutex
mu syncs.Mutex

// domains is a map of lower case domain names with no trailing dot, to an
// ordered list of resolved IP addresses.
Expand Down Expand Up @@ -203,12 +203,12 @@ func NewAppConnector(c Config) *AppConnector {
ac.wildcards = c.RouteInfo.Wildcards
ac.controlRoutes = c.RouteInfo.Control
}
ac.writeRateMinute = newRateLogger(time.Now, time.Minute, func(c int64, s time.Time, l int64) {
ac.logf("routeInfo write rate: %d in minute starting at %v (%d routes)", c, s, l)
metricStoreRoutes(c, l)
ac.writeRateMinute = newRateLogger(time.Now, time.Minute, func(c int64, s time.Time, ln int64) {
ac.logf("routeInfo write rate: %d in minute starting at %v (%d routes)", c, s, ln)
metricStoreRoutes(c, ln)
})
ac.writeRateDay = newRateLogger(time.Now, 24*time.Hour, func(c int64, s time.Time, l int64) {
ac.logf("routeInfo write rate: %d in 24 hours starting at %v (%d routes)", c, s, l)
ac.writeRateDay = newRateLogger(time.Now, 24*time.Hour, func(c int64, s time.Time, ln int64) {
ac.logf("routeInfo write rate: %d in 24 hours starting at %v (%d routes)", c, s, ln)
})
return ac
}
Expand Down Expand Up @@ -510,8 +510,8 @@ func (e *AppConnector) addDomainAddrLocked(domain string, addr netip.Addr) {
slices.SortFunc(e.domains[domain], compareAddr)
}

func compareAddr(l, r netip.Addr) int {
return l.Compare(r)
func compareAddr(a, b netip.Addr) int {
return a.Compare(b)
}

// routesWithout returns a without b where a and b
Expand Down
61 changes: 61 additions & 0 deletions appc/ippool.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause

package appc

import (
"errors"
"net/netip"

"go4.org/netipx"
)

// errPoolExhausted is returned when there are no more addresses to iterate over.
var errPoolExhausted = errors.New("ip pool exhausted")

// ippool allows for iteration over all the addresses within a netipx.IPSet.
// netipx.IPSet has a Ranges call that returns the "minimum and sorted set of IP ranges that covers [the set]".
// netipx.IPRange is "an inclusive range of IP addresses from the same address family.". So we can iterate over
// all the addresses in the set by keeping a track of the last address we returned, calling Next on the last address
// to get the new one, and if we run off the edge of the current range, starting on the next one.
type ippool struct {
// ranges defines the addresses in the pool
ranges []netipx.IPRange
// last is internal tracking of which the last address provided was.
last netip.Addr
// rangeIdx is internal tracking of which netipx.IPRange from the IPSet we are currently on.
rangeIdx int
}

func newIPPool(ipset *netipx.IPSet) *ippool {
if ipset == nil {
return &ippool{}
}
return &ippool{ranges: ipset.Ranges()}
}

// next returns the next address from the set, or errPoolExhausted if we have
// iterated over the whole set.
func (ipp *ippool) next() (netip.Addr, error) {
if ipp.rangeIdx >= len(ipp.ranges) {
// ipset is empty or we have iterated off the end
return netip.Addr{}, errPoolExhausted
}
if !ipp.last.IsValid() {
// not initialized yet
ipp.last = ipp.ranges[0].From()
return ipp.last, nil
}
currRange := ipp.ranges[ipp.rangeIdx]
if ipp.last == currRange.To() {
// then we need to move to the next range
ipp.rangeIdx++
if ipp.rangeIdx >= len(ipp.ranges) {
return netip.Addr{}, errPoolExhausted
}
ipp.last = ipp.ranges[ipp.rangeIdx].From()
return ipp.last, nil
}
ipp.last = ipp.last.Next()
return ipp.last, nil
}
Loading
Loading