From b7b494b7cfaba642cded88073999bdefee472332 Mon Sep 17 00:00:00 2001 From: bt90 Date: Tue, 23 Dec 2025 19:56:20 +0100 Subject: [PATCH] fix(beacon): skip point-to-point interfaces on Android (#10504) --- lib/beacon/broadcast.go | 6 ++++++ lib/beacon/multicast.go | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/beacon/broadcast.go b/lib/beacon/broadcast.go index 8f4e99372..758548391 100644 --- a/lib/beacon/broadcast.go +++ b/lib/beacon/broadcast.go @@ -14,6 +14,7 @@ import ( "time" "github.com/syncthing/syncthing/internal/slogutil" + "github.com/syncthing/syncthing/lib/build" "github.com/syncthing/syncthing/lib/netutil" ) @@ -64,6 +65,11 @@ func writeBroadcasts(ctx context.Context, inbox <-chan []byte, port int) error { continue } + if build.IsAndroid && intf.Flags&net.FlagPointToPoint != 0 { + // skip cellular interfaces + continue + } + addrs, err := netutil.InterfaceAddrsByInterface(&intf) if err != nil { l.Debugln("Failed to list interface addresses:", err) diff --git a/lib/beacon/multicast.go b/lib/beacon/multicast.go index cbce411e2..49002a079 100644 --- a/lib/beacon/multicast.go +++ b/lib/beacon/multicast.go @@ -13,6 +13,7 @@ import ( "net" "time" + "github.com/syncthing/syncthing/lib/build" "github.com/syncthing/syncthing/lib/netutil" "golang.org/x/net/ipv6" @@ -74,6 +75,11 @@ func writeMulticasts(ctx context.Context, inbox <-chan []byte, addr string) erro continue } + if build.IsAndroid && intf.Flags&net.FlagPointToPoint != 0 { + // skip cellular interfaces + continue + } + wcm.IfIndex = intf.Index pconn.SetWriteDeadline(time.Now().Add(time.Second)) _, err = pconn.WriteTo(bs, wcm, gaddr) @@ -129,8 +135,12 @@ func readMulticasts(ctx context.Context, outbox chan<- recv, addr string) error pconn := ipv6.NewPacketConn(conn) joined := 0 for _, intf := range intfs { - if intf.Flags&net.FlagMulticast == 0 { - slog.DebugContext(ctx, "Not joining multicast group on non-multicast interface", "name", intf.Name, slog.String("flags", intf.Flags.String())) + if intf.Flags&net.FlagRunning == 0 || intf.Flags&net.FlagMulticast == 0 { + continue + } + + if build.IsAndroid && intf.Flags&net.FlagPointToPoint != 0 { + // skip cellular interfaces continue }