mirror of
https://github.com/espressif/openthread.git
synced 2026-09-14 21:20:11 +00:00
[spinel] return error from SaveFrame if not enough space is available (#9244)
This commit is contained in:
@@ -309,14 +309,27 @@ public:
|
|||||||
*
|
*
|
||||||
* Saved frame can be retrieved later using `GetNextSavedFrame()`.
|
* Saved frame can be retrieved later using `GetNextSavedFrame()`.
|
||||||
*
|
*
|
||||||
|
* @retval OT_ERROR_NONE Successfully saved the buffer and prepared the write pointer for the next frame.
|
||||||
|
* @retval OT_ERROR_NO_BUFS Insufficient buffer space.
|
||||||
*/
|
*/
|
||||||
void SaveFrame(void)
|
otError SaveFrame(void)
|
||||||
{
|
{
|
||||||
Encoding::LittleEndian::WriteUint16(GetSkipLength() + GetLength(), mWriteFrameStart + kHeaderTotalLengthOffset);
|
otError error = OT_ERROR_NONE;
|
||||||
mWriteFrameStart = mWritePointer;
|
|
||||||
IgnoreError(SetSkipLength(0));
|
// If the next header will overflow the buffer, we can't save the frame.
|
||||||
mWritePointer = GetFrame();
|
if (!CanWrite(kHeaderSize))
|
||||||
mRemainingLength = static_cast<uint16_t>(mBuffer + kSize - mWritePointer);
|
{
|
||||||
|
error = OT_ERROR_NO_BUFS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Encoding::LittleEndian::WriteUint16(GetSkipLength() + GetLength(),
|
||||||
|
mWriteFrameStart + kHeaderTotalLengthOffset);
|
||||||
|
mWriteFrameStart = mWritePointer;
|
||||||
|
IgnoreError(SetSkipLength(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -530,13 +530,14 @@ void RadioSpinel<InterfaceType>::HandleNotification(SpinelInterface::RxFrameBuff
|
|||||||
}
|
}
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
if (shouldSaveFrame)
|
if (!shouldSaveFrame || aFrameBuffer.SaveFrame() != OT_ERROR_NONE)
|
||||||
{
|
|
||||||
aFrameBuffer.SaveFrame();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
aFrameBuffer.DiscardFrame();
|
aFrameBuffer.DiscardFrame();
|
||||||
|
|
||||||
|
if (shouldSaveFrame)
|
||||||
|
{
|
||||||
|
otLogCritPlat("RX Spinel buffer full, dropped incoming frame");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateParseErrorCount(error);
|
UpdateParseErrorCount(error);
|
||||||
|
|||||||
Reference in New Issue
Block a user