cli: update link quality cli to take effect for neighouring router devices. (#478)

This commit is contained in:
Xiao Ma
2016-08-26 08:46:49 -07:00
committed by Jonathan Hui
parent 62f3188081
commit 11dd55a389
3 changed files with 38 additions and 14 deletions
+4 -13
View File
@@ -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, ;);
+9
View File
@@ -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
/**
+25 -1
View File
@@ -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++;