From 0e80287625661f09f8e99da0171efa65a0293e18 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 17 Feb 2026 13:02:03 +0100 Subject: [PATCH] RAOP: also support link-local addresses for IPv4 Patch by Lairton Lelis da Fonseca Junior (@lairton) Remove the hard skip for IPv4 link-local addresses and add an interface binding (matching the existing IPv6 link-local behavior). The host needs a link-local address on the interface (ip addr add 169.254.x.x/16 dev wlan0 or via NetworkManager +ipv4.addresses). Fixes #4830 --- src/modules/module-raop-discover.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/modules/module-raop-discover.c b/src/modules/module-raop-discover.c index 53032d0be..436972ac0 100644 --- a/src/modules/module-raop-discover.c +++ b/src/modules/module-raop-discover.c @@ -384,10 +384,8 @@ 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); tinfo = TUNNEL_INFO(.name = name); @@ -414,6 +412,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, "raop.ip", "%s%s", at, if_suffix); pw_properties_setf(props, "raop.ifindex", "%d", interface); pw_properties_setf(props, "raop.port", "%u", port);