From ae67293bcc854684119fe230b2007da4caf641d0 Mon Sep 17 00:00:00 2001 From: mikecarper Date: Fri, 8 May 2026 01:23:03 -0700 Subject: [PATCH] Honor flood retry ignore for echoes --- docs/cli_commands.md | 2 +- examples/simple_repeater/MyMesh.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/cli_commands.md b/docs/cli_commands.md index 1a6e4233..9631a64a 100644 --- a/docs/cli_commands.md +++ b/docs/cli_commands.md @@ -850,7 +850,7 @@ This document provides an overview of CLI commands that can be sent to MeshCore **Default:** empty -**Note:** Ignored prefixes do not count as a heard bridge bucket or as the implicit catch-all bucket when bridge retry decides whether every target has repeated the flood. +**Note:** In non-bridge retry, an echo whose last hop matches an ignored prefix does not cancel a queued retry as successful. In bridge mode, ignored prefixes do not count as a heard bridge bucket or as the implicit catch-all bucket when bridge retry decides whether every target has repeated the flood. --- diff --git a/examples/simple_repeater/MyMesh.cpp b/examples/simple_repeater/MyMesh.cpp index 3fa770e9..f6f515ee 100644 --- a/examples/simple_repeater/MyMesh.cpp +++ b/examples/simple_repeater/MyMesh.cpp @@ -1363,6 +1363,17 @@ bool MyMesh::isFloodRetryEchoTarget(const mesh::Packet* packet, uint8_t progress state->heard_mask |= floodRetryBridgeHeardMask(packet, state->source_bucket, state->progress_marker) & state->target_mask; return (state->heard_mask & state->target_mask) == state->target_mask; } + if (packet->getPathHashCount() == 0) { + return false; + } + uint8_t hash_size = packet->getPathHashSize(); + if (hash_size == 0 || hash_size > MAX_ROUTE_HASH_BYTES) { + return false; + } + const uint8_t* heard_prefix = &packet->path[(packet->getPathHashCount() - 1) * hash_size]; + if (floodRetryPrefixIgnored(heard_prefix, hash_size)) { + return false; + } if (hasFloodRetryPrefixes()) { return floodRetryLastHopMatches(packet); }