fix(utils): move ping logic after peer info lookup and deduplicate address retrieval logic
This commit is contained in:
+2
-10
@@ -88,11 +88,7 @@ func runForwarder(ctx context.Context, srv *tsnet.Server, rule ForwardRule, tag
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runTCPForwarder(ctx context.Context, srv *tsnet.Server, rule ForwardRule, logger *slog.Logger) {
|
func runTCPForwarder(ctx context.Context, srv *tsnet.Server, rule ForwardRule, logger *slog.Logger) {
|
||||||
ip4, ip6 := srv.TailscaleIPs()
|
ip := getSelfTsnetAddr(srv)
|
||||||
ip := ip4
|
|
||||||
if !ip.IsValid() {
|
|
||||||
ip = ip6
|
|
||||||
}
|
|
||||||
ln, err := srv.Listen("tcp", fmt.Sprintf("%s:%d", ip.String(), rule.TailscalePort))
|
ln, err := srv.Listen("tcp", fmt.Sprintf("%s:%d", ip.String(), rule.TailscalePort))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("failed to listen", "error", err)
|
logger.Error("failed to listen", "error", err)
|
||||||
@@ -178,11 +174,7 @@ func getConnType(ctx context.Context, srv *tsnet.Server, remoteAddrStr string) s
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runUDPForwarder(ctx context.Context, srv *tsnet.Server, rule ForwardRule, logger *slog.Logger) {
|
func runUDPForwarder(ctx context.Context, srv *tsnet.Server, rule ForwardRule, logger *slog.Logger) {
|
||||||
ip4, ip6 := srv.TailscaleIPs()
|
ip := getSelfTsnetAddr(srv)
|
||||||
ip := ip4
|
|
||||||
if !ip.IsValid() {
|
|
||||||
ip = ip6
|
|
||||||
}
|
|
||||||
ln, err := srv.Listen("udp", fmt.Sprintf("%s:%d", ip.String(), rule.TailscalePort))
|
ln, err := srv.Listen("udp", fmt.Sprintf("%s:%d", ip.String(), rule.TailscalePort))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("failed to listen", "error", err)
|
logger.Error("failed to listen", "error", err)
|
||||||
|
|||||||
+18
-10
@@ -109,6 +109,14 @@ func getPeerFromRules(ctx context.Context, srv *tsnet.Server, rules map[string][
|
|||||||
|
|
||||||
func peerConnectivityLogic(ctx context.Context, lc *local.Client, relativePeers []netip.Addr, logger *slog.Logger) {
|
func peerConnectivityLogic(ctx context.Context, lc *local.Client, relativePeers []netip.Addr, logger *slog.Logger) {
|
||||||
for _, peer := range relativePeers {
|
for _, peer := range relativePeers {
|
||||||
|
loLog := logger.With("peer", peer)
|
||||||
|
peerInfo, err := lc.WhoIs(ctx, peer.String())
|
||||||
|
if err != nil {
|
||||||
|
loLog.Warn("failed to get peer info", "err", err)
|
||||||
|
} else {
|
||||||
|
loLog = loLog.With("name", peerInfo.Node.ComputedName)
|
||||||
|
}
|
||||||
|
|
||||||
ping, err := func() (*ipnstate.PingResult, error) {
|
ping, err := func() (*ipnstate.PingResult, error) {
|
||||||
cnclCtx, cancel := context.WithTimeout(ctx, 5*time.Second)
|
cnclCtx, cancel := context.WithTimeout(ctx, 5*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
@@ -117,22 +125,13 @@ func peerConnectivityLogic(ctx context.Context, lc *local.Client, relativePeers
|
|||||||
return ping, err
|
return ping, err
|
||||||
}()
|
}()
|
||||||
|
|
||||||
loLog := logger.With("peer", peer)
|
|
||||||
peerInfo, err := lc.WhoIs(ctx, peer.String())
|
|
||||||
if err != nil {
|
|
||||||
loLog.Warn("failed to get peer info", "err", err)
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
loLog = loLog.With("name", peerInfo.Node.ComputedName)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, context.DeadlineExceeded) {
|
if errors.Is(err, context.DeadlineExceeded) {
|
||||||
loLog.Warn("connectivity: peer ping timeout")
|
loLog.Warn("connectivity: peer ping timeout")
|
||||||
} else {
|
} else {
|
||||||
loLog.Warn("connectivity: failed to ping peer", "err", err)
|
loLog.Warn("connectivity: failed to ping peer", "err", err)
|
||||||
}
|
}
|
||||||
return
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var connect string
|
var connect string
|
||||||
@@ -180,3 +179,12 @@ func StartPeerConnectivityDiagnostics(ctx context.Context, logger *slog.Logger,
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getSelfTsnetAddr(srv *tsnet.Server) netip.Addr {
|
||||||
|
ip4, ip6 := srv.TailscaleIPs()
|
||||||
|
ip := ip4
|
||||||
|
if !ip.IsValid() {
|
||||||
|
ip = ip6
|
||||||
|
}
|
||||||
|
return ip
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user