#include "otns.hpp"
#if (OPENTHREAD_MTD || OPENTHREAD_FTD) && OPENTHREAD_CONFIG_OTNS_ENABLE
#include "common/debug.hpp"
#include "common/locator-getters.hpp"
namespace ot {
namespace Utils {
const int kMaxStatusStringLength = 128;
void Otns::EmitShortAddress(uint16_t aShortAddress)
{
EmitStatus("rloc16=%d", aShortAddress);
}
void Otns::EmitExtendedAddress(const Mac::ExtAddress &aExtAddress)
{
Mac::ExtAddress revExtAddress;
revExtAddress.Set(aExtAddress.m8, Mac::ExtAddress::kReverseByteOrder);
EmitStatus("extaddr=%s", revExtAddress.ToString().AsCString());
}
void Otns::EmitPingRequest(const Ip6::Address &aPeerAddress,
uint16_t aPingLength,
uint32_t aTimestamp,
uint8_t aHopLimit)
{
OT_UNUSED_VARIABLE(aHopLimit);
EmitStatus("ping_request=%s,%d,%lu", aPeerAddress.ToString().AsCString(), aPingLength, aTimestamp);
}
void Otns::EmitPingReply(const Ip6::Address &aPeerAddress, uint16_t aPingLength, uint32_t aTimestamp, uint8_t aHopLimit)
{
EmitStatus("ping_reply=%s,%u,%lu,%d", aPeerAddress.ToString().AsCString(), aPingLength, aTimestamp, aHopLimit);
}
void Otns::EmitStatus(const char *aFmt, ...)
{
char statusStr[kMaxStatusStringLength + 1];
int n;
va_list ap;
va_start(ap, aFmt);
n = vsnprintf(statusStr, sizeof(statusStr), aFmt, ap);
OT_ASSERT(n >= 0);
va_end(ap);
otPlatOtnsStatus(statusStr);
}
void Otns::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
{
aCallback.GetOwner<Otns>().HandleStateChanged(aFlags);
}
void Otns::HandleStateChanged(otChangedFlags aFlags)
{
if ((aFlags & OT_CHANGED_THREAD_ROLE) != 0)
{
EmitStatus("role=%d", Get<Mle::Mle>().GetRole());
}
if ((aFlags & OT_CHANGED_THREAD_PARTITION_ID) != 0)
{
EmitStatus("parid=%x", Get<Mle::Mle>().GetLeaderData().GetPartitionId());
}
if ((aFlags & OT_CHANGED_JOINER_STATE) != 0)
{
EmitStatus("joiner_state=%d", Get<MeshCoP::Joiner>().GetState());
}
}
void Otns::EmitNeighborChange(otNeighborTableEvent aEvent, Neighbor &aNeighbor)
{
switch (aEvent)
{
case OT_NEIGHBOR_TABLE_EVENT_ROUTER_ADDED:
EmitStatus("router_added=%s", aNeighbor.GetExtAddress().ToString().AsCString());
break;
case OT_NEIGHBOR_TABLE_EVENT_ROUTER_REMOVED:
EmitStatus("router_removed=%s", aNeighbor.GetExtAddress().ToString().AsCString());
break;
case OT_NEIGHBOR_TABLE_EVENT_CHILD_ADDED:
EmitStatus("child_added=%s", aNeighbor.GetExtAddress().ToString().AsCString());
break;
case OT_NEIGHBOR_TABLE_EVENT_CHILD_REMOVED:
EmitStatus("child_removed=%s", aNeighbor.GetExtAddress().ToString().AsCString());
break;
}
}
} }
#endif