diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 72bbe7f21..e224369a4 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -4963,6 +4963,28 @@ Error Mle::TxMessage::AppendPendingDatasetTlv(void) return Get().AppendMleDatasetTlv(*this); } +Error Mle::TxMessage::AppendSteeringDataTlv(void) +{ + Error error = kErrorNone; + MeshCoP::SteeringData steeringData; + +#if OPENTHREAD_CONFIG_MLE_STEERING_DATA_SET_OOB_ENABLE + if (!Get().mSteeringData.IsEmpty()) + { + steeringData = Get().mSteeringData; + } + else +#endif + { + SuccessOrExit(Get().FindSteeringData(steeringData)); + } + + error = Tlv::Append(*this, steeringData.GetData(), steeringData.GetLength()); + +exit: + return error; +} + #endif // OPENTHREAD_FTD //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/core/thread/mle.hpp b/src/core/thread/mle.hpp index 6b2b6338d..b4ef27ca1 100644 --- a/src/core/thread/mle.hpp +++ b/src/core/thread/mle.hpp @@ -1017,6 +1017,7 @@ private: Error AppendActiveDatasetTlv(void); Error AppendPendingDatasetTlv(void); Error AppendConnectivityTlv(void); + Error AppendSteeringDataTlv(void); Error AppendAddressRegistrationTlv(Child &aChild); #endif template Error AppendTlvRequestTlv(const uint8_t (&aTlvArray)[kArrayLength]) diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index 99a98fc4f..87a4a84eb 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -2810,26 +2810,7 @@ Error MleRouter::SendDiscoveryResponse(const Ip6::Address &aDestination, const M networkNameTlv.SetNetworkName(Get().GetNetworkName().GetAsData()); SuccessOrExit(error = networkNameTlv.AppendTo(*message)); -#if OPENTHREAD_CONFIG_MLE_STEERING_DATA_SET_OOB_ENABLE - // If steering data is set out of band, use that value. - // Otherwise use the one from commissioning data. - if (!mSteeringData.IsEmpty()) - { - SuccessOrExit(error = Tlv::Append(*message, mSteeringData.GetData(), - mSteeringData.GetLength())); - } - else -#endif - { - const MeshCoP::SteeringDataTlv *steeringDataTlv; - - steeringDataTlv = Get().FindInCommissioningData(); - - if (steeringDataTlv != nullptr) - { - SuccessOrExit(error = steeringDataTlv->AppendTo(*message)); - } - } + SuccessOrExit(error = message->AppendSteeringDataTlv()); SuccessOrExit( error = Tlv::Append(*message, Get().GetJoinerUdpPort()));