ThreadNetif::ThreadNetif(Instance &aInstance) : Netif(aInstance, OT_NETIF_INTERFACE_ID_THREAD) , mCoap(aInstance) #if OPENTHREAD_ENABLE_DHCP6_CLIENT , mDhcp6Client(aInstance) #endif // OPENTHREAD_ENABLE_DHCP6_CLIENT #if OPENTHREAD_ENABLE_DHCP6_SERVER , mDhcp6Server(aInstance) #endif // OPENTHREAD_ENABLE_DHCP6_SERVER #if OPENTHREAD_ENABLE_DNS_CLIENT , mDnsClient(aInstance.GetThreadNetif()) #endif // OPENTHREAD_ENABLE_DNS_CLIENT , mActiveDataset(aInstance) , mPendingDataset(aInstance) , mKeyManager(aInstance) , mLowpan(aInstance) , mMac(aInstance) , mMeshForwarder(aInstance) , mMleRouter(aInstance) #if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE , mNetworkDataLocal(aInstance) #endif , mNetworkDataLeader(aInstance) #if OPENTHREAD_FTD || OPENTHREAD_ENABLE_MTD_NETWORK_DIAGNOSTIC , mNetworkDiagnostic(aInstance) #endif , mIsUp(false) #if OPENTHREAD_ENABLE_BORDER_AGENT , mBorderAgent(aInstance) #endif #if OPENTHREAD_ENABLE_COMMISSIONER && OPENTHREAD_FTD , mCommissioner(aInstance) #endif // OPENTHREAD_ENABLE_COMMISSIONER && OPENTHREAD_FTD #if OPENTHREAD_ENABLE_DTLS , mDtls(aInstance) , mCoapSecure(aInstance) #endif #if OPENTHREAD_ENABLE_JOINER , mJoiner(aInstance) #endif // OPENTHREAD_ENABLE_JOINER #if OPENTHREAD_ENABLE_JAM_DETECTION , mJamDetector(aInstance) #endif // OPENTHREAD_ENABLE_JAM_DETECTTION #if OPENTHREAD_FTD , mJoinerRouter(aInstance) , mLeader(aInstance) , mAddressResolver(aInstance) #endif // OPENTHREAD_FTD , mChildSupervisor(aInstance) , mSupervisionListener(aInstance) , mAnnounceBegin(aInstance) , mPanIdQuery(aInstance) , mEnergyScan(aInstance) #if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC , mTimeSync(aInstance) #endif { mCoap.SetInterceptor(&ThreadNetif::TmfFilter, this); }
JoinerRouter::JoinerRouter(Instance &aInstance) : InstanceLocator(aInstance) , mSocket(aInstance.GetThreadNetif().GetIp6().GetUdp()) , mRelayTransmit(OT_URI_PATH_RELAY_TX, &JoinerRouter::HandleRelayTransmit, this) , mTimer(aInstance, &JoinerRouter::HandleTimer, this) , mNotifierCallback(&JoinerRouter::HandleStateChanged, this) , mJoinerUdpPort(0) , mIsJoinerPortConfigured(false) , mExpectJoinEntRsp(false) { GetNetif().GetCoap().AddResource(mRelayTransmit); aInstance.GetNotifier().RegisterCallback(mNotifierCallback); }
otError Dataset::ApplyConfiguration(Instance &aInstance) const { ThreadNetif &netif = aInstance.GetThreadNetif(); Mac::Mac & mac = netif.GetMac(); otError error = OT_ERROR_NONE; const Tlv * cur = reinterpret_cast<const Tlv *>(mTlvs); const Tlv * end = reinterpret_cast<const Tlv *>(mTlvs + mLength); VerifyOrExit(IsValid(), error = OT_ERROR_PARSE); while (cur < end) { switch (cur->GetType()) { case Tlv::kChannel: { uint8_t channel = static_cast<uint8_t>(static_cast<const ChannelTlv *>(cur)->GetChannel()); error = mac.SetPanChannel(channel); if (error != OT_ERROR_NONE) { otLogWarnMeshCoP(aInstance, "DatasetManager::ApplyConfiguration() Failed to set channel to %d (%s)", channel, otThreadErrorToString(error)); ExitNow(); } break; } case Tlv::kChannelMask: { const ChannelMask0Entry *mask0Entry = static_cast<const ChannelMaskTlv *>(cur)->GetMask0Entry(); if (mask0Entry != NULL) { mac.SetSupportedChannelMask(mask0Entry->GetMask()); } break; } case Tlv::kPanId: mac.SetPanId(static_cast<const PanIdTlv *>(cur)->GetPanId()); break; case Tlv::kExtendedPanId: mac.SetExtendedPanId(static_cast<const ExtendedPanIdTlv *>(cur)->GetExtendedPanId()); break; case Tlv::kNetworkName: { const NetworkNameTlv *name = static_cast<const NetworkNameTlv *>(cur); mac.SetNetworkName(name->GetNetworkName(), name->GetLength()); break; } case Tlv::kNetworkMasterKey: { const NetworkMasterKeyTlv *key = static_cast<const NetworkMasterKeyTlv *>(cur); netif.GetKeyManager().SetMasterKey(key->GetNetworkMasterKey()); break; } #if OPENTHREAD_FTD case Tlv::kPSKc: { const PSKcTlv *pskc = static_cast<const PSKcTlv *>(cur); netif.GetKeyManager().SetPSKc(pskc->GetPSKc()); break; } #endif case Tlv::kMeshLocalPrefix: { const MeshLocalPrefixTlv *prefix = static_cast<const MeshLocalPrefixTlv *>(cur); netif.GetMle().SetMeshLocalPrefix(prefix->GetMeshLocalPrefix()); break; } case Tlv::kSecurityPolicy: { const SecurityPolicyTlv *securityPolicy = static_cast<const SecurityPolicyTlv *>(cur); netif.GetKeyManager().SetKeyRotation(securityPolicy->GetRotationTime()); netif.GetKeyManager().SetSecurityPolicyFlags(securityPolicy->GetFlags()); break; } default: { break; } } cur = cur->GetNext(); } exit: return error; }