[ip6] prefer ML-EID as realm-local scope source address (#3284)

This commit is contained in:
Hubert Miś
2018-12-03 21:22:19 -08:00
committed by Jonathan Hui
parent 22d6d1abf0
commit 898ba45b0f
2 changed files with 10 additions and 20 deletions
+7 -20
View File
@@ -1123,28 +1123,15 @@ const NetifUnicastAddress *Ip6::SelectSourceAddress(MessageInfo &aMessageInfo)
rvalPrefixMatched = candidatePrefixMatched;
}
}
else if (rvalAddr->GetScope() == Address::kRealmLocalScope)
else if ((rvalAddr->GetScope() == Address::kRealmLocalScope) &&
(addr->GetScope() == Address::kRealmLocalScope))
{
// Additional rule: Prefer appropriate realm local address
if (overrideScope > Address::kRealmLocalScope)
// Additional rule: Prefer EID
if (rvalAddr->GetAddress().IsRoutingLocator())
{
if (rvalAddr->GetAddress().IsRoutingLocator())
{
// Prefer EID if destination is not realm local.
rvalAddr = addr;
rvalIface = candidateId;
rvalPrefixMatched = candidatePrefixMatched;
}
}
else
{
if (candidateAddr->IsRoutingLocator())
{
// Prefer RLOC if destination is realm local.
rvalAddr = addr;
rvalIface = candidateId;
rvalPrefixMatched = candidatePrefixMatched;
}
rvalAddr = addr;
rvalIface = candidateId;
rvalPrefixMatched = candidatePrefixMatched;
}
}
else if (addr->mPreferred && !rvalAddr->mPreferred)
+3
View File
@@ -124,6 +124,7 @@ otError NetworkDiagnostic::SendDiagnosticGet(const Ip6::Address &aDestination,
SuccessOrExit(error = message->Append(aTlvTypes, aCount));
}
messageInfo.SetSockAddr(GetNetif().GetMle().GetMeshLocal16());
messageInfo.SetPeerAddr(aDestination);
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(netif.GetInterfaceId());
@@ -517,6 +518,7 @@ void NetworkDiagnostic::HandleDiagnosticGetQuery(Coap::Header & aHeader
VerifyOrExit((message = netif.GetCoap().NewMessage(header)) != NULL, error = OT_ERROR_NO_BUFS);
messageInfo.SetSockAddr(GetNetif().GetMle().GetMeshLocal16());
messageInfo.SetPeerAddr(aMessageInfo.GetPeerAddr());
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(netif.GetInterfaceId());
@@ -631,6 +633,7 @@ otError NetworkDiagnostic::SendDiagnosticReset(const Ip6::Address &aDestination,
SuccessOrExit(error = message->Append(aTlvTypes, aCount));
}
messageInfo.SetSockAddr(GetNetif().GetMle().GetMeshLocal16());
messageInfo.SetPeerAddr(aDestination);
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(netif.GetInterfaceId());