mirror of
https://github.com/espressif/openthread.git
synced 2026-09-17 06:30:10 +00:00
[netif] define related types (unicast/mcast addr, iterator) as nested types (#6928)
This commit renames and moves the related types in `Netif` module like `UnicastAddress`, `MulticastAddress`, etc. under `Netif` class (as a nested type). It also moves iterator types under the related type (for example, `ExternalMulticastAddressIteratorBuilder` becomes `Iterator::Builder` under `ExternalMulticastAddress` class. These changes help simplify the code (allow us to use shorter names in the `Netif` implementation).
This commit is contained in:
@@ -87,7 +87,7 @@ otError otIp6AddUnicastAddress(otInstance *aInstance, const otNetifAddress *aAdd
|
|||||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||||
|
|
||||||
return instance.Get<ThreadNetif>().AddExternalUnicastAddress(
|
return instance.Get<ThreadNetif>().AddExternalUnicastAddress(
|
||||||
*static_cast<const Ip6::NetifUnicastAddress *>(aAddress));
|
*static_cast<const Ip6::Netif::UnicastAddress *>(aAddress));
|
||||||
}
|
}
|
||||||
|
|
||||||
otError otIp6RemoveUnicastAddress(otInstance *aInstance, const otIp6Address *aAddress)
|
otError otIp6RemoveUnicastAddress(otInstance *aInstance, const otIp6Address *aAddress)
|
||||||
@@ -266,9 +266,9 @@ bool otIp6IsAddressUnspecified(const otIp6Address *aAddress)
|
|||||||
|
|
||||||
otError otIp6SelectSourceAddress(otInstance *aInstance, otMessageInfo *aMessageInfo)
|
otError otIp6SelectSourceAddress(otInstance *aInstance, otMessageInfo *aMessageInfo)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Instance & instance = *static_cast<Instance *>(aInstance);
|
Instance & instance = *static_cast<Instance *>(aInstance);
|
||||||
const Ip6::NetifUnicastAddress *netifAddr;
|
const Ip6::Netif::UnicastAddress *netifAddr;
|
||||||
|
|
||||||
netifAddr = instance.Get<Ip6::Ip6>().SelectSourceAddress(*static_cast<Ip6::MessageInfo *>(aMessageInfo));
|
netifAddr = instance.Get<Ip6::Ip6>().SelectSourceAddress(*static_cast<Ip6::MessageInfo *>(aMessageInfo));
|
||||||
VerifyOrExit(netifAddr != nullptr, error = kErrorNotFound);
|
VerifyOrExit(netifAddr != nullptr, error = kErrorNotFound);
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ private:
|
|||||||
|
|
||||||
NetworkData::OnMeshPrefixConfig mDomainPrefixConfig;
|
NetworkData::OnMeshPrefixConfig mDomainPrefixConfig;
|
||||||
|
|
||||||
Ip6::NetifUnicastAddress mBackboneRouterPrimaryAloc;
|
Ip6::Netif::UnicastAddress mBackboneRouterPrimaryAloc;
|
||||||
Ip6::Address mAllNetworkBackboneRouters;
|
Ip6::Address mAllNetworkBackboneRouters;
|
||||||
Ip6::Address mAllDomainBackboneRouters;
|
Ip6::Address mAllDomainBackboneRouters;
|
||||||
otBackboneRouterDomainPrefixCallback mDomainPrefixCallback;
|
otBackboneRouterDomainPrefixCallback mDomainPrefixCallback;
|
||||||
|
|||||||
@@ -189,8 +189,8 @@ private:
|
|||||||
Coap::Resource mPendingSet;
|
Coap::Resource mPendingSet;
|
||||||
Coap::Resource mProxyTransmit;
|
Coap::Resource mProxyTransmit;
|
||||||
|
|
||||||
Ip6::Udp::Receiver mUdpReceiver; ///< The UDP receiver to receive packets from external commissioner
|
Ip6::Udp::Receiver mUdpReceiver; ///< The UDP receiver to receive packets from external commissioner
|
||||||
Ip6::NetifUnicastAddress mCommissionerAloc;
|
Ip6::Netif::UnicastAddress mCommissionerAloc;
|
||||||
|
|
||||||
TimerMilli mTimer;
|
TimerMilli mTimer;
|
||||||
State mState;
|
State mState;
|
||||||
|
|||||||
@@ -462,7 +462,7 @@ private:
|
|||||||
EnergyScanClient mEnergyScan;
|
EnergyScanClient mEnergyScan;
|
||||||
PanIdQueryClient mPanIdQuery;
|
PanIdQueryClient mPanIdQuery;
|
||||||
|
|
||||||
Ip6::NetifUnicastAddress mCommissionerAloc;
|
Ip6::Netif::UnicastAddress mCommissionerAloc;
|
||||||
|
|
||||||
char mProvisioningUrl[OT_PROVISIONING_URL_MAX_SIZE + 1]; // + 1 is for null char at end of string.
|
char mProvisioningUrl[OT_PROVISIONING_URL_MAX_SIZE + 1]; // + 1 is for null char at end of string.
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ Client::Client(Instance &aInstance)
|
|||||||
memset(mIdentityAssociations, 0, sizeof(mIdentityAssociations));
|
memset(mIdentityAssociations, 0, sizeof(mIdentityAssociations));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::MatchNetifAddressWithPrefix(const Ip6::NetifUnicastAddress &aNetifAddress, const Ip6::Prefix &aIp6Prefix)
|
bool Client::MatchNetifAddressWithPrefix(const Ip6::Netif::UnicastAddress &aNetifAddress, const Ip6::Prefix &aIp6Prefix)
|
||||||
{
|
{
|
||||||
return aNetifAddress.HasPrefix(aIp6Prefix);
|
return aNetifAddress.HasPrefix(aIp6Prefix);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,18 +99,18 @@ private:
|
|||||||
|
|
||||||
struct IdentityAssociation
|
struct IdentityAssociation
|
||||||
{
|
{
|
||||||
Ip6::NetifUnicastAddress mNetifAddress;
|
Ip6::Netif::UnicastAddress mNetifAddress;
|
||||||
uint32_t mPreferredLifetime;
|
uint32_t mPreferredLifetime;
|
||||||
uint32_t mValidLifetime;
|
uint32_t mValidLifetime;
|
||||||
uint16_t mPrefixAgentRloc;
|
uint16_t mPrefixAgentRloc;
|
||||||
IaStatus mStatus;
|
IaStatus mStatus;
|
||||||
};
|
};
|
||||||
|
|
||||||
void Start(void);
|
void Start(void);
|
||||||
void Stop(void);
|
void Stop(void);
|
||||||
|
|
||||||
static bool MatchNetifAddressWithPrefix(const Ip6::NetifUnicastAddress &aNetifAddress,
|
static bool MatchNetifAddressWithPrefix(const Ip6::Netif::UnicastAddress &aNetifAddress,
|
||||||
const Ip6::Prefix & aIp6Prefix);
|
const Ip6::Prefix & aIp6Prefix);
|
||||||
|
|
||||||
void Solicit(uint16_t aRloc16);
|
void Solicit(uint16_t aRloc16);
|
||||||
|
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ private:
|
|||||||
* @returns the ALOC.
|
* @returns the ALOC.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Ip6::NetifUnicastAddress &GetAloc(void) { return mAloc; }
|
Ip6::Netif::UnicastAddress &GetAloc(void) { return mAloc; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method returns the IPv6 prefix.
|
* This method returns the IPv6 prefix.
|
||||||
@@ -176,8 +176,8 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ip6::NetifUnicastAddress mAloc;
|
Ip6::Netif::UnicastAddress mAloc;
|
||||||
Ip6::Prefix mPrefix;
|
Ip6::Prefix mPrefix;
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr uint16_t kNumPrefixes = OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES;
|
static constexpr uint16_t kNumPrefixes = OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES;
|
||||||
|
|||||||
+13
-13
@@ -219,10 +219,10 @@ exit:
|
|||||||
|
|
||||||
Error Ip6::AddTunneledMplOption(Message &aMessage, Header &aHeader, MessageInfo &aMessageInfo)
|
Error Ip6::AddTunneledMplOption(Message &aMessage, Header &aHeader, MessageInfo &aMessageInfo)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
Header tunnelHeader;
|
Header tunnelHeader;
|
||||||
const NetifUnicastAddress *source;
|
const Netif::UnicastAddress *source;
|
||||||
MessageInfo messageInfo(aMessageInfo);
|
MessageInfo messageInfo(aMessageInfo);
|
||||||
|
|
||||||
// Use IP-in-IP encapsulation (RFC2473) and ALL_MPL_FORWARDERS address.
|
// Use IP-in-IP encapsulation (RFC2473) and ALL_MPL_FORWARDERS address.
|
||||||
messageInfo.GetPeerAddr().SetToRealmLocalAllMplForwarders();
|
messageInfo.GetPeerAddr().SetToRealmLocalAllMplForwarders();
|
||||||
@@ -469,7 +469,7 @@ Error Ip6::SendDatagram(Message &aMessage, MessageInfo &aMessageInfo, uint8_t aI
|
|||||||
|
|
||||||
if (aMessageInfo.GetSockAddr().IsUnspecified() || aMessageInfo.GetSockAddr().IsMulticast())
|
if (aMessageInfo.GetSockAddr().IsUnspecified() || aMessageInfo.GetSockAddr().IsMulticast())
|
||||||
{
|
{
|
||||||
const NetifUnicastAddress *source = SelectSourceAddress(aMessageInfo);
|
const Netif::UnicastAddress *source = SelectSourceAddress(aMessageInfo);
|
||||||
|
|
||||||
VerifyOrExit(source != nullptr, error = kErrorInvalidSourceAddress);
|
VerifyOrExit(source != nullptr, error = kErrorInvalidSourceAddress);
|
||||||
header.SetSource(source->GetAddress());
|
header.SetSource(source->GetAddress());
|
||||||
@@ -1373,15 +1373,15 @@ exit:
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NetifUnicastAddress *Ip6::SelectSourceAddress(MessageInfo &aMessageInfo)
|
const Netif::UnicastAddress *Ip6::SelectSourceAddress(MessageInfo &aMessageInfo)
|
||||||
{
|
{
|
||||||
Address * destination = &aMessageInfo.GetPeerAddr();
|
Address * destination = &aMessageInfo.GetPeerAddr();
|
||||||
uint8_t destinationScope = destination->GetScope();
|
uint8_t destinationScope = destination->GetScope();
|
||||||
const bool destinationIsRoutingLocator = Get<Mle::Mle>().IsRoutingLocator(*destination);
|
const bool destinationIsRoutingLocator = Get<Mle::Mle>().IsRoutingLocator(*destination);
|
||||||
const NetifUnicastAddress *rvalAddr = nullptr;
|
const Netif::UnicastAddress *rvalAddr = nullptr;
|
||||||
uint8_t rvalPrefixMatched = 0;
|
uint8_t rvalPrefixMatched = 0;
|
||||||
|
|
||||||
for (const NetifUnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr; addr = addr->GetNext())
|
for (const Netif::UnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr; addr = addr->GetNext())
|
||||||
{
|
{
|
||||||
const Address *candidateAddr = &addr->GetAddress();
|
const Address *candidateAddr = &addr->GetAddress();
|
||||||
uint8_t candidatePrefixMatched;
|
uint8_t candidatePrefixMatched;
|
||||||
@@ -1488,7 +1488,7 @@ bool Ip6::IsOnLink(const Address &aAddress) const
|
|||||||
ExitNow(rval = true);
|
ExitNow(rval = true);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const NetifUnicastAddress *cur = Get<ThreadNetif>().GetUnicastAddresses(); cur; cur = cur->GetNext())
|
for (const Netif::UnicastAddress *cur = Get<ThreadNetif>().GetUnicastAddresses(); cur; cur = cur->GetNext())
|
||||||
{
|
{
|
||||||
if (cur->GetAddress().PrefixMatch(aAddress) >= cur->mPrefixLength)
|
if (cur->GetAddress().PrefixMatch(aAddress) >= cur->mPrefixLength)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ public:
|
|||||||
* @returns A pointer to the selected IPv6 source address or nullptr if no source address was found.
|
* @returns A pointer to the selected IPv6 source address or nullptr if no source address was found.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
const NetifUnicastAddress *SelectSourceAddress(MessageInfo &aMessageInfo);
|
const Netif::UnicastAddress *SelectSourceAddress(MessageInfo &aMessageInfo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method returns a reference to the send queue.
|
* This method returns a reference to the send queue.
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ private:
|
|||||||
void FreeAloc(void) { mAloc.mNext = &mAloc; }
|
void FreeAloc(void) { mAloc.mNext = &mAloc; }
|
||||||
bool IsAlocInUse(void) const { return mAloc.mNext != &mAloc; }
|
bool IsAlocInUse(void) const { return mAloc.mNext != &mAloc; }
|
||||||
|
|
||||||
Ip6::NetifUnicastAddress mAloc;
|
Ip6::Netif::UnicastAddress mAloc;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace NeighborDiscovery
|
} // namespace NeighborDiscovery
|
||||||
|
|||||||
+86
-58
@@ -45,7 +45,7 @@ namespace Ip6 {
|
|||||||
class AddressInfo : public otIp6AddressInfo
|
class AddressInfo : public otIp6AddressInfo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit AddressInfo(const NetifUnicastAddress &aAddress)
|
explicit AddressInfo(const Netif::UnicastAddress &aAddress)
|
||||||
{
|
{
|
||||||
mAddress = &aAddress.mAddress;
|
mAddress = &aAddress.mAddress;
|
||||||
mPrefixLength = aAddress.mPrefixLength;
|
mPrefixLength = aAddress.mPrefixLength;
|
||||||
@@ -53,7 +53,7 @@ public:
|
|||||||
mPreferred = aAddress.mPreferred;
|
mPreferred = aAddress.mPreferred;
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit AddressInfo(const NetifMulticastAddress &aAddress)
|
explicit AddressInfo(const Netif::MulticastAddress &aAddress)
|
||||||
{
|
{
|
||||||
mAddress = &aAddress.GetAddress();
|
mAddress = &aAddress.GetAddress();
|
||||||
mPrefixLength = kMulticastPrefixLength;
|
mPrefixLength = kMulticastPrefixLength;
|
||||||
@@ -103,6 +103,9 @@ const otNetifMulticastAddress Netif::kLinkLocalAllRoutersMulticastAddress = {
|
|||||||
{{{0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}}},
|
{{{0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}}},
|
||||||
&Netif::kRealmLocalAllRoutersMulticastAddress};
|
&Netif::kRealmLocalAllRoutersMulticastAddress};
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Netif
|
||||||
|
|
||||||
Netif::Netif(Instance &aInstance)
|
Netif::Netif(Instance &aInstance)
|
||||||
: InstanceLocator(aInstance)
|
: InstanceLocator(aInstance)
|
||||||
, mMulticastPromiscuous(false)
|
, mMulticastPromiscuous(false)
|
||||||
@@ -118,9 +121,9 @@ bool Netif::IsMulticastSubscribed(const Address &aAddress) const
|
|||||||
|
|
||||||
void Netif::SubscribeAllNodesMulticast(void)
|
void Netif::SubscribeAllNodesMulticast(void)
|
||||||
{
|
{
|
||||||
NetifMulticastAddress *tail;
|
MulticastAddress *tail;
|
||||||
NetifMulticastAddress &linkLocalAllNodesAddress =
|
MulticastAddress &linkLocalAllNodesAddress =
|
||||||
static_cast<NetifMulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllNodesMulticastAddress));
|
static_cast<MulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllNodesMulticastAddress));
|
||||||
|
|
||||||
VerifyOrExit(!mMulticastAddresses.Contains(linkLocalAllNodesAddress));
|
VerifyOrExit(!mMulticastAddresses.Contains(linkLocalAllNodesAddress));
|
||||||
|
|
||||||
@@ -144,7 +147,7 @@ void Netif::SubscribeAllNodesMulticast(void)
|
|||||||
|
|
||||||
VerifyOrExit(mAddressCallback != nullptr);
|
VerifyOrExit(mAddressCallback != nullptr);
|
||||||
|
|
||||||
for (const NetifMulticastAddress *entry = &linkLocalAllNodesAddress; entry; entry = entry->GetNext())
|
for (const MulticastAddress *entry = &linkLocalAllNodesAddress; entry; entry = entry->GetNext())
|
||||||
{
|
{
|
||||||
AddressInfo addressInfo(*entry);
|
AddressInfo addressInfo(*entry);
|
||||||
|
|
||||||
@@ -158,9 +161,9 @@ exit:
|
|||||||
|
|
||||||
void Netif::UnsubscribeAllNodesMulticast(void)
|
void Netif::UnsubscribeAllNodesMulticast(void)
|
||||||
{
|
{
|
||||||
NetifMulticastAddress * prev;
|
MulticastAddress * prev;
|
||||||
const NetifMulticastAddress &linkLocalAllNodesAddress =
|
const MulticastAddress &linkLocalAllNodesAddress =
|
||||||
static_cast<NetifMulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllNodesMulticastAddress));
|
static_cast<MulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllNodesMulticastAddress));
|
||||||
|
|
||||||
// The tail of multicast address linked list contains the
|
// The tail of multicast address linked list contains the
|
||||||
// fixed addresses. Search if LinkLocalAll is present
|
// fixed addresses. Search if LinkLocalAll is present
|
||||||
@@ -178,7 +181,7 @@ void Netif::UnsubscribeAllNodesMulticast(void)
|
|||||||
// LinkLocalAllRouters -> RealmLocalAllRouters -> LinkLocalAll
|
// LinkLocalAllRouters -> RealmLocalAllRouters -> LinkLocalAll
|
||||||
// -> RealmLocalAll -> RealmLocalAllMpl.
|
// -> RealmLocalAll -> RealmLocalAllMpl.
|
||||||
|
|
||||||
OT_ASSERT(prev != static_cast<NetifMulticastAddress *>(
|
OT_ASSERT(prev != static_cast<MulticastAddress *>(
|
||||||
const_cast<otNetifMulticastAddress *>(&kRealmLocalAllRoutersMulticastAddress)));
|
const_cast<otNetifMulticastAddress *>(&kRealmLocalAllRoutersMulticastAddress)));
|
||||||
|
|
||||||
if (prev == nullptr)
|
if (prev == nullptr)
|
||||||
@@ -194,7 +197,7 @@ void Netif::UnsubscribeAllNodesMulticast(void)
|
|||||||
|
|
||||||
VerifyOrExit(mAddressCallback != nullptr);
|
VerifyOrExit(mAddressCallback != nullptr);
|
||||||
|
|
||||||
for (const NetifMulticastAddress *entry = &linkLocalAllNodesAddress; entry; entry = entry->GetNext())
|
for (const MulticastAddress *entry = &linkLocalAllNodesAddress; entry; entry = entry->GetNext())
|
||||||
{
|
{
|
||||||
AddressInfo addressInfo(*entry);
|
AddressInfo addressInfo(*entry);
|
||||||
|
|
||||||
@@ -208,14 +211,14 @@ exit:
|
|||||||
|
|
||||||
void Netif::SubscribeAllRoutersMulticast(void)
|
void Netif::SubscribeAllRoutersMulticast(void)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
NetifMulticastAddress *prev = nullptr;
|
MulticastAddress *prev = nullptr;
|
||||||
NetifMulticastAddress &linkLocalAllRoutersAddress = static_cast<NetifMulticastAddress &>(
|
MulticastAddress &linkLocalAllRoutersAddress =
|
||||||
const_cast<otNetifMulticastAddress &>(kLinkLocalAllRoutersMulticastAddress));
|
static_cast<MulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllRoutersMulticastAddress));
|
||||||
NetifMulticastAddress &linkLocalAllNodesAddress =
|
MulticastAddress &linkLocalAllNodesAddress =
|
||||||
static_cast<NetifMulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllNodesMulticastAddress));
|
static_cast<MulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllNodesMulticastAddress));
|
||||||
NetifMulticastAddress &realmLocalAllRoutersAddress = static_cast<NetifMulticastAddress &>(
|
MulticastAddress &realmLocalAllRoutersAddress =
|
||||||
const_cast<otNetifMulticastAddress &>(kRealmLocalAllRoutersMulticastAddress));
|
static_cast<MulticastAddress &>(const_cast<otNetifMulticastAddress &>(kRealmLocalAllRoutersMulticastAddress));
|
||||||
|
|
||||||
error = mMulticastAddresses.Find(linkLocalAllNodesAddress, prev);
|
error = mMulticastAddresses.Find(linkLocalAllNodesAddress, prev);
|
||||||
|
|
||||||
@@ -254,8 +257,8 @@ void Netif::SubscribeAllRoutersMulticast(void)
|
|||||||
|
|
||||||
VerifyOrExit(mAddressCallback != nullptr);
|
VerifyOrExit(mAddressCallback != nullptr);
|
||||||
|
|
||||||
for (const NetifMulticastAddress *entry = &linkLocalAllRoutersAddress; entry != &linkLocalAllNodesAddress;
|
for (const MulticastAddress *entry = &linkLocalAllRoutersAddress; entry != &linkLocalAllNodesAddress;
|
||||||
entry = entry->GetNext())
|
entry = entry->GetNext())
|
||||||
{
|
{
|
||||||
AddressInfo addressInfo(*entry);
|
AddressInfo addressInfo(*entry);
|
||||||
|
|
||||||
@@ -269,11 +272,11 @@ exit:
|
|||||||
|
|
||||||
void Netif::UnsubscribeAllRoutersMulticast(void)
|
void Netif::UnsubscribeAllRoutersMulticast(void)
|
||||||
{
|
{
|
||||||
NetifMulticastAddress *prev;
|
MulticastAddress *prev;
|
||||||
NetifMulticastAddress &linkLocalAllRoutersAddress = static_cast<NetifMulticastAddress &>(
|
MulticastAddress &linkLocalAllRoutersAddress =
|
||||||
const_cast<otNetifMulticastAddress &>(kLinkLocalAllRoutersMulticastAddress));
|
static_cast<MulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllRoutersMulticastAddress));
|
||||||
NetifMulticastAddress &linkLocalAllNodesAddress =
|
MulticastAddress &linkLocalAllNodesAddress =
|
||||||
static_cast<NetifMulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllNodesMulticastAddress));
|
static_cast<MulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllNodesMulticastAddress));
|
||||||
|
|
||||||
// The tail of multicast address linked list contains the
|
// The tail of multicast address linked list contains the
|
||||||
// fixed addresses. We check for the chain of five addresses:
|
// fixed addresses. We check for the chain of five addresses:
|
||||||
@@ -300,8 +303,8 @@ void Netif::UnsubscribeAllRoutersMulticast(void)
|
|||||||
|
|
||||||
VerifyOrExit(mAddressCallback != nullptr);
|
VerifyOrExit(mAddressCallback != nullptr);
|
||||||
|
|
||||||
for (const NetifMulticastAddress *entry = &linkLocalAllRoutersAddress; entry != &linkLocalAllNodesAddress;
|
for (const MulticastAddress *entry = &linkLocalAllRoutersAddress; entry != &linkLocalAllNodesAddress;
|
||||||
entry = entry->GetNext())
|
entry = entry->GetNext())
|
||||||
{
|
{
|
||||||
AddressInfo addressInfo(*entry);
|
AddressInfo addressInfo(*entry);
|
||||||
|
|
||||||
@@ -313,12 +316,12 @@ exit:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Netif::IsMulticastAddressExternal(const NetifMulticastAddress &aAddress) const
|
bool Netif::IsMulticastAddressExternal(const MulticastAddress &aAddress) const
|
||||||
{
|
{
|
||||||
return mExtMulticastAddressPool.IsPoolEntry(static_cast<const ExternalNetifMulticastAddress &>(aAddress));
|
return mExtMulticastAddressPool.IsPoolEntry(static_cast<const ExternalMulticastAddress &>(aAddress));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Netif::SubscribeMulticast(NetifMulticastAddress &aAddress)
|
void Netif::SubscribeMulticast(MulticastAddress &aAddress)
|
||||||
{
|
{
|
||||||
SuccessOrExit(mMulticastAddresses.Add(aAddress));
|
SuccessOrExit(mMulticastAddresses.Add(aAddress));
|
||||||
|
|
||||||
@@ -337,7 +340,7 @@ exit:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Netif::UnsubscribeMulticast(const NetifMulticastAddress &aAddress)
|
void Netif::UnsubscribeMulticast(const MulticastAddress &aAddress)
|
||||||
{
|
{
|
||||||
SuccessOrExit(mMulticastAddresses.Remove(aAddress));
|
SuccessOrExit(mMulticastAddresses.Remove(aAddress));
|
||||||
|
|
||||||
@@ -357,10 +360,10 @@ exit:
|
|||||||
|
|
||||||
Error Netif::SubscribeExternalMulticast(const Address &aAddress)
|
Error Netif::SubscribeExternalMulticast(const Address &aAddress)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
NetifMulticastAddress &linkLocalAllRoutersAddress = static_cast<NetifMulticastAddress &>(
|
MulticastAddress &linkLocalAllRoutersAddress =
|
||||||
const_cast<otNetifMulticastAddress &>(kLinkLocalAllRoutersMulticastAddress));
|
static_cast<MulticastAddress &>(const_cast<otNetifMulticastAddress &>(kLinkLocalAllRoutersMulticastAddress));
|
||||||
ExternalNetifMulticastAddress *entry;
|
ExternalMulticastAddress *entry;
|
||||||
|
|
||||||
VerifyOrExit(aAddress.IsMulticast(), error = kErrorInvalidArgs);
|
VerifyOrExit(aAddress.IsMulticast(), error = kErrorInvalidArgs);
|
||||||
VerifyOrExit(!IsMulticastSubscribed(aAddress), error = kErrorAlready);
|
VerifyOrExit(!IsMulticastSubscribed(aAddress), error = kErrorAlready);
|
||||||
@@ -369,7 +372,7 @@ Error Netif::SubscribeExternalMulticast(const Address &aAddress)
|
|||||||
// LinkLocalAllRouters -> RealmLocalAllRouters -> LinkLocalAllNodes
|
// LinkLocalAllRouters -> RealmLocalAllRouters -> LinkLocalAllNodes
|
||||||
// -> RealmLocalAllNodes -> RealmLocalAllMpl.
|
// -> RealmLocalAllNodes -> RealmLocalAllMpl.
|
||||||
|
|
||||||
for (const NetifMulticastAddress *cur = &linkLocalAllRoutersAddress; cur; cur = cur->GetNext())
|
for (const MulticastAddress *cur = &linkLocalAllRoutersAddress; cur; cur = cur->GetNext())
|
||||||
{
|
{
|
||||||
VerifyOrExit(cur->GetAddress() != aAddress, error = kErrorInvalidArgs);
|
VerifyOrExit(cur->GetAddress() != aAddress, error = kErrorInvalidArgs);
|
||||||
}
|
}
|
||||||
@@ -390,9 +393,9 @@ exit:
|
|||||||
|
|
||||||
Error Netif::UnsubscribeExternalMulticast(const Address &aAddress)
|
Error Netif::UnsubscribeExternalMulticast(const Address &aAddress)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
NetifMulticastAddress *entry;
|
MulticastAddress *entry;
|
||||||
NetifMulticastAddress *prev;
|
MulticastAddress *prev;
|
||||||
|
|
||||||
entry = mMulticastAddresses.FindMatching(aAddress, prev);
|
entry = mMulticastAddresses.FindMatching(aAddress, prev);
|
||||||
VerifyOrExit(entry != nullptr, error = kErrorNotFound);
|
VerifyOrExit(entry != nullptr, error = kErrorNotFound);
|
||||||
@@ -401,7 +404,7 @@ Error Netif::UnsubscribeExternalMulticast(const Address &aAddress)
|
|||||||
|
|
||||||
mMulticastAddresses.PopAfter(prev);
|
mMulticastAddresses.PopAfter(prev);
|
||||||
|
|
||||||
mExtMulticastAddressPool.Free(static_cast<ExternalNetifMulticastAddress &>(*entry));
|
mExtMulticastAddressPool.Free(static_cast<ExternalMulticastAddress &>(*entry));
|
||||||
|
|
||||||
Get<Notifier>().Signal(kEventIp6MulticastUnsubscribed);
|
Get<Notifier>().Signal(kEventIp6MulticastUnsubscribed);
|
||||||
|
|
||||||
@@ -411,9 +414,9 @@ exit:
|
|||||||
|
|
||||||
void Netif::UnsubscribeAllExternalMulticastAddresses(void)
|
void Netif::UnsubscribeAllExternalMulticastAddresses(void)
|
||||||
{
|
{
|
||||||
NetifMulticastAddress *next;
|
MulticastAddress *next;
|
||||||
|
|
||||||
for (NetifMulticastAddress *entry = mMulticastAddresses.GetHead(); entry != nullptr; entry = next)
|
for (MulticastAddress *entry = mMulticastAddresses.GetHead(); entry != nullptr; entry = next)
|
||||||
{
|
{
|
||||||
next = entry->GetNext();
|
next = entry->GetNext();
|
||||||
|
|
||||||
@@ -430,7 +433,7 @@ void Netif::SetAddressCallback(otIp6AddressCallback aCallback, void *aCallbackCo
|
|||||||
mAddressCallbackContext = aCallbackContext;
|
mAddressCallbackContext = aCallbackContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Netif::AddUnicastAddress(NetifUnicastAddress &aAddress)
|
void Netif::AddUnicastAddress(UnicastAddress &aAddress)
|
||||||
{
|
{
|
||||||
SuccessOrExit(mUnicastAddresses.Add(aAddress));
|
SuccessOrExit(mUnicastAddresses.Add(aAddress));
|
||||||
|
|
||||||
@@ -449,7 +452,7 @@ exit:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Netif::RemoveUnicastAddress(const NetifUnicastAddress &aAddress)
|
void Netif::RemoveUnicastAddress(const UnicastAddress &aAddress)
|
||||||
{
|
{
|
||||||
SuccessOrExit(mUnicastAddresses.Remove(aAddress));
|
SuccessOrExit(mUnicastAddresses.Remove(aAddress));
|
||||||
|
|
||||||
@@ -466,10 +469,10 @@ exit:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error Netif::AddExternalUnicastAddress(const NetifUnicastAddress &aAddress)
|
Error Netif::AddExternalUnicastAddress(const UnicastAddress &aAddress)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
NetifUnicastAddress *entry;
|
UnicastAddress *entry;
|
||||||
|
|
||||||
VerifyOrExit(!aAddress.GetAddress().IsMulticast(), error = kErrorInvalidArgs);
|
VerifyOrExit(!aAddress.GetAddress().IsMulticast(), error = kErrorInvalidArgs);
|
||||||
|
|
||||||
@@ -501,9 +504,9 @@ exit:
|
|||||||
|
|
||||||
Error Netif::RemoveExternalUnicastAddress(const Address &aAddress)
|
Error Netif::RemoveExternalUnicastAddress(const Address &aAddress)
|
||||||
{
|
{
|
||||||
Error error = kErrorNone;
|
Error error = kErrorNone;
|
||||||
NetifUnicastAddress *entry;
|
UnicastAddress *entry;
|
||||||
NetifUnicastAddress *prev;
|
UnicastAddress *prev;
|
||||||
|
|
||||||
entry = mUnicastAddresses.FindMatching(aAddress, prev);
|
entry = mUnicastAddresses.FindMatching(aAddress, prev);
|
||||||
VerifyOrExit(entry != nullptr, error = kErrorNotFound);
|
VerifyOrExit(entry != nullptr, error = kErrorNotFound);
|
||||||
@@ -520,9 +523,9 @@ exit:
|
|||||||
|
|
||||||
void Netif::RemoveAllExternalUnicastAddresses(void)
|
void Netif::RemoveAllExternalUnicastAddresses(void)
|
||||||
{
|
{
|
||||||
NetifUnicastAddress *next;
|
UnicastAddress *next;
|
||||||
|
|
||||||
for (NetifUnicastAddress *entry = mUnicastAddresses.GetHead(); entry != nullptr; entry = next)
|
for (UnicastAddress *entry = mUnicastAddresses.GetHead(); entry != nullptr; entry = next)
|
||||||
{
|
{
|
||||||
next = entry->GetNext();
|
next = entry->GetNext();
|
||||||
|
|
||||||
@@ -538,12 +541,15 @@ bool Netif::HasUnicastAddress(const Address &aAddress) const
|
|||||||
return mUnicastAddresses.ContainsMatching(aAddress);
|
return mUnicastAddresses.ContainsMatching(aAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Netif::IsUnicastAddressExternal(const NetifUnicastAddress &aAddress) const
|
bool Netif::IsUnicastAddressExternal(const UnicastAddress &aAddress) const
|
||||||
{
|
{
|
||||||
return mExtUnicastAddressPool.IsPoolEntry(aAddress);
|
return mExtUnicastAddressPool.IsPoolEntry(aAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetifUnicastAddress::InitAsThreadOrigin(bool aPreferred)
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Netif::UnicastAddress
|
||||||
|
|
||||||
|
void Netif::UnicastAddress::InitAsThreadOrigin(bool aPreferred)
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
mPrefixLength = NetworkPrefix::kLength;
|
mPrefixLength = NetworkPrefix::kLength;
|
||||||
@@ -552,13 +558,13 @@ void NetifUnicastAddress::InitAsThreadOrigin(bool aPreferred)
|
|||||||
mValid = true;
|
mValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetifUnicastAddress::InitAsThreadOriginRealmLocalScope(void)
|
void Netif::UnicastAddress::InitAsThreadOriginRealmLocalScope(void)
|
||||||
{
|
{
|
||||||
InitAsThreadOrigin();
|
InitAsThreadOrigin();
|
||||||
SetScopeOverride(Address::kRealmLocalScope);
|
SetScopeOverride(Address::kRealmLocalScope);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetifUnicastAddress::InitAsThreadOriginGlobalScope(void)
|
void Netif::UnicastAddress::InitAsThreadOriginGlobalScope(void)
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
mAddressOrigin = OT_ADDRESS_ORIGIN_THREAD;
|
mAddressOrigin = OT_ADDRESS_ORIGIN_THREAD;
|
||||||
@@ -566,7 +572,7 @@ void NetifUnicastAddress::InitAsThreadOriginGlobalScope(void)
|
|||||||
SetScopeOverride(Address::kGlobalScope);
|
SetScopeOverride(Address::kGlobalScope);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetifUnicastAddress::InitAsSlaacOrigin(uint8_t aPrefixLength, bool aPreferred)
|
void Netif::UnicastAddress::InitAsSlaacOrigin(uint8_t aPrefixLength, bool aPreferred)
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
mPrefixLength = aPrefixLength;
|
mPrefixLength = aPrefixLength;
|
||||||
@@ -575,5 +581,27 @@ void NetifUnicastAddress::InitAsSlaacOrigin(uint8_t aPrefixLength, bool aPreferr
|
|||||||
mValid = true;
|
mValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Netif::ExternalMulticastAddress::Iterator
|
||||||
|
|
||||||
|
Netif::ExternalMulticastAddress::Iterator::Iterator(const Netif &aNetif, Address::TypeFilter aFilter)
|
||||||
|
: ItemPtrIterator(nullptr)
|
||||||
|
, mNetif(aNetif)
|
||||||
|
, mFilter(aFilter)
|
||||||
|
{
|
||||||
|
AdvanceFrom(mNetif.GetMulticastAddresses());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Netif::ExternalMulticastAddress::Iterator::AdvanceFrom(const MulticastAddress *aAddr)
|
||||||
|
{
|
||||||
|
while (aAddr != nullptr &&
|
||||||
|
!(mNetif.IsMulticastAddressExternal(*aAddr) && aAddr->GetAddress().MatchesFilter(mFilter)))
|
||||||
|
{
|
||||||
|
aAddr = aAddr->GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
mItem = const_cast<ExternalMulticastAddress *>(static_cast<const ExternalMulticastAddress *>(aAddr));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Ip6
|
} // namespace Ip6
|
||||||
} // namespace ot
|
} // namespace ot
|
||||||
|
|||||||
+247
-269
@@ -64,202 +64,6 @@ class Ip6;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* This class implements an IPv6 network interface unicast address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class NetifUnicastAddress : public otNetifAddress,
|
|
||||||
public LinkedListEntry<NetifUnicastAddress>,
|
|
||||||
public Clearable<NetifUnicastAddress>
|
|
||||||
{
|
|
||||||
friend class Netif;
|
|
||||||
friend class LinkedList<NetifUnicastAddress>;
|
|
||||||
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* This method clears and initializes the unicast address as a preferred, valid, thread-origin address with 64-bit
|
|
||||||
* prefix length.
|
|
||||||
*
|
|
||||||
* @param[in] aPreferred Whether to initialize as a preferred address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void InitAsThreadOrigin(bool aPreferred = false);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method clears and initializes the unicast address as a valid (but not preferred), thread-origin, realm-local
|
|
||||||
* scope (overridden) address with 64-bit prefix length.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void InitAsThreadOriginRealmLocalScope(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method clears and initializes the unicast address as a valid (but not preferred), thread-origin, global
|
|
||||||
* scope address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void InitAsThreadOriginGlobalScope(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method clears and initializes the unicast address as a valid, SLAAC-origin address with a given preferred
|
|
||||||
* flag and a given prefix length.
|
|
||||||
*
|
|
||||||
* @param[in] aPrefixLength The prefix length (in bits).
|
|
||||||
* @param[in] aPreferred The preferred flag.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void InitAsSlaacOrigin(uint8_t aPrefixLength, bool aPreferred);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns the unicast address.
|
|
||||||
*
|
|
||||||
* @returns The unicast address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
const Address &GetAddress(void) const { return static_cast<const Address &>(mAddress); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns the unicast address.
|
|
||||||
*
|
|
||||||
* @returns The unicast address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
Address &GetAddress(void) { return static_cast<Address &>(mAddress); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns the address's prefix length (in bits).
|
|
||||||
*
|
|
||||||
* @returns The prefix length (in bits).
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
uint8_t GetPrefixLength(void) const { return mPrefixLength; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method indicates whether the address has a given prefix (i.e. same prefix length and matches the prefix).
|
|
||||||
*
|
|
||||||
* @param[in] aPrefix A prefix to check against.
|
|
||||||
*
|
|
||||||
* @retval TRUE The address has and fully matches the @p aPrefix.
|
|
||||||
* @retval FALSE The address does not contain or match the @p aPrefix.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
bool HasPrefix(const Prefix &aPrefix) const
|
|
||||||
{
|
|
||||||
return (mPrefixLength == aPrefix.GetLength()) && GetAddress().MatchesPrefix(aPrefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns the IPv6 scope value.
|
|
||||||
*
|
|
||||||
* @returns The IPv6 scope value.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
uint8_t GetScope(void) const
|
|
||||||
{
|
|
||||||
return mScopeOverrideValid ? static_cast<uint8_t>(mScopeOverride) : GetAddress().GetScope();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method sets the IPv6 scope override value.
|
|
||||||
*
|
|
||||||
* @param[in] aScope The IPv6 scope value.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void SetScopeOverride(uint8_t aScope)
|
|
||||||
{
|
|
||||||
mScopeOverride = aScope;
|
|
||||||
mScopeOverrideValid = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool Matches(const Address &aAddress) const { return GetAddress() == aAddress; }
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class implements an IPv6 network interface multicast address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class NetifMulticastAddress : public otNetifMulticastAddress,
|
|
||||||
public LinkedListEntry<NetifMulticastAddress>,
|
|
||||||
public Clearable<NetifMulticastAddress>
|
|
||||||
{
|
|
||||||
friend class Netif;
|
|
||||||
friend class LinkedList<NetifMulticastAddress>;
|
|
||||||
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* This method returns the multicast address.
|
|
||||||
*
|
|
||||||
* @returns The multicast address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
const Address &GetAddress(void) const { return static_cast<const Address &>(mAddress); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns the multicast address.
|
|
||||||
*
|
|
||||||
* @returns The multicast address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
Address &GetAddress(void) { return static_cast<Address &>(mAddress); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns the next multicast address subscribed to the interface.
|
|
||||||
*
|
|
||||||
* @returns A pointer to the next multicast address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
const NetifMulticastAddress *GetNext(void) const { return static_cast<const NetifMulticastAddress *>(mNext); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns the next multicast address subscribed to the interface.
|
|
||||||
*
|
|
||||||
* @returns A pointer to the next multicast address.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
NetifMulticastAddress *GetNext(void)
|
|
||||||
{
|
|
||||||
return static_cast<NetifMulticastAddress *>(const_cast<otNetifMulticastAddress *>(mNext));
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool Matches(const Address &aAddress) const { return GetAddress() == aAddress; }
|
|
||||||
};
|
|
||||||
|
|
||||||
class ExternalNetifMulticastAddress : public NetifMulticastAddress
|
|
||||||
{
|
|
||||||
friend class Netif;
|
|
||||||
friend class LinkedList<ExternalNetifMulticastAddress>;
|
|
||||||
|
|
||||||
public:
|
|
||||||
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
|
||||||
/**
|
|
||||||
* This method returns the current Multicast Listener Registration (MLR) state.
|
|
||||||
*
|
|
||||||
* @returns The current Multicast Listener Registration state.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
MlrState GetMlrState(void) const { return mMlrState; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method sets the Multicast Listener Registration (MLR) state.
|
|
||||||
*
|
|
||||||
* @param[in] aState The new Multicast Listener Registration state.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void SetMlrState(MlrState aState) { mMlrState = aState; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
|
||||||
ExternalNetifMulticastAddress *GetNext(void)
|
|
||||||
{
|
|
||||||
return static_cast<ExternalNetifMulticastAddress *>(const_cast<otNetifMulticastAddress *>(mNext));
|
|
||||||
}
|
|
||||||
|
|
||||||
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
|
||||||
MlrState mMlrState;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements an IPv6 network interface.
|
* This class implements an IPv6 network interface.
|
||||||
*
|
*
|
||||||
@@ -268,63 +72,256 @@ class Netif : public InstanceLocator, public LinkedListEntry<Netif>, private Non
|
|||||||
{
|
{
|
||||||
friend class Ip6;
|
friend class Ip6;
|
||||||
friend class Address;
|
friend class Address;
|
||||||
class ExternalMulticastAddressIteratorBuilder;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* This class represents an iterator for iterating external multicast addresses in a Netif instance.
|
* This class implements an IPv6 network interface unicast address.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class ExternalMulticastAddressIterator
|
class UnicastAddress : public otNetifAddress,
|
||||||
: public ItemPtrIterator<ExternalNetifMulticastAddress, ExternalMulticastAddressIterator>
|
public LinkedListEntry<UnicastAddress>,
|
||||||
|
public Clearable<UnicastAddress>
|
||||||
{
|
{
|
||||||
friend class ItemPtrIterator<ExternalNetifMulticastAddress, ExternalMulticastAddressIterator>;
|
friend class LinkedList<UnicastAddress>;
|
||||||
friend class ExternalMulticastAddressIteratorBuilder;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* This constructor initializes an `ExternalMulticastAddressIterator` instance to start from the first external
|
* This method clears and initializes the unicast address as a preferred, valid, thread-origin address with
|
||||||
* multicast address that matches a given IPv6 address type filter.
|
* 64-bit prefix length.
|
||||||
*
|
*
|
||||||
* @param[in] aNetif A reference to the Netif instance.
|
* @param[in] aPreferred Whether to initialize as a preferred address.
|
||||||
* @param[in] aFilter The IPv6 address type filter.
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
explicit ExternalMulticastAddressIterator(const Netif &aNetif, Address::TypeFilter aFilter = Address::kTypeAny)
|
void InitAsThreadOrigin(bool aPreferred = false);
|
||||||
: ItemPtrIterator(nullptr)
|
|
||||||
, mNetif(aNetif)
|
/**
|
||||||
, mFilter(aFilter)
|
* This method clears and initializes the unicast address as a valid (but not preferred), thread-origin,
|
||||||
|
* realm-local scope (overridden) address with 64-bit prefix length.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void InitAsThreadOriginRealmLocalScope(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method clears and initializes the unicast address as a valid (but not preferred), thread-origin, global
|
||||||
|
* scope address.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void InitAsThreadOriginGlobalScope(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method clears and initializes the unicast address as a valid, SLAAC-origin address with a given
|
||||||
|
* preferred flag and a given prefix length.
|
||||||
|
*
|
||||||
|
* @param[in] aPrefixLength The prefix length (in bits).
|
||||||
|
* @param[in] aPreferred The preferred flag.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void InitAsSlaacOrigin(uint8_t aPrefixLength, bool aPreferred);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the unicast address.
|
||||||
|
*
|
||||||
|
* @returns The unicast address.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const Address &GetAddress(void) const { return static_cast<const Address &>(mAddress); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the unicast address.
|
||||||
|
*
|
||||||
|
* @returns The unicast address.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Address &GetAddress(void) { return static_cast<Address &>(mAddress); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the address's prefix length (in bits).
|
||||||
|
*
|
||||||
|
* @returns The prefix length (in bits).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
uint8_t GetPrefixLength(void) const { return mPrefixLength; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method indicates whether the address has a given prefix (i.e. same prefix length and matches the
|
||||||
|
* prefix).
|
||||||
|
*
|
||||||
|
* @param[in] aPrefix A prefix to check against.
|
||||||
|
*
|
||||||
|
* @retval TRUE The address has and fully matches the @p aPrefix.
|
||||||
|
* @retval FALSE The address does not contain or match the @p aPrefix.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool HasPrefix(const Prefix &aPrefix) const
|
||||||
{
|
{
|
||||||
AdvanceFrom(mNetif.GetMulticastAddresses());
|
return (mPrefixLength == aPrefix.GetLength()) && GetAddress().MatchesPrefix(aPrefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the IPv6 scope value.
|
||||||
|
*
|
||||||
|
* @returns The IPv6 scope value.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
uint8_t GetScope(void) const
|
||||||
|
{
|
||||||
|
return mScopeOverrideValid ? static_cast<uint8_t>(mScopeOverride) : GetAddress().GetScope();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method sets the IPv6 scope override value.
|
||||||
|
*
|
||||||
|
* @param[in] aScope The IPv6 scope value.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void SetScopeOverride(uint8_t aScope)
|
||||||
|
{
|
||||||
|
mScopeOverride = aScope;
|
||||||
|
mScopeOverrideValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum IteratorType : uint8_t
|
bool Matches(const Address &aAddress) const { return GetAddress() == aAddress; }
|
||||||
{
|
};
|
||||||
kEndIterator,
|
|
||||||
};
|
|
||||||
|
|
||||||
ExternalMulticastAddressIterator(const Netif &aNetif, IteratorType)
|
/**
|
||||||
: mNetif(aNetif)
|
* This class implements an IPv6 network interface multicast address.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class MulticastAddress : public otNetifMulticastAddress,
|
||||||
|
public LinkedListEntry<MulticastAddress>,
|
||||||
|
public Clearable<MulticastAddress>
|
||||||
|
{
|
||||||
|
friend class LinkedList<MulticastAddress>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* This method returns the multicast address.
|
||||||
|
*
|
||||||
|
* @returns The multicast address.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const Address &GetAddress(void) const { return static_cast<const Address &>(mAddress); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the multicast address.
|
||||||
|
*
|
||||||
|
* @returns The multicast address.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Address &GetAddress(void) { return static_cast<Address &>(mAddress); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the next multicast address subscribed to the interface.
|
||||||
|
*
|
||||||
|
* @returns A pointer to the next multicast address.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const MulticastAddress *GetNext(void) const { return static_cast<const MulticastAddress *>(mNext); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the next multicast address subscribed to the interface.
|
||||||
|
*
|
||||||
|
* @returns A pointer to the next multicast address.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
MulticastAddress *GetNext(void)
|
||||||
{
|
{
|
||||||
|
return static_cast<MulticastAddress *>(const_cast<otNetifMulticastAddress *>(mNext));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdvanceFrom(const NetifMulticastAddress *aAddr)
|
private:
|
||||||
|
bool Matches(const Address &aAddress) const { return GetAddress() == aAddress; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class ExternalMulticastAddress : public MulticastAddress
|
||||||
|
{
|
||||||
|
friend class Netif;
|
||||||
|
friend class LinkedList<ExternalMulticastAddress>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* This class represents an iterator for iterating external multicast addresses in a `Netif` instance.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Iterator : public ItemPtrIterator<ExternalMulticastAddress, Iterator>
|
||||||
{
|
{
|
||||||
while (aAddr != nullptr &&
|
friend class ItemPtrIterator<ExternalMulticastAddress, Iterator>;
|
||||||
!(mNetif.IsMulticastAddressExternal(*aAddr) && aAddr->GetAddress().MatchesFilter(mFilter)))
|
friend class Netif;
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* This constructor initializes an `Iterator` instance to start from the first external multicast address
|
||||||
|
* that matches a given IPv6 address type filter.
|
||||||
|
*
|
||||||
|
* @param[in] aNetif A reference to the `Netif` instance.
|
||||||
|
* @param[in] aFilter The IPv6 address type filter.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
explicit Iterator(const Netif &aNetif, Address::TypeFilter aFilter = Address::kTypeAny);
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Builder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Builder(const Netif &aNetif, Address::TypeFilter aFilter)
|
||||||
|
: mNetif(aNetif)
|
||||||
|
, mFilter(aFilter)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Iterator begin(void) { return Iterator(mNetif, mFilter); }
|
||||||
|
Iterator end(void) { return Iterator(mNetif, Iterator::kEndIterator); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const Netif & mNetif;
|
||||||
|
Address::TypeFilter mFilter;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum IteratorType : uint8_t
|
||||||
|
{
|
||||||
|
kEndIterator,
|
||||||
|
};
|
||||||
|
|
||||||
|
Iterator(const Netif &aNetif, IteratorType)
|
||||||
|
: mNetif(aNetif)
|
||||||
{
|
{
|
||||||
aAddr = aAddr->GetNext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mItem =
|
void AdvanceFrom(const MulticastAddress *aAddr);
|
||||||
const_cast<ExternalNetifMulticastAddress *>(static_cast<const ExternalNetifMulticastAddress *>(aAddr));
|
void Advance(void) { AdvanceFrom(mItem->GetNext()); }
|
||||||
|
|
||||||
|
const Netif & mNetif;
|
||||||
|
Address::TypeFilter mFilter;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
||||||
|
/**
|
||||||
|
* This method returns the current Multicast Listener Registration (MLR) state.
|
||||||
|
*
|
||||||
|
* @returns The current Multicast Listener Registration state.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
MlrState GetMlrState(void) const { return mMlrState; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method sets the Multicast Listener Registration (MLR) state.
|
||||||
|
*
|
||||||
|
* @param[in] aState The new Multicast Listener Registration state.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void SetMlrState(MlrState aState) { mMlrState = aState; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private:
|
||||||
|
ExternalMulticastAddress *GetNext(void)
|
||||||
|
{
|
||||||
|
return static_cast<ExternalMulticastAddress *>(const_cast<otNetifMulticastAddress *>(mNext));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Advance(void) { AdvanceFrom(mItem->GetNext()); }
|
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
||||||
|
MlrState mMlrState;
|
||||||
const Netif & mNetif;
|
#endif
|
||||||
Address::TypeFilter mFilter;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -350,7 +347,7 @@ public:
|
|||||||
* @returns A pointer to the head of the linked list of unicast addresses.
|
* @returns A pointer to the head of the linked list of unicast addresses.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
const NetifUnicastAddress *GetUnicastAddresses(void) const { return mUnicastAddresses.GetHead(); }
|
const UnicastAddress *GetUnicastAddresses(void) const { return mUnicastAddresses.GetHead(); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method adds a unicast address to the network interface.
|
* This method adds a unicast address to the network interface.
|
||||||
@@ -363,7 +360,7 @@ public:
|
|||||||
* @param[in] aAddress A reference to the unicast address.
|
* @param[in] aAddress A reference to the unicast address.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void AddUnicastAddress(NetifUnicastAddress &aAddress);
|
void AddUnicastAddress(UnicastAddress &aAddress);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method removes a unicast address from the network interface.
|
* This method removes a unicast address from the network interface.
|
||||||
@@ -376,7 +373,7 @@ public:
|
|||||||
* @param[in] aAddress A reference to the unicast address.
|
* @param[in] aAddress A reference to the unicast address.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void RemoveUnicastAddress(const NetifUnicastAddress &aAddress);
|
void RemoveUnicastAddress(const UnicastAddress &aAddress);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method indicates whether or not an address is assigned to the interface.
|
* This method indicates whether or not an address is assigned to the interface.
|
||||||
@@ -398,7 +395,7 @@ public:
|
|||||||
* @retval FALSE If @p aAddress is not assigned to the network interface.
|
* @retval FALSE If @p aAddress is not assigned to the network interface.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
bool HasUnicastAddress(const NetifUnicastAddress &aAddress) const { return mUnicastAddresses.Contains(aAddress); }
|
bool HasUnicastAddress(const UnicastAddress &aAddress) const { return mUnicastAddresses.Contains(aAddress); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method indicates whether a unicast address is an external or internal address.
|
* This method indicates whether a unicast address is an external or internal address.
|
||||||
@@ -409,7 +406,7 @@ public:
|
|||||||
* @retval FALSE The address is not an external address (it is an OpenThread internal address).
|
* @retval FALSE The address is not an external address (it is an OpenThread internal address).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
bool IsUnicastAddressExternal(const NetifUnicastAddress &aAddress) const;
|
bool IsUnicastAddressExternal(const UnicastAddress &aAddress) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method adds an external (to OpenThread) unicast address to the network interface.
|
* This method adds an external (to OpenThread) unicast address to the network interface.
|
||||||
@@ -425,7 +422,7 @@ public:
|
|||||||
* @retval kErrorNoBufs The maximum number of allowed external addresses are already added.
|
* @retval kErrorNoBufs The maximum number of allowed external addresses are already added.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Error AddExternalUnicastAddress(const NetifUnicastAddress &aAddress);
|
Error AddExternalUnicastAddress(const UnicastAddress &aAddress);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method removes a external (to OpenThread) unicast address from the network interface.
|
* This method removes a external (to OpenThread) unicast address from the network interface.
|
||||||
@@ -477,7 +474,7 @@ public:
|
|||||||
* @returns A pointer to the head of the linked list of multicast addresses.
|
* @returns A pointer to the head of the linked list of multicast addresses.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
const NetifMulticastAddress *GetMulticastAddresses(void) const { return mMulticastAddresses.GetHead(); }
|
const MulticastAddress *GetMulticastAddresses(void) const { return mMulticastAddresses.GetHead(); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method indicates whether a multicast address is an external or internal address.
|
* This method indicates whether a multicast address is an external or internal address.
|
||||||
@@ -488,7 +485,7 @@ public:
|
|||||||
* @retval FALSE The address is not an external address (it is an OpenThread internal address).
|
* @retval FALSE The address is not an external address (it is an OpenThread internal address).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
bool IsMulticastAddressExternal(const NetifMulticastAddress &aAddress) const;
|
bool IsMulticastAddressExternal(const MulticastAddress &aAddress) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method subscribes the network interface to a multicast address.
|
* This method subscribes the network interface to a multicast address.
|
||||||
@@ -499,7 +496,7 @@ public:
|
|||||||
* @param[in] aAddress A reference to the multicast address.
|
* @param[in] aAddress A reference to the multicast address.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void SubscribeMulticast(NetifMulticastAddress &aAddress);
|
void SubscribeMulticast(MulticastAddress &aAddress);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method unsubscribes the network interface to a multicast address.
|
* This method unsubscribes the network interface to a multicast address.
|
||||||
@@ -510,7 +507,7 @@ public:
|
|||||||
* @param[in] aAddress A reference to the multicast address.
|
* @param[in] aAddress A reference to the multicast address.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void UnsubscribeMulticast(const NetifMulticastAddress &aAddress);
|
void UnsubscribeMulticast(const MulticastAddress &aAddress);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method subscribes the network interface to the external (to OpenThread) multicast address.
|
* This method subscribes the network interface to the external (to OpenThread) multicast address.
|
||||||
@@ -571,23 +568,24 @@ public:
|
|||||||
*
|
*
|
||||||
* This method should be used like follows: to iterate over all external multicast addresses
|
* This method should be used like follows: to iterate over all external multicast addresses
|
||||||
*
|
*
|
||||||
* for (Ip6::ExternalNetifMulticastAddress &addr : Get<ThreadNetif>().IterateExternalMulticastAddresses())
|
* for (Ip6::Netif::ExternalMulticastAddress &addr : Get<ThreadNetif>().IterateExternalMulticastAddresses())
|
||||||
* { ... }
|
* { ... }
|
||||||
*
|
*
|
||||||
* or to iterate over a subset of external multicast addresses determined by a given address type filter
|
* or to iterate over a subset of external multicast addresses determined by a given address type filter
|
||||||
*
|
*
|
||||||
* for (Ip6::ExternalNetifMulticastAddress &addr :
|
* for (Ip6::Netif::ExternalMulticastAddress &addr :
|
||||||
* Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal)) { ... }
|
* Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
||||||
|
* { ... }
|
||||||
*
|
*
|
||||||
* @param[in] aFilter The IPv6 address type filter.
|
* @param[in] aFilter The IPv6 address type filter.
|
||||||
*
|
*
|
||||||
* @returns An `ExternalMulticastAddressIteratorBuilder` instance.
|
* @returns An `ExternalMulticastAddress::Iterator::Builder` instance.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
ExternalMulticastAddressIteratorBuilder IterateExternalMulticastAddresses(
|
ExternalMulticastAddress::Iterator::Builder IterateExternalMulticastAddresses(
|
||||||
Address::TypeFilter aFilter = Address::kTypeAny)
|
Address::TypeFilter aFilter = Address::kTypeAny)
|
||||||
{
|
{
|
||||||
return ExternalMulticastAddressIteratorBuilder(*this, aFilter);
|
return ExternalMulticastAddress::Iterator::Builder(*this, aFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -597,7 +595,7 @@ public:
|
|||||||
* @retval FALSE The network interface is not subscribed to any external multicast address.
|
* @retval FALSE The network interface is not subscribed to any external multicast address.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
bool HasAnyExternalMulticastAddress(void) const { return !ExternalMulticastAddressIterator(*this).IsDone(); }
|
bool HasAnyExternalMulticastAddress(void) const { return !ExternalMulticastAddress::Iterator(*this).IsDone(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
@@ -617,35 +615,15 @@ protected:
|
|||||||
void UnsubscribeAllNodesMulticast(void);
|
void UnsubscribeAllNodesMulticast(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class ExternalMulticastAddressIteratorBuilder
|
LinkedList<UnicastAddress> mUnicastAddresses;
|
||||||
{
|
LinkedList<MulticastAddress> mMulticastAddresses;
|
||||||
public:
|
bool mMulticastPromiscuous;
|
||||||
ExternalMulticastAddressIteratorBuilder(const Netif &aNetif, Address::TypeFilter aFilter)
|
|
||||||
: mNetif(aNetif)
|
|
||||||
, mFilter(aFilter)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ExternalMulticastAddressIterator begin(void) { return ExternalMulticastAddressIterator(mNetif, mFilter); }
|
|
||||||
ExternalMulticastAddressIterator end(void)
|
|
||||||
{
|
|
||||||
return ExternalMulticastAddressIterator(mNetif, ExternalMulticastAddressIterator::kEndIterator);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
const Netif & mNetif;
|
|
||||||
Address::TypeFilter mFilter;
|
|
||||||
};
|
|
||||||
|
|
||||||
LinkedList<NetifUnicastAddress> mUnicastAddresses;
|
|
||||||
LinkedList<NetifMulticastAddress> mMulticastAddresses;
|
|
||||||
bool mMulticastPromiscuous;
|
|
||||||
|
|
||||||
otIp6AddressCallback mAddressCallback;
|
otIp6AddressCallback mAddressCallback;
|
||||||
void * mAddressCallbackContext;
|
void * mAddressCallbackContext;
|
||||||
|
|
||||||
Pool<NetifUnicastAddress, OPENTHREAD_CONFIG_IP6_MAX_EXT_UCAST_ADDRS> mExtUnicastAddressPool;
|
Pool<UnicastAddress, OPENTHREAD_CONFIG_IP6_MAX_EXT_UCAST_ADDRS> mExtUnicastAddressPool;
|
||||||
Pool<ExternalNetifMulticastAddress, OPENTHREAD_CONFIG_IP6_MAX_EXT_MCAST_ADDRS> mExtMulticastAddressPool;
|
Pool<ExternalMulticastAddress, OPENTHREAD_CONFIG_IP6_MAX_EXT_MCAST_ADDRS> mExtMulticastAddressPool;
|
||||||
|
|
||||||
static const otNetifMulticastAddress kRealmLocalAllMplForwardersMulticastAddress;
|
static const otNetifMulticastAddress kRealmLocalAllMplForwardersMulticastAddress;
|
||||||
static const otNetifMulticastAddress kLinkLocalAllNodesMulticastAddress;
|
static const otNetifMulticastAddress kLinkLocalAllNodesMulticastAddress;
|
||||||
|
|||||||
@@ -726,8 +726,8 @@ void AddressResolver::HandleAddressError(Coap::Message &aMessage, const Ip6::Mes
|
|||||||
SuccessOrExit(error = Tlv::Find<ThreadTargetTlv>(aMessage, target));
|
SuccessOrExit(error = Tlv::Find<ThreadTargetTlv>(aMessage, target));
|
||||||
SuccessOrExit(error = Tlv::Find<ThreadMeshLocalEidTlv>(aMessage, meshLocalIid));
|
SuccessOrExit(error = Tlv::Find<ThreadMeshLocalEidTlv>(aMessage, meshLocalIid));
|
||||||
|
|
||||||
for (const Ip6::NetifUnicastAddress *address = Get<ThreadNetif>().GetUnicastAddresses(); address;
|
for (const Ip6::Netif::UnicastAddress *address = Get<ThreadNetif>().GetUnicastAddresses(); address;
|
||||||
address = address->GetNext())
|
address = address->GetNext())
|
||||||
{
|
{
|
||||||
if (address->GetAddress() == target && Get<Mle::MleRouter>().GetMeshLocal64().GetIid() != meshLocalIid)
|
if (address->GetAddress() == target && Get<Mle::MleRouter>().GetMeshLocal64().GetIid() != meshLocalIid)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -233,8 +233,8 @@ private:
|
|||||||
DuaState mDuaState;
|
DuaState mDuaState;
|
||||||
uint8_t mDadCounter;
|
uint8_t mDadCounter;
|
||||||
TimeMilli mLastRegistrationTime; // The time (in milliseconds) when sent last DUA.req or received DUA.rsp.
|
TimeMilli mLastRegistrationTime; // The time (in milliseconds) when sent last DUA.req or received DUA.rsp.
|
||||||
Ip6::InterfaceIdentifier mFixedDuaInterfaceIdentifier;
|
Ip6::InterfaceIdentifier mFixedDuaInterfaceIdentifier;
|
||||||
Ip6::NetifUnicastAddress mDomainUnicastAddress;
|
Ip6::Netif::UnicastAddress mDomainUnicastAddress;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
union
|
union
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ Mle::Mle(Instance &aInstance)
|
|||||||
mLeaderAloc.InitAsThreadOriginRealmLocalScope();
|
mLeaderAloc.InitAsThreadOriginRealmLocalScope();
|
||||||
|
|
||||||
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
|
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
|
||||||
for (Ip6::NetifUnicastAddress &serviceAloc : mServiceAlocs)
|
for (Ip6::Netif::UnicastAddress &serviceAloc : mServiceAlocs)
|
||||||
{
|
{
|
||||||
serviceAloc.InitAsThreadOriginRealmLocalScope();
|
serviceAloc.InitAsThreadOriginRealmLocalScope();
|
||||||
serviceAloc.GetAddress().GetIid().SetLocator(Mac::kShortAddrInvalid);
|
serviceAloc.GetAddress().GetIid().SetLocator(Mac::kShortAddrInvalid);
|
||||||
@@ -882,7 +882,7 @@ void Mle::ApplyMeshLocalPrefix(void)
|
|||||||
|
|
||||||
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
|
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
|
||||||
|
|
||||||
for (Ip6::NetifUnicastAddress &serviceAloc : mServiceAlocs)
|
for (Ip6::Netif::UnicastAddress &serviceAloc : mServiceAlocs)
|
||||||
{
|
{
|
||||||
if (serviceAloc.GetAddress().GetIid().GetLocator() != Mac::kShortAddrInvalid)
|
if (serviceAloc.GetAddress().GetIid().GetLocator() != Mac::kShortAddrInvalid)
|
||||||
{
|
{
|
||||||
@@ -1248,7 +1248,8 @@ bool Mle::HasUnregisteredAddress(void)
|
|||||||
// Checks whether there are any addresses in addition to the mesh-local
|
// Checks whether there are any addresses in addition to the mesh-local
|
||||||
// address that need to be registered.
|
// address that need to be registered.
|
||||||
|
|
||||||
for (const Ip6::NetifUnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr; addr = addr->GetNext())
|
for (const Ip6::Netif::UnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr;
|
||||||
|
addr = addr->GetNext())
|
||||||
{
|
{
|
||||||
if (!addr->GetAddress().IsLinkLocal() && !IsRoutingLocator(addr->GetAddress()) &&
|
if (!addr->GetAddress().IsLinkLocal() && !IsRoutingLocator(addr->GetAddress()) &&
|
||||||
!IsAnycastLocator(addr->GetAddress()) && addr->GetAddress() != GetMeshLocal64())
|
!IsAnycastLocator(addr->GetAddress()) && addr->GetAddress() != GetMeshLocal64())
|
||||||
@@ -1314,7 +1315,8 @@ Error Mle::AppendAddressRegistration(Message &aMessage, AddressRegistrationMode
|
|||||||
}
|
}
|
||||||
#endif // OPENTHREAD_CONFIG_DUA_ENABLE
|
#endif // OPENTHREAD_CONFIG_DUA_ENABLE
|
||||||
|
|
||||||
for (const Ip6::NetifUnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr; addr = addr->GetNext())
|
for (const Ip6::Netif::UnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr;
|
||||||
|
addr = addr->GetNext())
|
||||||
{
|
{
|
||||||
if (addr->GetAddress().IsLinkLocal() || IsRoutingLocator(addr->GetAddress()) ||
|
if (addr->GetAddress().IsLinkLocal() || IsRoutingLocator(addr->GetAddress()) ||
|
||||||
IsAnycastLocator(addr->GetAddress()) || addr->GetAddress() == GetMeshLocal64())
|
IsAnycastLocator(addr->GetAddress()) || addr->GetAddress() == GetMeshLocal64())
|
||||||
@@ -1361,7 +1363,7 @@ Error Mle::AppendAddressRegistration(Message &aMessage, AddressRegistrationMode
|
|||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
for (const Ip6::NetifMulticastAddress &addr : Get<ThreadNetif>().IterateExternalMulticastAddresses())
|
for (const Ip6::Netif::MulticastAddress &addr : Get<ThreadNetif>().IterateExternalMulticastAddresses())
|
||||||
{
|
{
|
||||||
#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2)
|
#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2)
|
||||||
// For Thread 1.2 MED, skip multicast address with scope not
|
// For Thread 1.2 MED, skip multicast address with scope not
|
||||||
|
|||||||
@@ -1594,7 +1594,7 @@ protected:
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Ip6::NetifUnicastAddress mLeaderAloc; ///< Leader anycast locator
|
Ip6::Netif::UnicastAddress mLeaderAloc; ///< Leader anycast locator
|
||||||
|
|
||||||
LeaderData mLeaderData; ///< Last received Leader Data TLV.
|
LeaderData mLeaderData; ///< Last received Leader Data TLV.
|
||||||
bool mRetrieveNewNetworkData; ///< Indicating new Network Data is needed if set.
|
bool mRetrieveNewNetworkData; ///< Indicating new Network Data is needed if set.
|
||||||
@@ -1889,16 +1889,16 @@ private:
|
|||||||
uint64_t mAlternateTimestamp;
|
uint64_t mAlternateTimestamp;
|
||||||
|
|
||||||
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
|
#if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE
|
||||||
Ip6::NetifUnicastAddress mServiceAlocs[kMaxServiceAlocs];
|
Ip6::Netif::UnicastAddress mServiceAlocs[kMaxServiceAlocs];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
otMleCounters mCounters;
|
otMleCounters mCounters;
|
||||||
|
|
||||||
Ip6::NetifUnicastAddress mLinkLocal64;
|
Ip6::Netif::UnicastAddress mLinkLocal64;
|
||||||
Ip6::NetifUnicastAddress mMeshLocal64;
|
Ip6::Netif::UnicastAddress mMeshLocal64;
|
||||||
Ip6::NetifUnicastAddress mMeshLocal16;
|
Ip6::Netif::UnicastAddress mMeshLocal16;
|
||||||
Ip6::NetifMulticastAddress mLinkLocalAllThreadNodes;
|
Ip6::Netif::MulticastAddress mLinkLocalAllThreadNodes;
|
||||||
Ip6::NetifMulticastAddress mRealmLocalAllThreadNodes;
|
Ip6::Netif::MulticastAddress mRealmLocalAllThreadNodes;
|
||||||
|
|
||||||
otThreadParentResponseCallback mParentResponseCb;
|
otThreadParentResponseCallback mParentResponseCb;
|
||||||
void * mParentResponseCbContext;
|
void * mParentResponseCbContext;
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ void MlrManager::UpdateLocalSubscriptions(void)
|
|||||||
{
|
{
|
||||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_TMF_PROXY_MLR_ENABLE
|
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_TMF_PROXY_MLR_ENABLE
|
||||||
// Check multicast addresses are newly listened against Children
|
// Check multicast addresses are newly listened against Children
|
||||||
for (Ip6::ExternalNetifMulticastAddress &addr :
|
for (Ip6::Netif::ExternalMulticastAddress &addr :
|
||||||
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
||||||
{
|
{
|
||||||
if (addr.GetMlrState() == kMlrStateToRegister && IsAddressMlrRegisteredByAnyChild(addr.GetAddress()))
|
if (addr.GetMlrState() == kMlrStateToRegister && IsAddressMlrRegisteredByAnyChild(addr.GetAddress()))
|
||||||
@@ -113,7 +113,7 @@ bool MlrManager::IsAddressMlrRegisteredByNetif(const Ip6::Address &aAddress) con
|
|||||||
|
|
||||||
OT_ASSERT(aAddress.IsMulticastLargerThanRealmLocal());
|
OT_ASSERT(aAddress.IsMulticastLargerThanRealmLocal());
|
||||||
|
|
||||||
for (const Ip6::ExternalNetifMulticastAddress &addr : Get<ThreadNetif>().IterateExternalMulticastAddresses())
|
for (const Ip6::Netif::ExternalMulticastAddress &addr : Get<ThreadNetif>().IterateExternalMulticastAddresses())
|
||||||
{
|
{
|
||||||
if (addr.GetAddress() == aAddress && addr.GetMlrState() == kMlrStateRegistered)
|
if (addr.GetAddress() == aAddress && addr.GetMlrState() == kMlrStateRegistered)
|
||||||
{
|
{
|
||||||
@@ -237,7 +237,7 @@ void MlrManager::SendMulticastListenerRegistration(void)
|
|||||||
|
|
||||||
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
||||||
// Append Netif multicast addresses
|
// Append Netif multicast addresses
|
||||||
for (Ip6::ExternalNetifMulticastAddress &addr :
|
for (Ip6::Netif::ExternalMulticastAddress &addr :
|
||||||
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
||||||
{
|
{
|
||||||
if (addressesNum >= kIp6AddressesNumMax)
|
if (addressesNum >= kIp6AddressesNumMax)
|
||||||
@@ -541,7 +541,7 @@ exit:
|
|||||||
void MlrManager::SetMulticastAddressMlrState(MlrState aFromState, MlrState aToState)
|
void MlrManager::SetMulticastAddressMlrState(MlrState aFromState, MlrState aToState)
|
||||||
{
|
{
|
||||||
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
||||||
for (Ip6::ExternalNetifMulticastAddress &addr :
|
for (Ip6::Netif::ExternalMulticastAddress &addr :
|
||||||
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
||||||
{
|
{
|
||||||
if (addr.GetMlrState() == aFromState)
|
if (addr.GetMlrState() == aFromState)
|
||||||
@@ -573,7 +573,7 @@ void MlrManager::FinishMulticastListenerRegistration(bool aSucces
|
|||||||
mMlrPending = false;
|
mMlrPending = false;
|
||||||
|
|
||||||
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
||||||
for (Ip6::ExternalNetifMulticastAddress &addr :
|
for (Ip6::Netif::ExternalMulticastAddress &addr :
|
||||||
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
||||||
{
|
{
|
||||||
if (addr.GetMlrState() == kMlrStateRegistering)
|
if (addr.GetMlrState() == kMlrStateRegistering)
|
||||||
@@ -683,7 +683,7 @@ void MlrManager::LogMulticastAddresses(void)
|
|||||||
otLogDebgMlr("-------- Multicast Addresses --------");
|
otLogDebgMlr("-------- Multicast Addresses --------");
|
||||||
|
|
||||||
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
||||||
for (const Ip6::ExternalNetifMulticastAddress &addr : Get<ThreadNetif>().IterateExternalMulticastAddresses())
|
for (const Ip6::Netif::ExternalMulticastAddress &addr : Get<ThreadNetif>().IterateExternalMulticastAddresses())
|
||||||
{
|
{
|
||||||
otLogDebgMlr("%-32s%c", addr.GetAddress().ToString().AsCString(), "-rR"[addr.GetMlrState()]);
|
otLogDebgMlr("%-32s%c", addr.GetAddress().ToString().AsCString(), "-rR"[addr.GetMlrState()]);
|
||||||
}
|
}
|
||||||
@@ -784,7 +784,7 @@ void MlrManager::CheckInvariants(void) const
|
|||||||
OT_ASSERT(!mMlrPending || mSendDelay == 0);
|
OT_ASSERT(!mMlrPending || mSendDelay == 0);
|
||||||
|
|
||||||
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
#if OPENTHREAD_CONFIG_MLR_ENABLE
|
||||||
for (Ip6::ExternalNetifMulticastAddress &addr :
|
for (Ip6::Netif::ExternalMulticastAddress &addr :
|
||||||
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
Get<ThreadNetif>().IterateExternalMulticastAddresses(Ip6::Address::kTypeMulticastLargerThanRealmLocal))
|
||||||
{
|
{
|
||||||
registeringNum += (addr.GetMlrState() == kMlrStateRegistering);
|
registeringNum += (addr.GetMlrState() == kMlrStateRegistering);
|
||||||
|
|||||||
@@ -190,7 +190,8 @@ Error NetworkDiagnostic::AppendIp6AddressList(Message &aMessage)
|
|||||||
|
|
||||||
tlv.Init();
|
tlv.Init();
|
||||||
|
|
||||||
for (const Ip6::NetifUnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr; addr = addr->GetNext())
|
for (const Ip6::Netif::UnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr;
|
||||||
|
addr = addr->GetNext())
|
||||||
{
|
{
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@@ -198,7 +199,8 @@ Error NetworkDiagnostic::AppendIp6AddressList(Message &aMessage)
|
|||||||
tlv.SetLength(count * sizeof(Ip6::Address));
|
tlv.SetLength(count * sizeof(Ip6::Address));
|
||||||
SuccessOrExit(error = aMessage.Append(tlv));
|
SuccessOrExit(error = aMessage.Append(tlv));
|
||||||
|
|
||||||
for (const Ip6::NetifUnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr; addr = addr->GetNext())
|
for (const Ip6::Netif::UnicastAddress *addr = Get<ThreadNetif>().GetUnicastAddresses(); addr;
|
||||||
|
addr = addr->GetNext())
|
||||||
{
|
{
|
||||||
SuccessOrExit(error = aMessage.Append(addr->GetAddress()));
|
SuccessOrExit(error = aMessage.Append(addr->GetAddress()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ exit:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Slaac::DoesConfigMatchNetifAddr(const NetworkData::OnMeshPrefixConfig &aConfig,
|
bool Slaac::DoesConfigMatchNetifAddr(const NetworkData::OnMeshPrefixConfig &aConfig,
|
||||||
const Ip6::NetifUnicastAddress & aAddr)
|
const Ip6::Netif::UnicastAddress & aAddr)
|
||||||
{
|
{
|
||||||
return (((aConfig.mOnMesh && (aAddr.mPrefixLength == aConfig.mPrefix.mLength)) ||
|
return (((aConfig.mOnMesh && (aAddr.mPrefixLength == aConfig.mPrefix.mLength)) ||
|
||||||
(!aConfig.mOnMesh && (aAddr.mPrefixLength == 128))) &&
|
(!aConfig.mOnMesh && (aAddr.mPrefixLength == 128))) &&
|
||||||
@@ -151,7 +151,7 @@ void Slaac::Update(UpdateMode aMode)
|
|||||||
// If enabled, remove any SLAAC addresses with no matching on-mesh prefix,
|
// If enabled, remove any SLAAC addresses with no matching on-mesh prefix,
|
||||||
// otherwise (when disabled) remove all previously added SLAAC addresses.
|
// otherwise (when disabled) remove all previously added SLAAC addresses.
|
||||||
|
|
||||||
for (Ip6::NetifUnicastAddress &slaacAddr : mAddresses)
|
for (Ip6::Netif::UnicastAddress &slaacAddr : mAddresses)
|
||||||
{
|
{
|
||||||
if (!slaacAddr.mValid)
|
if (!slaacAddr.mValid)
|
||||||
{
|
{
|
||||||
@@ -208,8 +208,8 @@ void Slaac::Update(UpdateMode aMode)
|
|||||||
|
|
||||||
found = false;
|
found = false;
|
||||||
|
|
||||||
for (const Ip6::NetifUnicastAddress *netifAddr = Get<ThreadNetif>().GetUnicastAddresses();
|
for (const Ip6::Netif::UnicastAddress *netifAddr = Get<ThreadNetif>().GetUnicastAddresses();
|
||||||
netifAddr != nullptr; netifAddr = netifAddr->GetNext())
|
netifAddr != nullptr; netifAddr = netifAddr->GetNext())
|
||||||
{
|
{
|
||||||
if (DoesConfigMatchNetifAddr(config, *netifAddr))
|
if (DoesConfigMatchNetifAddr(config, *netifAddr))
|
||||||
{
|
{
|
||||||
@@ -222,7 +222,7 @@ void Slaac::Update(UpdateMode aMode)
|
|||||||
{
|
{
|
||||||
bool added = false;
|
bool added = false;
|
||||||
|
|
||||||
for (Ip6::NetifUnicastAddress &slaacAddr : mAddresses)
|
for (Ip6::Netif::UnicastAddress &slaacAddr : mAddresses)
|
||||||
{
|
{
|
||||||
if (slaacAddr.mValid)
|
if (slaacAddr.mValid)
|
||||||
{
|
{
|
||||||
@@ -252,10 +252,10 @@ void Slaac::Update(UpdateMode aMode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Error Slaac::GenerateIid(Ip6::NetifUnicastAddress &aAddress,
|
Error Slaac::GenerateIid(Ip6::Netif::UnicastAddress &aAddress,
|
||||||
uint8_t * aNetworkId,
|
uint8_t * aNetworkId,
|
||||||
uint8_t aNetworkIdLength,
|
uint8_t aNetworkIdLength,
|
||||||
uint8_t * aDadCounter) const
|
uint8_t * aDadCounter) const
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* This method generates a semantically opaque IID per RFC 7217.
|
* This method generates a semantically opaque IID per RFC 7217.
|
||||||
|
|||||||
@@ -138,10 +138,10 @@ public:
|
|||||||
* @retval kErrorFailed If no valid IID was generated.
|
* @retval kErrorFailed If no valid IID was generated.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Error GenerateIid(Ip6::NetifUnicastAddress &aAddress,
|
Error GenerateIid(Ip6::Netif::UnicastAddress &aAddress,
|
||||||
uint8_t * aNetworkId = nullptr,
|
uint8_t * aNetworkId = nullptr,
|
||||||
uint8_t aNetworkIdLength = 0,
|
uint8_t aNetworkIdLength = 0,
|
||||||
uint8_t * aDadCounter = nullptr) const;
|
uint8_t * aDadCounter = nullptr) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static constexpr uint16_t kMaxIidCreationAttempts = 256; // Maximum number of attempts when generating IID.
|
static constexpr uint16_t kMaxIidCreationAttempts = 256; // Maximum number of attempts when generating IID.
|
||||||
@@ -163,11 +163,11 @@ private:
|
|||||||
void GetIidSecretKey(IidSecretKey &aKey) const;
|
void GetIidSecretKey(IidSecretKey &aKey) const;
|
||||||
void HandleNotifierEvents(Events aEvents);
|
void HandleNotifierEvents(Events aEvents);
|
||||||
static bool DoesConfigMatchNetifAddr(const NetworkData::OnMeshPrefixConfig &aConfig,
|
static bool DoesConfigMatchNetifAddr(const NetworkData::OnMeshPrefixConfig &aConfig,
|
||||||
const Ip6::NetifUnicastAddress & aAddr);
|
const Ip6::Netif::UnicastAddress & aAddr);
|
||||||
|
|
||||||
bool mEnabled;
|
bool mEnabled;
|
||||||
otIp6SlaacPrefixFilter mFilter;
|
otIp6SlaacPrefixFilter mFilter;
|
||||||
Ip6::NetifUnicastAddress mAddresses[OPENTHREAD_CONFIG_IP6_SLAAC_NUM_ADDRESSES];
|
Ip6::Netif::UnicastAddress mAddresses[OPENTHREAD_CONFIG_IP6_SLAAC_NUM_ADDRESSES];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ void VerifyMulticastAddressList(const Ip6::Netif &aNetif, Ip6::Address aAddresse
|
|||||||
VerifyOrQuit(aNetif.IsMulticastSubscribed(aAddresses[i]));
|
VerifyOrQuit(aNetif.IsMulticastSubscribed(aAddresses[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const Ip6::NetifMulticastAddress *addr = aNetif.GetMulticastAddresses(); addr; addr = addr->GetNext())
|
for (const Ip6::Netif::MulticastAddress *addr = aNetif.GetMulticastAddresses(); addr; addr = addr->GetNext())
|
||||||
{
|
{
|
||||||
bool didFind = false;
|
bool didFind = false;
|
||||||
|
|
||||||
@@ -93,8 +93,8 @@ void TestNetifMulticastAddresses(void)
|
|||||||
TestNetif netif(*instance);
|
TestNetif netif(*instance);
|
||||||
Ip6::Address addresses[kMaxAddresses];
|
Ip6::Address addresses[kMaxAddresses];
|
||||||
|
|
||||||
Ip6::Address address;
|
Ip6::Address address;
|
||||||
Ip6::NetifMulticastAddress netifAddress;
|
Ip6::Netif::MulticastAddress netifAddress;
|
||||||
|
|
||||||
const char *kLinkLocalAllNodes = "ff02::01";
|
const char *kLinkLocalAllNodes = "ff02::01";
|
||||||
const char *kRealmLocalAllNodes = "ff03::01";
|
const char *kRealmLocalAllNodes = "ff03::01";
|
||||||
|
|||||||
Reference in New Issue
Block a user