fn find_best_route<'a>(&self, routes: &'a RouteList) -> Option<&'a RouteEntry> { let source_table = self.source_table.read().unwrap(); let current = routes.selected(); let best = routes .iter() .filter(|re| !re.metric().is_infinite() && source_table.route_feasible(re)) .min_by_key(|re| re.metric() + Metric::from(re.neighbour().link_cost())); if let (Some(best), Some(current)) = (best, current) { // Only switch if the metric is significantly better // OR if the route is directly connected (metric 0). if (best.source() != current.source() || best.neighbour() != current.neighbour()) && !(best.metric() + Metric::from(best.neighbour().link_cost()) < current.metric() + Metric::from(current.neighbour().link_cost()) - SIGNIFICANT_METRIC_IMPROVEMENT || best.metric().is_direct()) { return Some(current); // keep existing route } } best }