From c4d28fd497e01f518e2179eeb6009689e962d514 Mon Sep 17 00:00:00 2001 From: naison <895703375@qq.com> Date: Mon, 4 Aug 2025 21:16:38 +0800 Subject: [PATCH] hotfix: heartbeats with gen icmp packet (#683) --- pkg/core/tunhandlerclient.go | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/pkg/core/tunhandlerclient.go b/pkg/core/tunhandlerclient.go index cb25eec9..6d22ab41 100644 --- a/pkg/core/tunhandlerclient.go +++ b/pkg/core/tunhandlerclient.go @@ -204,15 +204,39 @@ func (d *ClientDevice) heartbeats(ctx context.Context) { ticker := time.NewTicker(config.KeepAliveTime) defer ticker.Stop() + var bytes, bytes6 []byte for ; ctx.Err() == nil; <-ticker.C { if srcIPv4 != nil { - util.Ping(ctx, srcIPv4.String(), config.RouterIP.String()) + bytes, err = util.GenICMPPacket(srcIPv4, config.RouterIP) + if err != nil { + plog.G(ctx).Errorf("Failed to generate IPv4 packet: %v", err) + } else { + data := config.LPool.Get().([]byte)[:] + length := copy(data[1:], bytes) + data[0] = 1 + util.SafeWrite(d.tunInbound, &Packet{ + data: data[:], + length: length + 1, + }) + } } if srcIPv6 != nil { - util.Ping(ctx, srcIPv6.String(), config.RouterIP6.String()) + bytes6, err = util.GenICMPPacketIPv6(srcIPv6, config.RouterIP6) + if err != nil { + plog.G(ctx).Errorf("Failed to generate IPv6 packet: %v", err) + } else { + data := config.LPool.Get().([]byte)[:] + length := copy(data[1:], bytes6) + data[0] = 1 + util.SafeWrite(d.tunInbound, &Packet{ + data: data[:], + length: length + 1, + }) + } } + if dockerSrcIPv4 != nil { - util.Ping(ctx, dockerSrcIPv4.String(), config.DockerRouterIP.String()) + _, _ = util.Ping(ctx, dockerSrcIPv4.String(), config.DockerRouterIP.String()) } } }