New ot API to set a message to use direct tx (#1245)

- New OpenThread API `otMessageSetDirectTransmission()` to force
  a message to forwarded using direct transmission even if the
  destination is a sleepy-node.

- The new API is used from `NcpBase` from set handler of insecure
  network stream spinel `STREAM_NET_INSECURE` property.
This commit is contained in:
Abtin Keshavarzian
2017-02-02 13:51:54 -08:00
committed by Jonathan Hui
parent e8b53a3804
commit 93f29a5fea
4 changed files with 30 additions and 1 deletions
+11
View File
@@ -177,6 +177,17 @@ ThreadError otSetMessageOffset(otMessage aMessage, uint16_t aOffset);
*/
bool otIsMessageLinkSecurityEnabled(otMessage aMessage);
/**
* This function sets/forces the message to be forwarded using direct transmission.
* Default setting for a new message is `false`.
*
* @param[in] aMessage A pointer to a message buffer.
* @param[in] aEnabled If `true` message will be forced to use direct transmission. If `false` message will
* follow the normal procedure.
*
*/
void otMessageSetDirectTransmission(otMessage aMessage, bool aEnabled);
/**
* Append bytes to a message.
*
+14
View File
@@ -1509,6 +1509,20 @@ bool otIsMessageLinkSecurityEnabled(otMessage aMessage)
return message->IsLinkSecurityEnabled();
}
void otMessageSetDirectTransmission(otMessage aMessage, bool aEnabled)
{
Message *message = static_cast<Message *>(aMessage);
if (aEnabled)
{
message->SetDirectTransmission();
}
else
{
message->ClearDirectTransmission();
}
}
ThreadError otAppendMessage(otMessage aMessage, const void *aBuf, uint16_t aLength)
{
Message *message = static_cast<Message *>(aMessage);
+2 -1
View File
@@ -438,7 +438,8 @@ ThreadError MeshForwarder::SendMessage(Message &aMessage)
}
}
else if ((neighbor = mNetif.GetMle().GetNeighbor(ip6Header.GetDestination())) != NULL &&
(neighbor->mMode & Mle::ModeTlv::kModeRxOnWhenIdle) == 0)
(neighbor->mMode & Mle::ModeTlv::kModeRxOnWhenIdle) == 0 &&
!aMessage.GetDirectTransmission())
{
// destined for a sleepy child
children = static_cast<Child *>(neighbor);
+3
View File
@@ -4187,6 +4187,9 @@ ThreadError NcpBase::SetPropertyHandler_STREAM_NET_INSECURE(uint8_t header, spin
if (errorCode == kThreadError_None)
{
// Ensure the insecure message is forwarded using direct transmission.
otMessageSetDirectTransmission(message, true);
errorCode = otSendIp6Datagram(mInstance, message);
}
else if (message)