[trel] explicitly request trel ack for broadcast tx to known neighbors (#11537)

This commit modifies the TREL module to explicitly request TREL acknowledgements
for broadcast transmissions directed to known neighbors. This ensures quicker
discovery of when a TREL peer is no longer available.
This commit is contained in:
Abtin Keshavarzian
2025-05-29 19:00:22 -07:00
committed by GitHub
parent 6d40977782
commit 976c2bc4a6
3 changed files with 19 additions and 2 deletions
+17 -1
View File
@@ -110,7 +110,7 @@ const Counters *Interface::GetCounters(void) const { return otPlatTrelGetCounter
void Interface::ResetCounters(void) { otPlatTrelResetCounters(&GetInstance()); }
Error Interface::Send(const Packet &aPacket, bool aIsDiscovery)
Error Interface::Send(Packet &aPacket, bool aIsDiscovery)
{
Error error = kErrorNone;
Peer *peerEntry;
@@ -123,12 +123,28 @@ Error Interface::Send(const Packet &aPacket, bool aIsDiscovery)
case Header::kTypeBroadcast:
for (const Peer &peer : Get<PeerTable>())
{
uint16_t originalPacketNumber = aPacket.GetHeader().GetPacketNumber();
Header::AckMode originalAckMode = aPacket.GetHeader().GetAckMode();
Neighbor *neighbor;
if (!aIsDiscovery && (peer.GetExtPanId() != Get<MeshCoP::ExtendedPanIdManager>().GetExtPanId()))
{
continue;
}
neighbor = Get<NeighborTable>().FindNeighbor(peer.GetExtAddress(), Neighbor::kInStateAnyExceptInvalid);
if (neighbor != nullptr)
{
aPacket.GetHeader().SetAckMode(Header::kAckRequested);
aPacket.GetHeader().SetPacketNumber(neighbor->mTrelTxPacketNumber++);
neighbor->mTrelCurrentPendingAcks++;
}
otPlatTrelSend(&GetInstance(), aPacket.GetBuffer(), aPacket.GetLength(), &peer.mSockAddr);
aPacket.GetHeader().SetPacketNumber(originalPacketNumber);
aPacket.GetHeader().SetAckMode(originalAckMode);
}
break;
+1 -1
View File
@@ -149,7 +149,7 @@ private:
// Methods used by `Trel::Link`.
void Init(void);
Error Send(const Packet &aPacket, bool aIsDiscovery = false);
Error Send(Packet &aPacket, bool aIsDiscovery = false);
// Callbacks from `otPlatTrel`.
void HandleReceived(uint8_t *aBuffer, uint16_t aLength, const Ip6::SockAddr &aSenderAddr);
+1
View File
@@ -220,6 +220,7 @@ private:
class NeighborInfo
{
friend class Link;
friend class Interface;
private:
uint32_t GetPendingTrelAckCount(void) const { return (mTrelPreviousPendingAcks + mTrelCurrentPendingAcks); }