From bebc8d67f32fb718912539eea527eba3b7ae008a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Mon, 1 Jun 2026 17:40:28 +0800 Subject: [PATCH] stack: Add icmp timeout --- stack.go | 1 + stack_gvisor.go | 4 +++- stack_system.go | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/stack.go b/stack.go index 7c34c79..a6f6043 100644 --- a/stack.go +++ b/stack.go @@ -28,6 +28,7 @@ type StackOptions struct { Tun Tun TunOptions Options UDPTimeout time.Duration + ICMPTimeout time.Duration Handler Handler Logger logger.Logger ForwarderBindInterface bool diff --git a/stack_gvisor.go b/stack_gvisor.go index ca7dcdc..63df41a 100644 --- a/stack_gvisor.go +++ b/stack_gvisor.go @@ -34,6 +34,7 @@ type GVisor struct { inet4LoopbackAddress []netip.Addr inet6LoopbackAddress []netip.Addr udpTimeout time.Duration + icmpTimeout time.Duration broadcastAddr netip.Addr handler Handler logger logger.Logger @@ -74,6 +75,7 @@ func NewGVisor( inet4LoopbackAddress: options.TunOptions.Inet4LoopbackAddress, inet6LoopbackAddress: options.TunOptions.Inet6LoopbackAddress, udpTimeout: options.UDPTimeout, + icmpTimeout: options.ICMPTimeout, broadcastAddr: BroadcastAddr(options.TunOptions.Inet4Address), handler: options.Handler, logger: options.Logger, @@ -93,7 +95,7 @@ func (t *GVisor) Start() error { } ipStack.SetTransportProtocolHandler(tcp.ProtocolNumber, NewTCPForwarderWithLoopback(t.ctx, ipStack, t.handler, t.inet4LoopbackAddress, t.inet6LoopbackAddress, t.tun).HandlePacket) ipStack.SetTransportProtocolHandler(udp.ProtocolNumber, NewUDPForwarder(t.ctx, ipStack, t.handler, t.udpTimeout).HandlePacket) - icmpForwarder := NewICMPForwarder(t.ctx, ipStack, t.handler, t.udpTimeout) + icmpForwarder := NewICMPForwarder(t.ctx, ipStack, t.handler, t.icmpTimeout) icmpForwarder.SetLocalAddresses(t.inet4Address, t.inet6Address) ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber4, icmpForwarder.HandlePacket) ipStack.SetTransportProtocolHandler(icmp.ProtocolNumber6, icmpForwarder.HandlePacket) diff --git a/stack_system.go b/stack_system.go index cef0a07..030eee1 100644 --- a/stack_system.go +++ b/stack_system.go @@ -39,6 +39,7 @@ type System struct { inet4LoopbackAddress []netip.Addr inet6LoopbackAddress []netip.Addr udpTimeout time.Duration + icmpTimeout time.Duration tcpListener net.Listener tcpListener6 net.Listener tcpPort uint16 @@ -69,6 +70,7 @@ func NewSystem(options StackOptions) (Stack, error) { inet4LoopbackAddress: options.TunOptions.Inet4LoopbackAddress, inet6LoopbackAddress: options.TunOptions.Inet6LoopbackAddress, udpTimeout: options.UDPTimeout, + icmpTimeout: options.ICMPTimeout, handler: options.Handler, logger: options.Logger, inet4Prefixes: options.TunOptions.Inet4Address, @@ -160,7 +162,7 @@ func (s *System) start() error { } s.tcpNat = NewNat(s.ctx, s.udpTimeout) s.udpNat = udpnat.New(s.handler, s.preparePacketConnection, s.udpTimeout, false) - s.directNat = NewDirectRouteMapping(s.udpTimeout) + s.directNat = NewDirectRouteMapping(s.icmpTimeout) return nil }