Skip to content

Deliver ICMP TimeExceeded and DstUnreachable to transport handlers#1

Open
xdqi wants to merge 1 commit into
SagerNet:gofrom
xdqi:feature/icmp-error-dispatch
Open

Deliver ICMP TimeExceeded and DstUnreachable to transport handlers#1
xdqi wants to merge 1 commit into
SagerNet:gofrom
xdqi:feature/icmp-error-dispatch

Conversation

@xdqi
Copy link
Copy Markdown

@xdqi xdqi commented May 4, 2026

Add DeliverTransportPacket calls for ICMPv4/v6 TimeExceeded and DstUnreachable messages in handleICMP. This allows transport protocol handlers registered via SetTransportProtocolHandler to receive ICMP error packets, enabling userspace ICMP forwarders to handle traceroute error responses.

Also adds GetTransportProtocolHandler to retrieve an existing handler (used for wrapping existing handlers with additional behavior).

Existing handleControl behavior is preserved for DstUnreachable.

Changes

  • pkg/tcpip/network/ipv4/icmp.go: Add DeliverTransportPacket for ICMPv4 DstUnreachable and TimeExceeded
  • pkg/tcpip/network/ipv6/icmp.go: Add DeliverTransportPacket for ICMPv6 DstUnreachable and TimeExceeded
  • pkg/tcpip/stack/stack.go: Add GetTransportProtocolHandler method

Add DeliverTransportPacket calls for ICMPv4/v6 TimeExceeded and
DstUnreachable messages in handleICMP. This allows transport protocol
handlers registered via SetTransportProtocolHandler to receive ICMP
error packets, enabling userspace ICMP forwarders to handle traceroute
error responses without relying on OS raw sockets.

Existing handleControl behavior is preserved for DstUnreachable.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant