mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-01 14:05:39 +00:00
wgengine/netstack: stop UDP forwarding when one side dies
Updates #504 Updates #707 Signed-off-by: Naman Sood <mail@nsood.in>
This commit is contained in:
parent
7325b5a7ba
commit
4c80344e27
@ -419,7 +419,7 @@ func (ns *Impl) forwardUDP(client *gonet.UDPConn, wq *waiter.Queue, clientLocalA
|
|||||||
}
|
}
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
timer := time.AfterFunc(2*time.Minute, func() {
|
timer := time.AfterFunc(2*time.Minute, func() {
|
||||||
ns.logf("netstack: forwarder UDP connection on port %v closed", port)
|
ns.logf("netstack: UDP session between %s and %s timed out", clientRemoteAddr, backendRemoteAddr)
|
||||||
cancel()
|
cancel()
|
||||||
client.Close()
|
client.Close()
|
||||||
backendConn.Close()
|
backendConn.Close()
|
||||||
@ -427,16 +427,17 @@ func (ns *Impl) forwardUDP(client *gonet.UDPConn, wq *waiter.Queue, clientLocalA
|
|||||||
extend := func() {
|
extend := func() {
|
||||||
timer.Reset(2 * time.Minute)
|
timer.Reset(2 * time.Minute)
|
||||||
}
|
}
|
||||||
startPacketCopy(ctx, client, &net.UDPAddr{
|
startPacketCopy(ctx, cancel, client, &net.UDPAddr{
|
||||||
IP: net.ParseIP(clientRemoteAddr.Addr.String()),
|
IP: net.ParseIP(clientRemoteAddr.Addr.String()),
|
||||||
Port: int(clientRemoteAddr.Port),
|
Port: int(clientRemoteAddr.Port),
|
||||||
}, backendConn, ns.logf, extend)
|
}, backendConn, ns.logf, extend)
|
||||||
startPacketCopy(ctx, backendConn, backendRemoteAddr, client, ns.logf, extend)
|
startPacketCopy(ctx, cancel, backendConn, backendRemoteAddr, client, ns.logf, extend)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func startPacketCopy(ctx context.Context, dst net.PacketConn, dstAddr net.Addr, src net.PacketConn, logf logger.Logf, extend func()) {
|
func startPacketCopy(ctx context.Context, cancel context.CancelFunc, dst net.PacketConn, dstAddr net.Addr, src net.PacketConn, logf logger.Logf, extend func()) {
|
||||||
go func() {
|
go func() {
|
||||||
|
defer cancel() // tear down the other direction's copy
|
||||||
pkt := make([]byte, mtu)
|
pkt := make([]byte, mtu)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
@ -457,7 +458,9 @@ func startPacketCopy(ctx context.Context, dst net.PacketConn, dstAddr net.Addr,
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if debugNetstack {
|
||||||
logf("[v2] wrote UDP packet %s -> %s", srcAddr, dstAddr)
|
logf("[v2] wrote UDP packet %s -> %s", srcAddr, dstAddr)
|
||||||
|
}
|
||||||
extend()
|
extend()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user