mirror of
https://github.com/espressif/openthread.git
synced 2026-08-15 23:27:47 +00:00
Only forward multicast messages when an MPL entry is available. (#800)
This commit is contained in:
+13
-16
@@ -232,7 +232,7 @@ void Ip6::HandleSendQueue(void)
|
||||
}
|
||||
}
|
||||
|
||||
ThreadError Ip6::HandleOptions(Message &message, Header &header)
|
||||
ThreadError Ip6::HandleOptions(Message &message, Header &header, bool &forward)
|
||||
{
|
||||
ThreadError error = kThreadError_None;
|
||||
HopByHopHeader hbhHeader;
|
||||
@@ -251,7 +251,7 @@ ThreadError Ip6::HandleOptions(Message &message, Header &header)
|
||||
switch (optionHeader.GetType())
|
||||
{
|
||||
case OptionMpl::kType:
|
||||
SuccessOrExit(error = mMpl.ProcessOption(message, header.GetSource()));
|
||||
SuccessOrExit(error = mMpl.ProcessOption(message, header.GetSource(), forward));
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -307,7 +307,8 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
ThreadError Ip6::HandleExtensionHeaders(Message &message, Header &header, uint8_t &nextHeader, bool receive)
|
||||
ThreadError Ip6::HandleExtensionHeaders(Message &message, Header &header, uint8_t &nextHeader, bool &forward,
|
||||
bool receive)
|
||||
{
|
||||
ThreadError error = kThreadError_None;
|
||||
ExtensionHeader extensionHeader;
|
||||
@@ -321,7 +322,7 @@ ThreadError Ip6::HandleExtensionHeaders(Message &message, Header &header, uint8_
|
||||
switch (nextHeader)
|
||||
{
|
||||
case kProtoHopOpts:
|
||||
SuccessOrExit(error = HandleOptions(message, header));
|
||||
SuccessOrExit(error = HandleOptions(message, header, forward));
|
||||
break;
|
||||
|
||||
case kProtoFragment:
|
||||
@@ -329,7 +330,7 @@ ThreadError Ip6::HandleExtensionHeaders(Message &message, Header &header, uint8_
|
||||
break;
|
||||
|
||||
case kProtoDstOpts:
|
||||
SuccessOrExit(error = HandleOptions(message, header));
|
||||
SuccessOrExit(error = HandleOptions(message, header, forward));
|
||||
break;
|
||||
|
||||
case kProtoIp6:
|
||||
@@ -473,11 +474,7 @@ ThreadError Ip6::HandleDatagram(Message &message, Netif *netif, int8_t interface
|
||||
receive = true;
|
||||
}
|
||||
|
||||
if (header.GetDestination().GetScope() > Address::kLinkLocalScope)
|
||||
{
|
||||
forward = true;
|
||||
}
|
||||
else if (netif == NULL)
|
||||
if (netif == NULL)
|
||||
{
|
||||
forward = true;
|
||||
}
|
||||
@@ -498,16 +495,16 @@ ThreadError Ip6::HandleDatagram(Message &message, Netif *netif, int8_t interface
|
||||
}
|
||||
}
|
||||
|
||||
if (!mForwardingEnabled && netif != NULL)
|
||||
{
|
||||
forward = false;
|
||||
}
|
||||
|
||||
message.SetOffset(sizeof(header));
|
||||
|
||||
// process IPv6 Extension Headers
|
||||
nextHeader = static_cast<uint8_t>(header.GetNextHeader());
|
||||
SuccessOrExit(error = HandleExtensionHeaders(message, header, nextHeader, receive));
|
||||
SuccessOrExit(error = HandleExtensionHeaders(message, header, nextHeader, forward, receive));
|
||||
|
||||
if (!mForwardingEnabled && netif != NULL)
|
||||
{
|
||||
forward = false;
|
||||
}
|
||||
|
||||
// process IPv6 Payload
|
||||
if (receive)
|
||||
|
||||
Reference in New Issue
Block a user