[ip6] move Message::Ownership enum to Ip6 class (#11696)

This commit moves the `Message::Ownership` enum definition to the
`Ip6` class. This enum is exclusively used by the `Ip6` class to
determine whether to clone a message or take direct custody. This
model is not intended for use by other components. `OwnerPtr<>` is
the recommended approach for conveying ownership transfers.
This commit is contained in:
Abtin Keshavarzian
2025-07-10 12:11:24 -07:00
committed by GitHub
parent b0100b0268
commit 0d91ffc5ca
3 changed files with 18 additions and 31 deletions
-19
View File
@@ -326,25 +326,6 @@ public:
static constexpr uint8_t kNumPriorities = 4; ///< Number of priority levels.
/**
* Represents the message ownership model when a `Message` instance is passed to a method/function.
*/
enum Ownership : uint8_t
{
/**
* This value indicates that the method/function receiving a `Message` instance should take custody of the
* message (e.g., the method should `Free()` the message if no longer needed).
*/
kTakeCustody,
/**
* This value indicates that the method/function receiving a `Message` instance does not own the message (e.g.,
* it should not `Free()` or `Enqueue()` it in a queue). The receiving method/function should create a
* copy/clone of the message to keep (if/when needed).
*/
kCopyToUse,
};
/**
* Represents an IPv6 message origin.
*/
+9 -9
View File
@@ -823,7 +823,7 @@ Error Ip6::HandleExtensionHeaders(OwnedPtr<Message> &aMessagePtr,
break;
case kProtoFragment:
IgnoreError(PassToHost(aMessagePtr, aHeader, aNextHeader, aReceive, Message::kCopyToUse));
IgnoreError(PassToHost(aMessagePtr, aHeader, aNextHeader, aReceive, kCopyMessageToUse));
SuccessOrExit(error = HandleFragment(*aMessagePtr));
break;
@@ -847,15 +847,15 @@ exit:
Error Ip6::TakeOrCopyMessagePtr(OwnedPtr<Message> &aTargetPtr,
OwnedPtr<Message> &aMessagePtr,
Message::Ownership aMessageOwnership)
MessageOwnership aMessageOwnership)
{
switch (aMessageOwnership)
{
case Message::kTakeCustody:
case kTakeMessageCustody:
aTargetPtr = aMessagePtr.PassOwnership();
break;
case Message::kCopyToUse:
case kCopyMessageToUse:
aTargetPtr.Reset(aMessagePtr->Clone());
break;
}
@@ -866,7 +866,7 @@ Error Ip6::TakeOrCopyMessagePtr(OwnedPtr<Message> &aTargetPtr,
Error Ip6::Receive(Header &aIp6Header,
OwnedPtr<Message> &aMessagePtr,
uint8_t aIpProto,
Message::Ownership aMessageOwnership)
MessageOwnership aMessageOwnership)
{
Error error = kErrorNone;
OwnedPtr<Message> messagePtr;
@@ -921,7 +921,7 @@ Error Ip6::PassToHost(OwnedPtr<Message> &aMessagePtr,
const Header &aHeader,
uint8_t aIpProto,
bool aReceive,
Message::Ownership aMessageOwnership)
MessageOwnership aMessageOwnership)
{
// This method passes the message to host by invoking the
// registered IPv6 receive callback. When NAT64 is enabled, it
@@ -1208,7 +1208,7 @@ Error Ip6::HandleDatagram(OwnedPtr<Message> aMessagePtr, bool aIsReassembled)
bool multicastLoop = aMessagePtr->GetMulticastLoop();
SuccessOrExit(error = TakeOrCopyMessagePtr(messagePtr, aMessagePtr,
forwardThread ? Message::kCopyToUse : Message::kTakeCustody));
forwardThread ? kCopyMessageToUse : kTakeMessageCustody));
messagePtr->SetMulticastLoop(multicastLoop);
messagePtr->RemoveHeader(messagePtr->GetOffset());
@@ -1223,12 +1223,12 @@ Error Ip6::HandleDatagram(OwnedPtr<Message> aMessagePtr, bool aIsReassembled)
if ((forwardHost || receive) && !aIsReassembled)
{
error = PassToHost(aMessagePtr, header, nextHeader, receive,
(receive || forwardThread) ? Message::kCopyToUse : Message::kTakeCustody);
(receive || forwardThread) ? kCopyMessageToUse : kTakeMessageCustody);
}
if (receive)
{
error = Receive(header, aMessagePtr, nextHeader, forwardThread ? Message::kCopyToUse : Message::kTakeCustody);
error = Receive(header, aMessagePtr, nextHeader, forwardThread ? kCopyMessageToUse : kTakeMessageCustody);
}
if (forwardThread)
+9 -3
View File
@@ -349,10 +349,16 @@ private:
static constexpr uint16_t kMinimalMtu = 1280;
enum MessageOwnership : uint8_t
{
kTakeMessageCustody,
kCopyMessageToUse,
};
static uint8_t PriorityToDscp(Message::Priority aPriority);
static Error TakeOrCopyMessagePtr(OwnedPtr<Message> &aTargetPtr,
OwnedPtr<Message> &aMessagePtr,
Message::Ownership aMessageOwnership);
MessageOwnership aMessageOwnership);
void EnqueueDatagram(Message &aMessage);
void HandleSendQueue(void);
@@ -365,7 +371,7 @@ private:
const Header &aHeader,
uint8_t aIpProto,
bool aReceive,
Message::Ownership aMessageOwnership);
MessageOwnership aMessageOwnership);
Error HandleExtensionHeaders(OwnedPtr<Message> &aMessagePtr,
const Header &aHeader,
uint8_t &aNextHeader,
@@ -387,7 +393,7 @@ private:
Error Receive(Header &aIp6Header,
OwnedPtr<Message> &aMessagePtr,
uint8_t aIpProto,
Message::Ownership aMessageOwnership);
MessageOwnership aMessageOwnership);
#if OPENTHREAD_CONFIG_IP6_BR_COUNTERS_ENABLE
void UpdateBorderRoutingCounters(const Header &aHeader, uint16_t aMessageLength, bool aIsInbound);
#endif