fix(router): clear failed reliable send retries (#11267)

* fix(router): clear failed reliable send retries

* test(router): cover failed interface enqueue

* fix(router): retain retries after duty cycle limits
This commit is contained in:
Benjamin Faershtein
2026-07-30 11:00:32 +00:00
committed by GitHub
co-authored by GitHub
parent 047c4e9feb
commit 9a37250438
2 changed files with 81 additions and 4 deletions
+10 -2
View File
@@ -16,6 +16,9 @@
*/
ErrorCode ReliableRouter::send(meshtastic_MeshPacket *p)
{
const GlobalPacketId key(p);
const bool retransmitting = p->want_ack;
if (p->want_ack) {
DEBUG_HEAP_BEFORE;
auto copy = packetPool.allocCopy(*p);
@@ -34,7 +37,12 @@ ErrorCode ReliableRouter::send(meshtastic_MeshPacket *p)
}
}
return isBroadcast(p->to) ? FloodingRouter::send(p) : NextHopRouter::send(p);
ErrorCode result = isBroadcast(p->to) ? FloodingRouter::send(p) : NextHopRouter::send(p);
// Duty-cycle rejections may clear before the scheduled retry.
if (retransmitting && result != ERRNO_OK && result != meshtastic_Routing_Error_DUTY_CYCLE_LIMIT)
stopRetransmission(key);
return result;
}
bool ReliableRouter::shouldFilterReceived(const meshtastic_MeshPacket *p)
@@ -196,4 +204,4 @@ bool ReliableRouter::shouldSuccessAckWithWantAck(const meshtastic_MeshPacket *p)
}
return false;
}
}