mirror of
https://github.com/espressif/openthread.git
synced 2026-10-01 13:27:42 +00:00
[telemetry] implement RA/RS counters (#8416)
This commit is contained in:
@@ -53,7 +53,7 @@ extern "C" {
|
|||||||
* @note This number versions both OpenThread platform and user APIs.
|
* @note This number versions both OpenThread platform and user APIs.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define OPENTHREAD_API_VERSION (263)
|
#define OPENTHREAD_API_VERSION (264)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup api-instance
|
* @addtogroup api-instance
|
||||||
|
|||||||
@@ -871,6 +871,12 @@ typedef struct otBorderRoutingCounters
|
|||||||
otPacketsAndBytes mInboundMulticast; ///< The counters for inbound multicast.
|
otPacketsAndBytes mInboundMulticast; ///< The counters for inbound multicast.
|
||||||
otPacketsAndBytes mOutboundUnicast; ///< The counters for outbound unicast.
|
otPacketsAndBytes mOutboundUnicast; ///< The counters for outbound unicast.
|
||||||
otPacketsAndBytes mOutboundMulticast; ///< The counters for outbound multicast.
|
otPacketsAndBytes mOutboundMulticast; ///< The counters for outbound multicast.
|
||||||
|
uint32_t mRaRx; ///< The number of received RA packets.
|
||||||
|
uint32_t mRaTxSuccess; ///< The number of RA packets successfully transmitted.
|
||||||
|
uint32_t mRaTxFailure; ///< The number of RA packets failed to transmit.
|
||||||
|
uint32_t mRsRx; ///< The number of received RS packets.
|
||||||
|
uint32_t mRsTxSuccess; ///< The number of RS packets successfully transmitted.
|
||||||
|
uint32_t mRsTxFailure; ///< The number of RS packets failed to transmit.
|
||||||
} otBorderRoutingCounters;
|
} otBorderRoutingCounters;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -979,6 +979,12 @@ Inbound Unicast: Packets 4 Bytes 320
|
|||||||
Inbound Multicast: Packets 0 Bytes 0
|
Inbound Multicast: Packets 0 Bytes 0
|
||||||
Outbound Unicast: Packets 2 Bytes 160
|
Outbound Unicast: Packets 2 Bytes 160
|
||||||
Outbound Multicast: Packets 0 Bytes 0
|
Outbound Multicast: Packets 0 Bytes 0
|
||||||
|
RA Rx: 4
|
||||||
|
RA TxSuccess: 2
|
||||||
|
RA TxFailed: 0
|
||||||
|
RS Rx: 0
|
||||||
|
RS TxSuccess: 2
|
||||||
|
RS TxFailed: 0
|
||||||
Done
|
Done
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -2497,6 +2497,12 @@ template <> otError Interpreter::Process<Cmd("counters")>(Arg aArgs[])
|
|||||||
* Inbound Multicast: Packets 0 Bytes 0
|
* Inbound Multicast: Packets 0 Bytes 0
|
||||||
* Outbound Unicast: Packets 2 Bytes 160
|
* Outbound Unicast: Packets 2 Bytes 160
|
||||||
* Outbound Multicast: Packets 0 Bytes 0
|
* Outbound Multicast: Packets 0 Bytes 0
|
||||||
|
* RA Rx: 4
|
||||||
|
* RA TxSuccess: 2
|
||||||
|
* RA TxFailed: 0
|
||||||
|
* RS Rx: 0
|
||||||
|
* RS TxSuccess: 2
|
||||||
|
* RS TxFailed: 0
|
||||||
* Done
|
* Done
|
||||||
* @endcode
|
* @endcode
|
||||||
* @par api_copy
|
* @par api_copy
|
||||||
@@ -2531,6 +2537,13 @@ template <> otError Interpreter::Process<Cmd("counters")>(Arg aArgs[])
|
|||||||
Uint64ToString((brCounters->*counter.mPacketsAndBytes).mBytes, uint64StringBuffer));
|
Uint64ToString((brCounters->*counter.mPacketsAndBytes).mBytes, uint64StringBuffer));
|
||||||
OutputNewLine();
|
OutputNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OutputLine("RA Rx: %u", brCounters->mRaRx);
|
||||||
|
OutputLine("RA TxSuccess: %u", brCounters->mRaTxSuccess);
|
||||||
|
OutputLine("RA TxFailed: %u", brCounters->mRaTxFailure);
|
||||||
|
OutputLine("RS Rx: %u", brCounters->mRsRx);
|
||||||
|
OutputLine("RS TxSuccess: %u", brCounters->mRsTxSuccess);
|
||||||
|
OutputLine("RS TxFailed: %u", brCounters->mRsTxFailure);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @cli counters br reset
|
* @cli counters br reset
|
||||||
|
|||||||
@@ -758,12 +758,14 @@ void RoutingManager::SendRouterAdvertisement(RouterAdvTxMode aRaTxMode)
|
|||||||
if (error == kErrorNone)
|
if (error == kErrorNone)
|
||||||
{
|
{
|
||||||
mRaInfo.mLastTxTime = TimerMilli::GetNow();
|
mRaInfo.mLastTxTime = TimerMilli::GetNow();
|
||||||
|
Get<Ip6::Ip6>().GetBorderRoutingCounters().mRaTxSuccess++;
|
||||||
LogInfo("Sent Router Advertisement on %s", mInfraIf.ToString().AsCString());
|
LogInfo("Sent Router Advertisement on %s", mInfraIf.ToString().AsCString());
|
||||||
DumpDebg("[BR-CERT] direction=send | type=RA |", raMsg.GetAsPacket().GetBytes(),
|
DumpDebg("[BR-CERT] direction=send | type=RA |", raMsg.GetAsPacket().GetBytes(),
|
||||||
raMsg.GetAsPacket().GetLength());
|
raMsg.GetAsPacket().GetLength());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Get<Ip6::Ip6>().GetBorderRoutingCounters().mRaTxFailure++;
|
||||||
LogWarn("Failed to send Router Advertisement on %s: %s", mInfraIf.ToString().AsCString(),
|
LogWarn("Failed to send Router Advertisement on %s: %s", mInfraIf.ToString().AsCString(),
|
||||||
ErrorToString(error));
|
ErrorToString(error));
|
||||||
}
|
}
|
||||||
@@ -901,6 +903,7 @@ void RoutingManager::HandleRouterSolicit(const InfraIf::Icmp6Packet &aPacket, co
|
|||||||
OT_UNUSED_VARIABLE(aPacket);
|
OT_UNUSED_VARIABLE(aPacket);
|
||||||
OT_UNUSED_VARIABLE(aSrcAddress);
|
OT_UNUSED_VARIABLE(aSrcAddress);
|
||||||
|
|
||||||
|
Get<Ip6::Ip6>().GetBorderRoutingCounters().mRsRx++;
|
||||||
LogInfo("Received Router Solicitation from %s on %s", aSrcAddress.ToString().AsCString(),
|
LogInfo("Received Router Solicitation from %s on %s", aSrcAddress.ToString().AsCString(),
|
||||||
mInfraIf.ToString().AsCString());
|
mInfraIf.ToString().AsCString());
|
||||||
|
|
||||||
@@ -928,6 +931,7 @@ void RoutingManager::HandleRouterAdvertisement(const InfraIf::Icmp6Packet &aPack
|
|||||||
|
|
||||||
VerifyOrExit(routerAdvMessage.IsValid());
|
VerifyOrExit(routerAdvMessage.IsValid());
|
||||||
|
|
||||||
|
Get<Ip6::Ip6>().GetBorderRoutingCounters().mRaRx++;
|
||||||
LogInfo("Received Router Advertisement from %s on %s", aSrcAddress.ToString().AsCString(),
|
LogInfo("Received Router Advertisement from %s on %s", aSrcAddress.ToString().AsCString(),
|
||||||
mInfraIf.ToString().AsCString());
|
mInfraIf.ToString().AsCString());
|
||||||
DumpDebg("[BR-CERT] direction=recv | type=RA |", aPacket.GetBytes(), aPacket.GetLength());
|
DumpDebg("[BR-CERT] direction=recv | type=RA |", aPacket.GetBytes(), aPacket.GetLength());
|
||||||
@@ -2882,11 +2886,22 @@ Error RoutingManager::RsSender::SendRs(void)
|
|||||||
Ip6::Address destAddress;
|
Ip6::Address destAddress;
|
||||||
Ip6::Nd::RouterSolicitMessage routerSolicit;
|
Ip6::Nd::RouterSolicitMessage routerSolicit;
|
||||||
InfraIf::Icmp6Packet packet;
|
InfraIf::Icmp6Packet packet;
|
||||||
|
Error error;
|
||||||
|
|
||||||
packet.InitFrom(routerSolicit);
|
packet.InitFrom(routerSolicit);
|
||||||
destAddress.SetToLinkLocalAllRoutersMulticast();
|
destAddress.SetToLinkLocalAllRoutersMulticast();
|
||||||
|
|
||||||
return Get<RoutingManager>().mInfraIf.Send(packet, destAddress);
|
error = Get<RoutingManager>().mInfraIf.Send(packet, destAddress);
|
||||||
|
|
||||||
|
if (error == kErrorNone)
|
||||||
|
{
|
||||||
|
Get<Ip6::Ip6>().GetBorderRoutingCounters().mRsTxSuccess++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Get<Ip6::Ip6>().GetBorderRoutingCounters().mRsTxFailure++;
|
||||||
|
}
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RoutingManager::RsSender::HandleTimer(void)
|
void RoutingManager::RsSender::HandleTimer(void)
|
||||||
|
|||||||
@@ -83,6 +83,9 @@ Ip6::Ip6(Instance &aInstance)
|
|||||||
, mTcp(aInstance)
|
, mTcp(aInstance)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
#if OPENTHREAD_CONFIG_IP6_BR_COUNTERS_ENABLE
|
||||||
|
ResetBorderRoutingCounters();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Message *Ip6::NewMessage(uint16_t aReserved, const Message::Settings &aSettings)
|
Message *Ip6::NewMessage(uint16_t aReserved, const Message::Settings &aSettings)
|
||||||
|
|||||||
@@ -349,6 +349,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
const otBorderRoutingCounters &GetBorderRoutingCounters(void) const { return mBorderRoutingCounters; }
|
const otBorderRoutingCounters &GetBorderRoutingCounters(void) const { return mBorderRoutingCounters; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns a reference to the Border Routing counters.
|
||||||
|
*
|
||||||
|
* @returns A reference to the Border Routing counters.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
otBorderRoutingCounters &GetBorderRoutingCounters(void) { return mBorderRoutingCounters; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method resets the Border Routing counters.
|
* This method resets the Border Routing counters.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user