From 8106d072d5ce9aa7eae92f8f9e510ba7ffebd120 Mon Sep 17 00:00:00 2001 From: hrzlgnm Date: Tue, 6 Aug 2024 22:56:30 +0200 Subject: [PATCH] Skip link local addresses while checking for redundant announcements or query packets (#235) Co-authored-by: keepsimple1 --- src/service_daemon.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/service_daemon.rs b/src/service_daemon.rs index 8ed4c8c..454539b 100644 --- a/src/service_daemon.rs +++ b/src/service_daemon.rs @@ -1205,11 +1205,13 @@ impl Zeroconf { for (_, intf_sock) in self.intf_socks.iter() { let subnet = ifaddr_subnet(&intf_sock.intf.addr); - if subnet_set.contains(&subnet) { + if !intf_sock.intf.is_link_local() && subnet_set.contains(&subnet) { continue; // no need to send again in the same subnet. } if self.broadcast_service_on_intf(info, intf_sock) { - subnet_set.insert(subnet); + if !intf_sock.intf.is_link_local() { + subnet_set.insert(subnet); + } outgoing_addrs.push(intf_sock.intf.ip()); } } @@ -1400,11 +1402,13 @@ impl Zeroconf { let mut subnet_set: HashSet = HashSet::new(); for (_, intf_sock) in self.intf_socks.iter() { - let subnet = ifaddr_subnet(&intf_sock.intf.addr); - if subnet_set.contains(&subnet) { - continue; // no need to send query the same subnet again. + if !intf_sock.intf.is_link_local() { + let subnet = ifaddr_subnet(&intf_sock.intf.addr); + if subnet_set.contains(&subnet) { + continue; // no need to send query the same subnet again. + } + subnet_set.insert(subnet); } - subnet_set.insert(subnet); broadcast_dns_on_intf(&out, intf_sock); } }