mirror of
https://github.com/espressif/openthread.git
synced 2026-09-15 05:30:09 +00:00
cli: update link quality cli to take effect for neighouring router devices. (#478)
This commit is contained in:
+4
-13
@@ -616,19 +616,19 @@ void Mle::SetAssignLinkQuality(const Mac::ExtAddress aMacAddr, uint8_t aLinkQual
|
||||
switch (aLinkQuality)
|
||||
{
|
||||
case 3:
|
||||
mAssignLinkMargin = 0xff; // 21 - 255
|
||||
mAssignLinkMargin = kMinAssignedLinkMargin3;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
mAssignLinkMargin = 0x14; // 11 - 20
|
||||
mAssignLinkMargin = kMinAssignedLinkMargin2;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
mAssignLinkMargin = 0x09; // 3 - 9
|
||||
mAssignLinkMargin = kMinAssignedLinkMargin1;
|
||||
break;
|
||||
|
||||
case 0:
|
||||
mAssignLinkMargin = 0x0; // 0 - 2
|
||||
mAssignLinkMargin = kMinAssignedLinkMargin0;
|
||||
|
||||
default:
|
||||
break;
|
||||
@@ -1812,15 +1812,6 @@ ThreadError Mle::HandleParentResponse(const Message &aMessage, const Ip6::Messag
|
||||
linkMargin = linkMarginTlv.GetLinkMargin();
|
||||
}
|
||||
|
||||
// add for Thread Certification testing
|
||||
if (isAssignLinkQuality)
|
||||
{
|
||||
linkMargin = linkMarginTlv.GetLinkMargin();
|
||||
|
||||
// clear flag for subsequent normal MLE message
|
||||
isAssignLinkQuality = false;
|
||||
}
|
||||
|
||||
linkQuality = LinkQualityInfo::ConvertLinkMarginToLinkQuality(linkMargin);
|
||||
|
||||
VerifyOrExit(mParentRequestState != kParentRequestRouter || linkQuality == 3, ;);
|
||||
|
||||
@@ -103,6 +103,15 @@ enum
|
||||
kLqi0LinkCost = 16, ///< Link Cost for LQI 0
|
||||
};
|
||||
|
||||
// add for certification testing
|
||||
enum
|
||||
{
|
||||
kMinAssignedLinkMargin3 = 0x15, ///< minimal link margin for LQI 3 (21 - 255)
|
||||
kMinAssignedLinkMargin2 = 0x0b, ///< minimal link margin for LQI 2 (11 - 20)
|
||||
kMinAssignedLinkMargin1 = 0x03, ///< minimal link margin for LQI 1 (3 - 9)
|
||||
kMinAssignedLinkMargin0 = 0x00, ///< minimal link margin for LQI 0 (0 - 2)
|
||||
};
|
||||
|
||||
} // namespace Mle
|
||||
|
||||
/**
|
||||
|
||||
@@ -695,6 +695,14 @@ ThreadError MleRouter::SendLinkAccept(const Ip6::MessageInfo &aMessageInfo, Neig
|
||||
|
||||
// always append a link margin, regardless of whether or not it was requested
|
||||
linkMargin = LinkQualityInfo::ConvertRssToLinkMargin(threadMessageInfo->mRss);
|
||||
|
||||
// add for certification testing
|
||||
if (isAssignLinkQuality &&
|
||||
(memcmp(aNeighbor->mMacAddr.m8, mAddr64.m8, OT_EXT_ADDRESS_SIZE) == 0))
|
||||
{
|
||||
linkMargin = mAssignLinkMargin;
|
||||
}
|
||||
|
||||
SuccessOrExit(error = AppendLinkMargin(*message, linkMargin));
|
||||
|
||||
if (aNeighbor != NULL && IsActiveRouter(aNeighbor->mValid.mRloc16))
|
||||
@@ -1068,6 +1076,13 @@ uint8_t MleRouter::GetLinkCost(uint8_t aRouterId)
|
||||
rval = mRouters[aRouterId].mLinkQualityOut;
|
||||
}
|
||||
|
||||
// add for certification testing
|
||||
if (isAssignLinkQuality &&
|
||||
(memcmp(mRouters[aRouterId].mMacAddr.m8, mAddr64.m8, OT_EXT_ADDRESS_SIZE) == 0))
|
||||
{
|
||||
rval = mAssignLinkQuality;
|
||||
}
|
||||
|
||||
rval = LqiToCost(rval);
|
||||
|
||||
exit:
|
||||
@@ -3392,8 +3407,17 @@ ThreadError MleRouter::AppendRoute(Message &aMessage)
|
||||
}
|
||||
|
||||
tlv.SetRouteCost(routeCount, cost);
|
||||
tlv.SetLinkQualityIn(routeCount, mRouters[i].mLinkInfo.GetLinkQuality());
|
||||
tlv.SetLinkQualityOut(routeCount, mRouters[i].mLinkQualityOut);
|
||||
|
||||
if (isAssignLinkQuality &&
|
||||
(memcmp(mRouters[i].mMacAddr.m8, mAddr64.m8, OT_EXT_ADDRESS_SIZE) == 0))
|
||||
{
|
||||
tlv.SetLinkQualityIn(routeCount, mAssignLinkQuality);
|
||||
}
|
||||
else
|
||||
{
|
||||
tlv.SetLinkQualityIn(routeCount, mRouters[i].mLinkInfo.GetLinkQuality());
|
||||
}
|
||||
}
|
||||
|
||||
routeCount++;
|
||||
|
||||
Reference in New Issue
Block a user