From 7956d7ceaf9026f304a1c10a3c0c2b49f29a7674 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 17 Feb 2026 13:08:56 +0100 Subject: [PATCH] snapcast: support IPv4 link-local addresses --- src/modules/module-snapcast-discover.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/modules/module-snapcast-discover.c b/src/modules/module-snapcast-discover.c index 3568d82d4..e929be9c0 100644 --- a/src/modules/module-snapcast-discover.c +++ b/src/modules/module-snapcast-discover.c @@ -640,10 +640,9 @@ static void resolver_cb(AvahiServiceResolver *r, AvahiIfIndex interface, AvahiPr } avahi_address_snprint(at, sizeof(at), a); - if (spa_strstartswith(at, link_local_range)) { - pw_log_info("found link-local ip address %s - skipping tunnel creation", at); - goto done; - } + if (spa_strstartswith(at, link_local_range)) + pw_log_info("found link-local ip address %s for '%s'", at, name); + pw_log_info("%s %s", name, at); tinfo = TUNNEL_INFO(.name = name, .port = port); @@ -671,6 +670,11 @@ static void resolver_cb(AvahiServiceResolver *r, AvahiIfIndex interface, AvahiPr (a->data.ipv6.address[1] & 0xc0) == 0x80) snprintf(if_suffix, sizeof(if_suffix), "%%%d", interface); + /* For IPv4 link-local, bind to the discovery interface */ + if (a->proto == AVAHI_PROTO_INET && + spa_strstartswith(at, link_local_range)) + snprintf(if_suffix, sizeof(if_suffix), "%%%d", interface); + pw_properties_setf(props, "snapcast.ip", "%s%s", at, if_suffix); pw_properties_setf(props, "snapcast.ifindex", "%d", interface); pw_properties_setf(props, "snapcast.port", "%u", port);