mirror of
https://github.com/tailscale/tailscale.git
synced 2025-01-05 23:07:44 +00:00
wgengine/magicsock: reset AddrSet states on Rebind
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
c0697e1feb
commit
614261d00d
@ -584,6 +584,8 @@ func shouldSprayPacket(b []byte) bool {
|
||||
|
||||
var logPacketDests, _ = strconv.ParseBool(os.Getenv("DEBUG_LOG_PACKET_DESTS"))
|
||||
|
||||
const sprayPeriod = 3 * time.Second
|
||||
|
||||
// appendDests appends to dsts the destinations that b should be
|
||||
// written to in order to reach as. Some of the returned UDPAddrs may
|
||||
// be fake addrs representing DERP servers.
|
||||
@ -606,7 +608,6 @@ func (as *AddrSet) appendDests(dsts []*net.UDPAddr, b []byte) (_ []*net.UDPAddr,
|
||||
// Multiple packets are necessary because we have to both establish the
|
||||
// NAT mappings between two peers *and use* the mappings to switch away
|
||||
// from DERP to a higher-priority UDP endpoint.
|
||||
const sprayPeriod = 3 * time.Second
|
||||
const sprayFreq = 250 * time.Millisecond
|
||||
if spray {
|
||||
as.lastSpray = now
|
||||
@ -1477,6 +1478,20 @@ func (c *Conn) Rebind() {
|
||||
return
|
||||
}
|
||||
c.pconn4.Reset(packetConn.(*net.UDPConn))
|
||||
c.resetAddrSetStates()
|
||||
}
|
||||
|
||||
// resetAddrSetStates resets the preferred address for all peers and
|
||||
// re-enables spraying.
|
||||
// This is called when connectivity changes enough that we no longer
|
||||
// trust the old routes.
|
||||
func (c *Conn) resetAddrSetStates() {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
for _, as := range c.addrsByKey {
|
||||
as.curAddr = -1
|
||||
as.stopSpray = as.timeNow().Add(sprayPeriod)
|
||||
}
|
||||
}
|
||||
|
||||
// AddrSet is a set of UDP addresses that implements wireguard/conn.Endpoint.
|
||||
|
Loading…
x
Reference in New Issue
Block a user