mirror of
https://github.com/espressif/openthread.git
synced 2026-10-02 05:47:40 +00:00
[address-resolver] update/add logs in AddressResolver (#2196)
This commit is contained in:
committed by
Jonathan Hui
parent
93f4fb3a29
commit
4323b6f221
@@ -104,7 +104,7 @@ void AddressResolver::Remove(uint8_t routerId)
|
|||||||
{
|
{
|
||||||
if (Mle::Mle::GetRouterId(mCache[i].mRloc16) == routerId)
|
if (Mle::Mle::GetRouterId(mCache[i].mRloc16) == routerId)
|
||||||
{
|
{
|
||||||
InvalidateCacheEntry(mCache[i]);
|
InvalidateCacheEntry(mCache[i], kReasonRemovingRouterId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,7 +128,7 @@ AddressResolver::Cache *AddressResolver::NewCacheEntry(void)
|
|||||||
|
|
||||||
if (rval != NULL)
|
if (rval != NULL)
|
||||||
{
|
{
|
||||||
InvalidateCacheEntry(*rval);
|
InvalidateCacheEntry(*rval, kReasonEvictingForNewEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rval;
|
return rval;
|
||||||
@@ -147,8 +147,32 @@ void AddressResolver::MarkCacheEntryAsUsed(Cache &aEntry)
|
|||||||
aEntry.mAge = 0;
|
aEntry.mAge = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddressResolver::InvalidateCacheEntry(Cache &aEntry)
|
const char *AddressResolver::ConvertInvalidationReasonToString(InvalidationReason aReason)
|
||||||
{
|
{
|
||||||
|
const char *str = "";
|
||||||
|
|
||||||
|
switch (aReason)
|
||||||
|
{
|
||||||
|
case kReasonRemovingRouterId:
|
||||||
|
str = "removing router id";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kReasonReceivedIcmpDstUnreachNoRoute:
|
||||||
|
str = "received icmp no route";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kReasonEvictingForNewEntry:
|
||||||
|
str = "evicting for new entry";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddressResolver::InvalidateCacheEntry(Cache &aEntry, InvalidationReason aReason)
|
||||||
|
{
|
||||||
|
char stringBuffer[Ip6::Address::kIp6AddressStringSize];
|
||||||
|
|
||||||
for (int i = 0; i < kCacheEntries; i++)
|
for (int i = 0; i < kCacheEntries; i++)
|
||||||
{
|
{
|
||||||
if (mCache[i].mAge > aEntry.mAge)
|
if (mCache[i].mAge > aEntry.mAge)
|
||||||
@@ -157,9 +181,29 @@ void AddressResolver::InvalidateCacheEntry(Cache &aEntry)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (aEntry.mState)
|
||||||
|
{
|
||||||
|
case Cache::kStateCached:
|
||||||
|
otLogInfoArp(GetInstance(), "Cache entry removed: %s, 0x%04x - %s",
|
||||||
|
aEntry.mTarget.ToString(stringBuffer, sizeof(stringBuffer)), aEntry.mRloc16,
|
||||||
|
ConvertInvalidationReasonToString(aReason));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Cache::kStateQuery:
|
||||||
|
otLogInfoArp(GetInstance(), "Cache entry (query mode) removed: %s, timeout:%d, retry:%d - %s",
|
||||||
|
aEntry.mTarget.ToString(stringBuffer, sizeof(stringBuffer)), aEntry.mTimeout,
|
||||||
|
aEntry.mRetryTimeout, ConvertInvalidationReasonToString(aReason));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
aEntry.mAge = kCacheEntries - 1;
|
aEntry.mAge = kCacheEntries - 1;
|
||||||
aEntry.mState = Cache::kStateInvalid;
|
aEntry.mState = Cache::kStateInvalid;
|
||||||
otLogInfoArp(GetInstance(), "cache entry removed!");
|
|
||||||
|
OT_UNUSED_VARIABLE(stringBuffer);
|
||||||
|
OT_UNUSED_VARIABLE(aReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
otError AddressResolver::Resolve(const Ip6::Address &aEid, uint16_t &aRloc16)
|
otError AddressResolver::Resolve(const Ip6::Address &aEid, uint16_t &aRloc16)
|
||||||
@@ -235,6 +279,7 @@ otError AddressResolver::SendAddressQuery(const Ip6::Address &aEid)
|
|||||||
Coap::Header header;
|
Coap::Header header;
|
||||||
ThreadTargetTlv targetTlv;
|
ThreadTargetTlv targetTlv;
|
||||||
Ip6::MessageInfo messageInfo;
|
Ip6::MessageInfo messageInfo;
|
||||||
|
char stringBuffer[Ip6::Address::kIp6AddressStringSize];
|
||||||
|
|
||||||
header.Init(OT_COAP_TYPE_NON_CONFIRMABLE, OT_COAP_CODE_POST);
|
header.Init(OT_COAP_TYPE_NON_CONFIRMABLE, OT_COAP_CODE_POST);
|
||||||
header.AppendUriPathOptions(OT_URI_PATH_ADDRESS_QUERY);
|
header.AppendUriPathOptions(OT_URI_PATH_ADDRESS_QUERY);
|
||||||
@@ -254,7 +299,9 @@ otError AddressResolver::SendAddressQuery(const Ip6::Address &aEid)
|
|||||||
|
|
||||||
SuccessOrExit(error = netif.GetCoap().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = netif.GetCoap().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
otLogInfoArp(GetInstance(), "Sent address query");
|
otLogInfoArp(GetInstance(), "Sending address query for %s", aEid.ToString(stringBuffer, sizeof(stringBuffer)));
|
||||||
|
|
||||||
|
OT_UNUSED_VARIABLE(stringBuffer);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
|
||||||
@@ -288,13 +335,11 @@ void AddressResolver::HandleAddressNotification(Coap::Header &aHeader, Message &
|
|||||||
ThreadRloc16Tlv rloc16Tlv;
|
ThreadRloc16Tlv rloc16Tlv;
|
||||||
ThreadLastTransactionTimeTlv lastTransactionTimeTlv;
|
ThreadLastTransactionTimeTlv lastTransactionTimeTlv;
|
||||||
uint32_t lastTransactionTime;
|
uint32_t lastTransactionTime;
|
||||||
|
char stringBuffer[Ip6::Address::kIp6AddressStringSize];
|
||||||
|
|
||||||
VerifyOrExit(aHeader.GetType() == OT_COAP_TYPE_CONFIRMABLE &&
|
VerifyOrExit(aHeader.GetType() == OT_COAP_TYPE_CONFIRMABLE &&
|
||||||
aHeader.GetCode() == OT_COAP_CODE_POST);
|
aHeader.GetCode() == OT_COAP_CODE_POST);
|
||||||
|
|
||||||
otLogInfoArp(GetInstance(), "Received address notification from %04x",
|
|
||||||
HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7]));
|
|
||||||
|
|
||||||
SuccessOrExit(ThreadTlv::GetTlv(aMessage, ThreadTlv::kTarget, sizeof(targetTlv), targetTlv));
|
SuccessOrExit(ThreadTlv::GetTlv(aMessage, ThreadTlv::kTarget, sizeof(targetTlv), targetTlv));
|
||||||
VerifyOrExit(targetTlv.IsValid());
|
VerifyOrExit(targetTlv.IsValid());
|
||||||
|
|
||||||
@@ -313,6 +358,10 @@ void AddressResolver::HandleAddressNotification(Coap::Header &aHeader, Message &
|
|||||||
lastTransactionTime = lastTransactionTimeTlv.GetTime();
|
lastTransactionTime = lastTransactionTimeTlv.GetTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
otLogInfoArp(GetInstance(), "Received address notification from 0x%04x for %s to 0x%04x",
|
||||||
|
HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7]),
|
||||||
|
targetTlv.GetTarget()->ToString(stringBuffer, sizeof(stringBuffer)), rloc16Tlv.GetRloc16());
|
||||||
|
|
||||||
for (int i = 0; i < kCacheEntries; i++)
|
for (int i = 0; i < kCacheEntries; i++)
|
||||||
{
|
{
|
||||||
if (mCache[i].mTarget != *targetTlv.GetTarget())
|
if (mCache[i].mTarget != *targetTlv.GetTarget())
|
||||||
@@ -349,9 +398,12 @@ void AddressResolver::HandleAddressNotification(Coap::Header &aHeader, Message &
|
|||||||
mCache[i].mState = Cache::kStateCached;
|
mCache[i].mState = Cache::kStateCached;
|
||||||
MarkCacheEntryAsUsed(mCache[i]);
|
MarkCacheEntryAsUsed(mCache[i]);
|
||||||
|
|
||||||
|
otLogInfoArp(GetInstance(), "Cache entry updated: %s, 0x%04x, lastTrans:%d", stringBuffer,
|
||||||
|
rloc16Tlv.GetRloc16(), lastTransactionTime);
|
||||||
|
|
||||||
if (netif.GetCoap().SendEmptyAck(aHeader, aMessageInfo) == OT_ERROR_NONE)
|
if (netif.GetCoap().SendEmptyAck(aHeader, aMessageInfo) == OT_ERROR_NONE)
|
||||||
{
|
{
|
||||||
otLogInfoArp(GetInstance(), "Sent address notification acknowledgment");
|
otLogInfoArp(GetInstance(), "Sending address notification acknowledgment");
|
||||||
}
|
}
|
||||||
|
|
||||||
netif.GetMeshForwarder().HandleResolved(*targetTlv.GetTarget(), OT_ERROR_NONE);
|
netif.GetMeshForwarder().HandleResolved(*targetTlv.GetTarget(), OT_ERROR_NONE);
|
||||||
@@ -359,6 +411,8 @@ void AddressResolver::HandleAddressNotification(Coap::Header &aHeader, Message &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OT_UNUSED_VARIABLE(stringBuffer);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -371,6 +425,7 @@ otError AddressResolver::SendAddressError(const ThreadTargetTlv &aTarget, const
|
|||||||
Message *message;
|
Message *message;
|
||||||
Coap::Header header;
|
Coap::Header header;
|
||||||
Ip6::MessageInfo messageInfo;
|
Ip6::MessageInfo messageInfo;
|
||||||
|
char stringBuffer[Ip6::Address::kIp6AddressStringSize];
|
||||||
|
|
||||||
header.Init(aDestination == NULL ? OT_COAP_TYPE_NON_CONFIRMABLE : OT_COAP_TYPE_CONFIRMABLE,
|
header.Init(aDestination == NULL ? OT_COAP_TYPE_NON_CONFIRMABLE : OT_COAP_TYPE_CONFIRMABLE,
|
||||||
OT_COAP_CODE_POST);
|
OT_COAP_CODE_POST);
|
||||||
@@ -398,7 +453,10 @@ otError AddressResolver::SendAddressError(const ThreadTargetTlv &aTarget, const
|
|||||||
|
|
||||||
SuccessOrExit(error = netif.GetCoap().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = netif.GetCoap().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
otLogInfoArp(GetInstance(), "Sent address error");
|
otLogInfoArp(GetInstance(), "Sending address error for target %s",
|
||||||
|
aTarget.GetTarget()->ToString(stringBuffer, sizeof(stringBuffer)));
|
||||||
|
|
||||||
|
OT_UNUSED_VARIABLE(stringBuffer);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
|
||||||
@@ -418,8 +476,7 @@ void AddressResolver::HandleAddressError(void *aContext, otCoapHeader *aHeader,
|
|||||||
*static_cast<const Ip6::MessageInfo *>(aMessageInfo));
|
*static_cast<const Ip6::MessageInfo *>(aMessageInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddressResolver::HandleAddressError(Coap::Header &aHeader, Message &aMessage,
|
void AddressResolver::HandleAddressError(Coap::Header &aHeader, Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
|
||||||
const Ip6::MessageInfo &aMessageInfo)
|
|
||||||
{
|
{
|
||||||
ThreadNetif &netif = GetNetif();
|
ThreadNetif &netif = GetNetif();
|
||||||
otError error = OT_ERROR_NONE;
|
otError error = OT_ERROR_NONE;
|
||||||
@@ -518,12 +575,11 @@ void AddressResolver::HandleAddressQuery(Coap::Header &aHeader, Message &aMessag
|
|||||||
ThreadLastTransactionTimeTlv lastTransactionTimeTlv;
|
ThreadLastTransactionTimeTlv lastTransactionTimeTlv;
|
||||||
Child *children;
|
Child *children;
|
||||||
uint8_t numChildren;
|
uint8_t numChildren;
|
||||||
|
char stringBuffer[Ip6::Address::kIp6AddressStringSize];
|
||||||
|
|
||||||
VerifyOrExit(aHeader.GetType() == OT_COAP_TYPE_NON_CONFIRMABLE &&
|
VerifyOrExit(aHeader.GetType() == OT_COAP_TYPE_NON_CONFIRMABLE &&
|
||||||
aHeader.GetCode() == OT_COAP_CODE_POST);
|
aHeader.GetCode() == OT_COAP_CODE_POST);
|
||||||
|
|
||||||
otLogInfoArp(GetInstance(), "Received address query from %04x", HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7]));
|
|
||||||
|
|
||||||
SuccessOrExit(ThreadTlv::GetTlv(aMessage, ThreadTlv::kTarget, sizeof(targetTlv), targetTlv));
|
SuccessOrExit(ThreadTlv::GetTlv(aMessage, ThreadTlv::kTarget, sizeof(targetTlv), targetTlv));
|
||||||
VerifyOrExit(targetTlv.IsValid());
|
VerifyOrExit(targetTlv.IsValid());
|
||||||
|
|
||||||
@@ -531,6 +587,10 @@ void AddressResolver::HandleAddressQuery(Coap::Header &aHeader, Message &aMessag
|
|||||||
|
|
||||||
lastTransactionTimeTlv.Init();
|
lastTransactionTimeTlv.Init();
|
||||||
|
|
||||||
|
otLogInfoArp(GetInstance(), "Received address query from 0x%04x for target %s",
|
||||||
|
HostSwap16(aMessageInfo.GetPeerAddr().mFields.m16[7]),
|
||||||
|
targetTlv.GetTarget()->ToString(stringBuffer, sizeof(stringBuffer)));
|
||||||
|
|
||||||
if (netif.IsUnicastAddress(*targetTlv.GetTarget()))
|
if (netif.IsUnicastAddress(*targetTlv.GetTarget()))
|
||||||
{
|
{
|
||||||
mlIidTlv.SetIid(netif.GetMle().GetMeshLocal64().GetIid());
|
mlIidTlv.SetIid(netif.GetMle().GetMeshLocal64().GetIid());
|
||||||
@@ -563,6 +623,8 @@ void AddressResolver::HandleAddressQuery(Coap::Header &aHeader, Message &aMessag
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OT_UNUSED_VARIABLE(stringBuffer);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -578,6 +640,7 @@ void AddressResolver::SendAddressQueryResponse(const ThreadTargetTlv &aTargetTlv
|
|||||||
Coap::Header header;
|
Coap::Header header;
|
||||||
ThreadRloc16Tlv rloc16Tlv;
|
ThreadRloc16Tlv rloc16Tlv;
|
||||||
Ip6::MessageInfo messageInfo;
|
Ip6::MessageInfo messageInfo;
|
||||||
|
char stringBuffer[Ip6::Address::kIp6AddressStringSize];
|
||||||
|
|
||||||
header.Init(OT_COAP_TYPE_CONFIRMABLE, OT_COAP_CODE_POST);
|
header.Init(OT_COAP_TYPE_CONFIRMABLE, OT_COAP_CODE_POST);
|
||||||
header.AppendUriPathOptions(OT_URI_PATH_ADDRESS_NOTIFY);
|
header.AppendUriPathOptions(OT_URI_PATH_ADDRESS_NOTIFY);
|
||||||
@@ -603,7 +666,10 @@ void AddressResolver::SendAddressQueryResponse(const ThreadTargetTlv &aTargetTlv
|
|||||||
|
|
||||||
SuccessOrExit(error = netif.GetCoap().SendMessage(*message, messageInfo));
|
SuccessOrExit(error = netif.GetCoap().SendMessage(*message, messageInfo));
|
||||||
|
|
||||||
otLogInfoArp(GetInstance(), "Sent address notification");
|
otLogInfoArp(GetInstance(), "Sending address notification for target %s",
|
||||||
|
aTargetTlv.GetTarget()->ToString(stringBuffer, sizeof(stringBuffer)));
|
||||||
|
|
||||||
|
OT_UNUSED_VARIABLE(stringBuffer);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
|
||||||
@@ -618,9 +684,10 @@ void AddressResolver::HandleTimer(Timer &aTimer)
|
|||||||
GetOwner(aTimer).HandleTimer();
|
GetOwner(aTimer).HandleTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddressResolver::HandleTimer()
|
void AddressResolver::HandleTimer(void)
|
||||||
{
|
{
|
||||||
bool continueTimer = false;
|
bool continueTimer = false;
|
||||||
|
char stringBuffer[Ip6::Address::kIp6AddressStringSize];
|
||||||
|
|
||||||
for (int i = 0; i < kCacheEntries; i++)
|
for (int i = 0; i < kCacheEntries; i++)
|
||||||
{
|
{
|
||||||
@@ -649,6 +716,9 @@ void AddressResolver::HandleTimer()
|
|||||||
mCache[i].mRetryTimeout = kAddressQueryMaxRetryDelay;
|
mCache[i].mRetryTimeout = kAddressQueryMaxRetryDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
otLogInfoArp(GetInstance(), "Timed out waiting for address notification for %s, retry: %d",
|
||||||
|
mCache[i].mTarget.ToString(stringBuffer, sizeof(stringBuffer)), mCache[i].mRetryTimeout);
|
||||||
|
|
||||||
GetNetif().GetMeshForwarder().HandleResolved(mCache[i].mTarget, OT_ERROR_DROP);
|
GetNetif().GetMeshForwarder().HandleResolved(mCache[i].mTarget, OT_ERROR_DROP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -662,6 +732,8 @@ void AddressResolver::HandleTimer()
|
|||||||
{
|
{
|
||||||
mTimer.Start(kStateUpdatePeriod);
|
mTimer.Start(kStateUpdatePeriod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OT_UNUSED_VARIABLE(stringBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddressResolver::HandleIcmpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo,
|
void AddressResolver::HandleIcmpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo,
|
||||||
@@ -688,7 +760,7 @@ void AddressResolver::HandleIcmpReceive(Message &aMessage, const Ip6::MessageInf
|
|||||||
if (mCache[i].mState != Cache::kStateInvalid &&
|
if (mCache[i].mState != Cache::kStateInvalid &&
|
||||||
memcmp(&mCache[i].mTarget, &ip6Header.GetDestination(), sizeof(mCache[i].mTarget)) == 0)
|
memcmp(&mCache[i].mTarget, &ip6Header.GetDestination(), sizeof(mCache[i].mTarget)) == 0)
|
||||||
{
|
{
|
||||||
InvalidateCacheEntry(mCache[i]);
|
InvalidateCacheEntry(mCache[i], kReasonReceivedIcmpDstUnreachNoRoute);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,9 +150,18 @@ private:
|
|||||||
State mState;
|
State mState;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum InvalidationReason
|
||||||
|
{
|
||||||
|
kReasonRemovingRouterId,
|
||||||
|
kReasonReceivedIcmpDstUnreachNoRoute,
|
||||||
|
kReasonEvictingForNewEntry,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *ConvertInvalidationReasonToString(InvalidationReason aReason);
|
||||||
|
|
||||||
Cache *NewCacheEntry(void);
|
Cache *NewCacheEntry(void);
|
||||||
void MarkCacheEntryAsUsed(Cache &aEntry);
|
void MarkCacheEntryAsUsed(Cache &aEntry);
|
||||||
void InvalidateCacheEntry(Cache &aEntry);
|
void InvalidateCacheEntry(Cache &aEntry, InvalidationReason aReason);
|
||||||
|
|
||||||
otError SendAddressQuery(const Ip6::Address &aEid);
|
otError SendAddressQuery(const Ip6::Address &aEid);
|
||||||
otError SendAddressError(const ThreadTargetTlv &aTarget, const ThreadMeshLocalEidTlv &aEid,
|
otError SendAddressError(const ThreadTargetTlv &aTarget, const ThreadMeshLocalEidTlv &aEid,
|
||||||
|
|||||||
Reference in New Issue
Block a user