[border-router] use `Ip6::Nd` namespace for IPv6 Neighbor Discovery (#7780)
This commit uses `Ip6::Nd` namespace for IPv6 Neighbor Discovery definitions (used for border router). It also renames and moves the source files to `net/nd6.*`.
This commit is contained in:
parent
19f8033b78
commit
ac62f7819c
|
@ -221,7 +221,6 @@ LOCAL_SRC_FILES := \
|
|||
src/core/backbone_router/multicast_listeners_table.cpp \
|
||||
src/core/backbone_router/ndproxy_table.cpp \
|
||||
src/core/border_router/infra_if.cpp \
|
||||
src/core/border_router/router_advertisement.cpp \
|
||||
src/core/border_router/routing_manager.cpp \
|
||||
src/core/coap/coap.cpp \
|
||||
src/core/coap/coap_message.cpp \
|
||||
|
@ -303,6 +302,7 @@ LOCAL_SRC_FILES := \
|
|||
src/core/net/ip6_filter.cpp \
|
||||
src/core/net/ip6_headers.cpp \
|
||||
src/core/net/ip6_mpl.cpp \
|
||||
src/core/net/nd6.cpp \
|
||||
src/core/net/nd_agent.cpp \
|
||||
src/core/net/netif.cpp \
|
||||
src/core/net/sntp_client.cpp \
|
||||
|
|
|
@ -367,8 +367,6 @@ openthread_core_files = [
|
|||
"backbone_router/ndproxy_table.hpp",
|
||||
"border_router/infra_if.cpp",
|
||||
"border_router/infra_if.hpp",
|
||||
"border_router/router_advertisement.cpp",
|
||||
"border_router/router_advertisement.hpp",
|
||||
"border_router/routing_manager.cpp",
|
||||
"border_router/routing_manager.hpp",
|
||||
"coap/coap.cpp",
|
||||
|
@ -560,6 +558,8 @@ openthread_core_files = [
|
|||
"net/ip6_mpl.cpp",
|
||||
"net/ip6_mpl.hpp",
|
||||
"net/ip6_types.hpp",
|
||||
"net/nd6.cpp",
|
||||
"net/nd6.hpp",
|
||||
"net/nd_agent.cpp",
|
||||
"net/nd_agent.hpp",
|
||||
"net/netif.cpp",
|
||||
|
|
|
@ -87,7 +87,6 @@ set(COMMON_SOURCES
|
|||
backbone_router/multicast_listeners_table.cpp
|
||||
backbone_router/ndproxy_table.cpp
|
||||
border_router/infra_if.cpp
|
||||
border_router/router_advertisement.cpp
|
||||
border_router/routing_manager.cpp
|
||||
coap/coap.cpp
|
||||
coap/coap_message.cpp
|
||||
|
@ -169,6 +168,7 @@ set(COMMON_SOURCES
|
|||
net/ip6_filter.cpp
|
||||
net/ip6_headers.cpp
|
||||
net/ip6_mpl.cpp
|
||||
net/nd6.cpp
|
||||
net/nd_agent.cpp
|
||||
net/netif.cpp
|
||||
net/sntp_client.cpp
|
||||
|
|
|
@ -177,7 +177,6 @@ SOURCES_COMMON = \
|
|||
backbone_router/multicast_listeners_table.cpp \
|
||||
backbone_router/ndproxy_table.cpp \
|
||||
border_router/infra_if.cpp \
|
||||
border_router/router_advertisement.cpp \
|
||||
border_router/routing_manager.cpp \
|
||||
coap/coap.cpp \
|
||||
coap/coap_message.cpp \
|
||||
|
@ -259,6 +258,7 @@ SOURCES_COMMON = \
|
|||
net/ip6_filter.cpp \
|
||||
net/ip6_headers.cpp \
|
||||
net/ip6_mpl.cpp \
|
||||
net/nd6.cpp \
|
||||
net/nd_agent.cpp \
|
||||
net/netif.cpp \
|
||||
net/sntp_client.cpp \
|
||||
|
@ -416,7 +416,6 @@ HEADERS_COMMON = \
|
|||
backbone_router/multicast_listeners_table.hpp \
|
||||
backbone_router/ndproxy_table.hpp \
|
||||
border_router/infra_if.hpp \
|
||||
border_router/router_advertisement.hpp \
|
||||
border_router/routing_manager.hpp \
|
||||
coap/coap.hpp \
|
||||
coap/coap_message.hpp \
|
||||
|
@ -564,6 +563,7 @@ HEADERS_COMMON = \
|
|||
net/ip6_headers.hpp \
|
||||
net/ip6_mpl.hpp \
|
||||
net/ip6_types.hpp \
|
||||
net/nd6.hpp \
|
||||
net/nd_agent.hpp \
|
||||
net/netif.hpp \
|
||||
net/sntp_client.hpp \
|
||||
|
|
|
@ -816,9 +816,9 @@ bool RoutingManager::IsRouterSolicitationInProgress(void) const
|
|||
|
||||
Error RoutingManager::SendRouterSolicitation(void)
|
||||
{
|
||||
Ip6::Address destAddress;
|
||||
RouterAdv::RouterSolicitMessage routerSolicit;
|
||||
InfraIf::Icmp6Packet packet;
|
||||
Ip6::Address destAddress;
|
||||
Ip6::Nd::RouterSolicitMessage routerSolicit;
|
||||
InfraIf::Icmp6Packet packet;
|
||||
|
||||
OT_ASSERT(IsInitialized());
|
||||
|
||||
|
@ -842,11 +842,11 @@ void RoutingManager::SendRouterAdvertisement(const OmrPrefixArray &aNewOmrPrefix
|
|||
|
||||
if (mIsAdvertisingLocalOnLinkPrefix)
|
||||
{
|
||||
RouterAdv::PrefixInfoOption *pio;
|
||||
Ip6::Nd::PrefixInfoOption *pio;
|
||||
|
||||
OT_ASSERT(bufferLength + sizeof(RouterAdv::PrefixInfoOption) <= sizeof(buffer));
|
||||
OT_ASSERT(bufferLength + sizeof(Ip6::Nd::PrefixInfoOption) <= sizeof(buffer));
|
||||
|
||||
pio = reinterpret_cast<RouterAdv::PrefixInfoOption *>(buffer + bufferLength);
|
||||
pio = reinterpret_cast<Ip6::Nd::PrefixInfoOption *>(buffer + bufferLength);
|
||||
|
||||
pio->Init();
|
||||
pio->SetOnLinkFlag();
|
||||
|
@ -864,11 +864,11 @@ void RoutingManager::SendRouterAdvertisement(const OmrPrefixArray &aNewOmrPrefix
|
|||
}
|
||||
else if (mOnLinkPrefixDeprecateTimer.IsRunning())
|
||||
{
|
||||
RouterAdv::PrefixInfoOption *pio;
|
||||
Ip6::Nd::PrefixInfoOption *pio;
|
||||
|
||||
OT_ASSERT(bufferLength + sizeof(RouterAdv::PrefixInfoOption) <= sizeof(buffer));
|
||||
OT_ASSERT(bufferLength + sizeof(Ip6::Nd::PrefixInfoOption) <= sizeof(buffer));
|
||||
|
||||
pio = reinterpret_cast<RouterAdv::PrefixInfoOption *>(buffer + bufferLength);
|
||||
pio = reinterpret_cast<Ip6::Nd::PrefixInfoOption *>(buffer + bufferLength);
|
||||
|
||||
pio->Init();
|
||||
pio->SetOnLinkFlag();
|
||||
|
@ -891,13 +891,13 @@ void RoutingManager::SendRouterAdvertisement(const OmrPrefixArray &aNewOmrPrefix
|
|||
{
|
||||
if (!aNewOmrPrefixes.ContainsMatching(advertisedOmrPrefix.GetPrefix()))
|
||||
{
|
||||
RouterAdv::RouteInfoOption *rio;
|
||||
Ip6::Nd::RouteInfoOption *rio;
|
||||
|
||||
OT_ASSERT(bufferLength + RouterAdv::RouteInfoOption::OptionSizeForPrefix(
|
||||
advertisedOmrPrefix.GetPrefix().GetLength()) <=
|
||||
OT_ASSERT(bufferLength +
|
||||
Ip6::Nd::RouteInfoOption::OptionSizeForPrefix(advertisedOmrPrefix.GetPrefix().GetLength()) <=
|
||||
sizeof(buffer));
|
||||
|
||||
rio = reinterpret_cast<RouterAdv::RouteInfoOption *>(buffer + bufferLength);
|
||||
rio = reinterpret_cast<Ip6::Nd::RouteInfoOption *>(buffer + bufferLength);
|
||||
|
||||
// Set zero route lifetime to immediately invalidate the advertised OMR prefix.
|
||||
rio->Init();
|
||||
|
@ -913,13 +913,12 @@ void RoutingManager::SendRouterAdvertisement(const OmrPrefixArray &aNewOmrPrefix
|
|||
|
||||
for (const OmrPrefix &newOmrPrefix : aNewOmrPrefixes)
|
||||
{
|
||||
RouterAdv::RouteInfoOption *rio;
|
||||
Ip6::Nd::RouteInfoOption *rio;
|
||||
|
||||
OT_ASSERT(bufferLength +
|
||||
RouterAdv::RouteInfoOption::OptionSizeForPrefix(newOmrPrefix.GetPrefix().GetLength()) <=
|
||||
OT_ASSERT(bufferLength + Ip6::Nd::RouteInfoOption::OptionSizeForPrefix(newOmrPrefix.GetPrefix().GetLength()) <=
|
||||
sizeof(buffer));
|
||||
|
||||
rio = reinterpret_cast<RouterAdv::RouteInfoOption *>(buffer + bufferLength);
|
||||
rio = reinterpret_cast<Ip6::Nd::RouteInfoOption *>(buffer + bufferLength);
|
||||
|
||||
rio->Init();
|
||||
rio->SetRouteLifetime(kDefaultOmrPrefixLifetime);
|
||||
|
@ -978,7 +977,7 @@ bool RoutingManager::IsValidOmrPrefix(const Ip6::Prefix &aOmrPrefix)
|
|||
(aOmrPrefix.mLength >= 3 && (aOmrPrefix.GetBytes()[0] & 0xE0) == 0x20);
|
||||
}
|
||||
|
||||
bool RoutingManager::IsValidOnLinkPrefix(const RouterAdv::PrefixInfoOption &aPio)
|
||||
bool RoutingManager::IsValidOnLinkPrefix(const Ip6::Nd::PrefixInfoOption &aPio)
|
||||
{
|
||||
Ip6::Prefix prefix;
|
||||
|
||||
|
@ -1109,35 +1108,30 @@ void RoutingManager::HandleRouterAdvertisement(const InfraIf::Icmp6Packet &aPack
|
|||
OT_ASSERT(mIsRunning);
|
||||
OT_UNUSED_VARIABLE(aSrcAddress);
|
||||
|
||||
using RouterAdv::Option;
|
||||
using RouterAdv::PrefixInfoOption;
|
||||
using RouterAdv::RouteInfoOption;
|
||||
using RouterAdv::RouterAdvMessage;
|
||||
bool needReevaluate = false;
|
||||
const uint8_t * optionsBegin;
|
||||
uint16_t optionsLength;
|
||||
const Ip6::Nd::Option * option;
|
||||
const Ip6::Nd::RouterAdvMessage *routerAdvMessage;
|
||||
|
||||
bool needReevaluate = false;
|
||||
const uint8_t * optionsBegin;
|
||||
uint16_t optionsLength;
|
||||
const Option * option;
|
||||
const RouterAdvMessage *routerAdvMessage;
|
||||
|
||||
VerifyOrExit(aPacket.GetLength() >= sizeof(RouterAdvMessage));
|
||||
VerifyOrExit(aPacket.GetLength() >= sizeof(Ip6::Nd::RouterAdvMessage));
|
||||
|
||||
LogInfo("Received Router Advertisement from %s on %s", aSrcAddress.ToString().AsCString(),
|
||||
mInfraIf.ToString().AsCString());
|
||||
DumpDebg("[BR-CERT] direction=recv | type=RA |", aPacket.GetBytes(), aPacket.GetLength());
|
||||
|
||||
routerAdvMessage = reinterpret_cast<const RouterAdvMessage *>(aPacket.GetBytes());
|
||||
optionsBegin = aPacket.GetBytes() + sizeof(RouterAdvMessage);
|
||||
optionsLength = aPacket.GetLength() - sizeof(RouterAdvMessage);
|
||||
routerAdvMessage = reinterpret_cast<const Ip6::Nd::RouterAdvMessage *>(aPacket.GetBytes());
|
||||
optionsBegin = aPacket.GetBytes() + sizeof(Ip6::Nd::RouterAdvMessage);
|
||||
optionsLength = aPacket.GetLength() - sizeof(Ip6::Nd::RouterAdvMessage);
|
||||
|
||||
option = nullptr;
|
||||
while ((option = Option::GetNextOption(option, optionsBegin, optionsLength)) != nullptr)
|
||||
while ((option = Ip6::Nd::Option::GetNextOption(option, optionsBegin, optionsLength)) != nullptr)
|
||||
{
|
||||
switch (option->GetType())
|
||||
{
|
||||
case Option::Type::kPrefixInfo:
|
||||
case Ip6::Nd::Option::Type::kPrefixInfo:
|
||||
{
|
||||
const PrefixInfoOption *pio = static_cast<const PrefixInfoOption *>(option);
|
||||
const Ip6::Nd::PrefixInfoOption *pio = static_cast<const Ip6::Nd::PrefixInfoOption *>(option);
|
||||
|
||||
if (pio->IsValid())
|
||||
{
|
||||
|
@ -1146,9 +1140,9 @@ void RoutingManager::HandleRouterAdvertisement(const InfraIf::Icmp6Packet &aPack
|
|||
}
|
||||
break;
|
||||
|
||||
case Option::Type::kRouteInfo:
|
||||
case Ip6::Nd::Option::Type::kRouteInfo:
|
||||
{
|
||||
const RouteInfoOption *rio = static_cast<const RouteInfoOption *>(option);
|
||||
const Ip6::Nd::RouteInfoOption *rio = static_cast<const Ip6::Nd::RouteInfoOption *>(option);
|
||||
|
||||
if (rio->IsValid())
|
||||
{
|
||||
|
@ -1181,7 +1175,7 @@ exit:
|
|||
// Adds or deprecates a discovered on-link prefix (new external routes may be added
|
||||
// to the Thread network). Returns a boolean which indicates whether we need to do
|
||||
// routing policy evaluation.
|
||||
bool RoutingManager::UpdateDiscoveredOnLinkPrefix(const RouterAdv::PrefixInfoOption &aPio)
|
||||
bool RoutingManager::UpdateDiscoveredOnLinkPrefix(const Ip6::Nd::PrefixInfoOption &aPio)
|
||||
{
|
||||
Ip6::Prefix prefix;
|
||||
bool needReevaluate = false;
|
||||
|
@ -1243,7 +1237,7 @@ exit:
|
|||
|
||||
// Adds or removes a discovered OMR prefix (external route will be added to or removed
|
||||
// from the Thread network).
|
||||
void RoutingManager::UpdateDiscoveredOmrPrefix(const RouterAdv::RouteInfoOption &aRio)
|
||||
void RoutingManager::UpdateDiscoveredOmrPrefix(const Ip6::Nd::RouteInfoOption &aRio)
|
||||
{
|
||||
Ip6::Prefix prefix;
|
||||
ExternalPrefix omrPrefix;
|
||||
|
@ -1398,9 +1392,9 @@ bool RoutingManager::NetworkDataContainsOmrPrefix(const Ip6::Prefix &aPrefix) co
|
|||
|
||||
// Update the `mRouterAdvMessage` with given Router Advertisement message.
|
||||
// Returns a boolean which indicates whether there are changes of `mRouterAdvMessage`.
|
||||
bool RoutingManager::UpdateRouterAdvMessage(const RouterAdv::RouterAdvMessage *aRouterAdvMessage)
|
||||
bool RoutingManager::UpdateRouterAdvMessage(const Ip6::Nd::RouterAdvMessage *aRouterAdvMessage)
|
||||
{
|
||||
RouterAdv::RouterAdvMessage oldRouterAdvMessage;
|
||||
Ip6::Nd::RouterAdvMessage oldRouterAdvMessage;
|
||||
|
||||
oldRouterAdvMessage = mRouterAdvMessage;
|
||||
|
||||
|
@ -1493,7 +1487,7 @@ void RoutingManager::ResetDiscoveredPrefixStaleTimer(void)
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
// ExtneralPrefix
|
||||
|
||||
void RoutingManager::ExternalPrefix::InitFrom(const RouterAdv::PrefixInfoOption &aPio)
|
||||
void RoutingManager::ExternalPrefix::InitFrom(const Ip6::Nd::PrefixInfoOption &aPio)
|
||||
{
|
||||
Clear();
|
||||
aPio.GetPrefix(mPrefix);
|
||||
|
@ -1503,7 +1497,7 @@ void RoutingManager::ExternalPrefix::InitFrom(const RouterAdv::PrefixInfoOption
|
|||
mLastUpdateTime = TimerMilli::GetNow();
|
||||
}
|
||||
|
||||
void RoutingManager::ExternalPrefix::InitFrom(const RouterAdv::RouteInfoOption &aRio)
|
||||
void RoutingManager::ExternalPrefix::InitFrom(const Ip6::Nd::RouteInfoOption &aRio)
|
||||
{
|
||||
Clear();
|
||||
aRio.GetPrefix(mPrefix);
|
||||
|
|
|
@ -50,7 +50,6 @@
|
|||
#include <openthread/netdata.h>
|
||||
|
||||
#include "border_router/infra_if.hpp"
|
||||
#include "border_router/router_advertisement.hpp"
|
||||
#include "common/array.hpp"
|
||||
#include "common/error.hpp"
|
||||
#include "common/locator.hpp"
|
||||
|
@ -58,6 +57,7 @@
|
|||
#include "common/string.hpp"
|
||||
#include "common/timer.hpp"
|
||||
#include "net/ip6.hpp"
|
||||
#include "net/nd6.hpp"
|
||||
#include "thread/network_data.hpp"
|
||||
|
||||
namespace ot {
|
||||
|
@ -248,8 +248,8 @@ private:
|
|||
class ExternalPrefix : private Clearable<ExternalPrefix>, public Unequatable<ExternalPrefix>
|
||||
{
|
||||
public:
|
||||
void InitFrom(const RouterAdv::PrefixInfoOption &aPio);
|
||||
void InitFrom(const RouterAdv::RouteInfoOption &aRio);
|
||||
void InitFrom(const Ip6::Nd::PrefixInfoOption &aPio);
|
||||
void InitFrom(const Ip6::Nd::RouteInfoOption &aRio);
|
||||
bool IsOnLinkPrefix(void) const { return mIsOnLinkPrefix; }
|
||||
const Ip6::Prefix &GetPrefix(void) const { return mPrefix; }
|
||||
const TimeMilli & GetLastUpdateTime(void) const { return mLastUpdateTime; }
|
||||
|
@ -346,16 +346,16 @@ private:
|
|||
void DeprecateOnLinkPrefix(void);
|
||||
void HandleRouterSolicit(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress);
|
||||
void HandleRouterAdvertisement(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress);
|
||||
bool UpdateDiscoveredOnLinkPrefix(const RouterAdv::PrefixInfoOption &aPio);
|
||||
void UpdateDiscoveredOmrPrefix(const RouterAdv::RouteInfoOption &aRio);
|
||||
bool UpdateDiscoveredOnLinkPrefix(const Ip6::Nd::PrefixInfoOption &aPio);
|
||||
void UpdateDiscoveredOmrPrefix(const Ip6::Nd::RouteInfoOption &aRio);
|
||||
void InvalidateDiscoveredPrefixes(void);
|
||||
void InvalidateAllDiscoveredPrefixes(void);
|
||||
bool NetworkDataContainsOmrPrefix(const Ip6::Prefix &aPrefix) const;
|
||||
bool UpdateRouterAdvMessage(const RouterAdv::RouterAdvMessage *aRouterAdvMessage);
|
||||
bool UpdateRouterAdvMessage(const Ip6::Nd::RouterAdvMessage *aRouterAdvMessage);
|
||||
void ResetDiscoveredPrefixStaleTimer(void);
|
||||
|
||||
static bool IsValidBrUlaPrefix(const Ip6::Prefix &aBrUlaPrefix);
|
||||
static bool IsValidOnLinkPrefix(const RouterAdv::PrefixInfoOption &aPio);
|
||||
static bool IsValidOnLinkPrefix(const Ip6::Nd::PrefixInfoOption &aPio);
|
||||
static bool IsValidOnLinkPrefix(const Ip6::Prefix &aOnLinkPrefix);
|
||||
|
||||
// Indicates whether the Routing Manager is running (started).
|
||||
|
@ -408,9 +408,9 @@ private:
|
|||
// The RA header and parameters for the infra interface.
|
||||
// This value is initialized with `RouterAdvMessage::SetToDefault`
|
||||
// and updated with RA messages initiated from infra interface.
|
||||
RouterAdv::RouterAdvMessage mRouterAdvMessage;
|
||||
TimeMilli mTimeRouterAdvMessageLastUpdate;
|
||||
bool mLearntRouterAdvMessageFromHost;
|
||||
Ip6::Nd::RouterAdvMessage mRouterAdvMessage;
|
||||
TimeMilli mTimeRouterAdvMessageLastUpdate;
|
||||
bool mLearntRouterAdvMessageFromHost;
|
||||
|
||||
TimerMilli mDiscoveredPrefixInvalidTimer;
|
||||
TimerMilli mDiscoveredPrefixStaleTimer;
|
||||
|
|
|
@ -28,20 +28,18 @@
|
|||
|
||||
/**
|
||||
* @file
|
||||
* This file includes implementations for ICMPv6 Router Advertisement.
|
||||
* This file includes implementations for IPv6 Neighbor Discovery (ND).
|
||||
*
|
||||
*/
|
||||
|
||||
#include "border_router/router_advertisement.hpp"
|
||||
|
||||
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
|
||||
#include "nd6.hpp"
|
||||
|
||||
#include "common/as_core_type.hpp"
|
||||
#include "common/code_utils.hpp"
|
||||
|
||||
namespace ot {
|
||||
namespace BorderRouter {
|
||||
namespace RouterAdv {
|
||||
namespace Ip6 {
|
||||
namespace Nd {
|
||||
|
||||
const Option *Option::GetNextOption(const Option *aCurOption, const uint8_t *aBuffer, uint16_t aBufferLength)
|
||||
{
|
||||
|
@ -80,20 +78,20 @@ void PrefixInfoOption::Init(void)
|
|||
OT_UNUSED_VARIABLE(mReserved2);
|
||||
}
|
||||
|
||||
void PrefixInfoOption::SetPrefix(const Ip6::Prefix &aPrefix)
|
||||
void PrefixInfoOption::SetPrefix(const Prefix &aPrefix)
|
||||
{
|
||||
mPrefixLength = aPrefix.mLength;
|
||||
mPrefix = AsCoreType(&aPrefix.mPrefix);
|
||||
}
|
||||
|
||||
void PrefixInfoOption::GetPrefix(Ip6::Prefix &aPrefix) const
|
||||
void PrefixInfoOption::GetPrefix(Prefix &aPrefix) const
|
||||
{
|
||||
aPrefix.Set(mPrefix.GetBytes(), mPrefixLength);
|
||||
}
|
||||
|
||||
bool PrefixInfoOption::IsValid(void) const
|
||||
{
|
||||
return (GetSize() >= sizeof(*this)) && (mPrefixLength <= Ip6::Prefix::kMaxLength) &&
|
||||
return (GetSize() >= sizeof(*this)) && (mPrefixLength <= Prefix::kMaxLength) &&
|
||||
(GetPreferredLifetime() <= GetValidLifetime());
|
||||
}
|
||||
|
||||
|
@ -117,21 +115,21 @@ RoutePreference RouteInfoOption::GetPreference(void) const
|
|||
return NetworkData::RoutePreferenceFromValue((mResvdPrf & kPreferenceMask) >> kPreferenceOffset);
|
||||
}
|
||||
|
||||
void RouteInfoOption::SetPrefix(const Ip6::Prefix &aPrefix)
|
||||
void RouteInfoOption::SetPrefix(const Prefix &aPrefix)
|
||||
{
|
||||
SetLength(OptionLengthForPrefix(aPrefix.mLength));
|
||||
mPrefixLength = aPrefix.mLength;
|
||||
memcpy(GetPrefixBytes(), aPrefix.GetBytes(), aPrefix.GetBytesSize());
|
||||
}
|
||||
|
||||
void RouteInfoOption::GetPrefix(Ip6::Prefix &aPrefix) const
|
||||
void RouteInfoOption::GetPrefix(Prefix &aPrefix) const
|
||||
{
|
||||
aPrefix.Set(GetPrefixBytes(), mPrefixLength);
|
||||
}
|
||||
|
||||
bool RouteInfoOption::IsValid(void) const
|
||||
{
|
||||
return (GetSize() >= kMinSize) && (mPrefixLength <= Ip6::Prefix::kMaxLength) &&
|
||||
return (GetSize() >= kMinSize) && (mPrefixLength <= Prefix::kMaxLength) &&
|
||||
(GetLength() >= OptionLengthForPrefix(mPrefixLength)) &&
|
||||
NetworkData::IsRoutePreferenceValid(GetPreference());
|
||||
}
|
||||
|
@ -177,7 +175,7 @@ void RouterAdvMessage::SetToDefault(void)
|
|||
OT_UNUSED_VARIABLE(mRetransTimer);
|
||||
|
||||
Clear();
|
||||
mType = Ip6::Icmp::Header::kTypeRouterAdvert;
|
||||
mType = Icmp::Header::kTypeRouterAdvert;
|
||||
}
|
||||
|
||||
RoutePreference RouterAdvMessage::GetDefaultRouterPreference(void) const
|
||||
|
@ -197,11 +195,9 @@ void RouterAdvMessage::SetDefaultRouterPreference(RoutePreference aPreference)
|
|||
RouterSolicitMessage::RouterSolicitMessage(void)
|
||||
{
|
||||
mHeader.Clear();
|
||||
mHeader.SetType(Ip6::Icmp::Header::kTypeRouterSolicit);
|
||||
mHeader.SetType(Icmp::Header::kTypeRouterSolicit);
|
||||
}
|
||||
|
||||
} // namespace RouterAdv
|
||||
} // namespace BorderRouter
|
||||
} // namespace Nd
|
||||
} // namespace Ip6
|
||||
} // namespace ot
|
||||
|
||||
#endif // OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
|
|
@ -28,19 +28,17 @@
|
|||
|
||||
/**
|
||||
* @file
|
||||
* This file includes definitions for IPv6 Router Advertisement.
|
||||
* This file includes definitions for IPv6 Neighbor Discovery (ND).
|
||||
*
|
||||
* See RFC 4861: Neighbor Discovery for IP version 6 (https://tools.ietf.org/html/rfc4861).
|
||||
* See RFC 4861 (https://tools.ietf.org/html/rfc4861) and RFC 4191 (https://tools.ietf.org/html/rfc4191).
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef ROUTER_ADVERTISEMENT_HPP_
|
||||
#define ROUTER_ADVERTISEMENT_HPP_
|
||||
#ifndef ND6_HPP_
|
||||
#define ND6_HPP_
|
||||
|
||||
#include "openthread-core-config.h"
|
||||
|
||||
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <openthread/netdata.h>
|
||||
|
@ -57,8 +55,8 @@ using ot::Encoding::BigEndian::HostSwap16;
|
|||
using ot::Encoding::BigEndian::HostSwap32;
|
||||
|
||||
namespace ot {
|
||||
namespace BorderRouter {
|
||||
namespace RouterAdv {
|
||||
namespace Ip6 {
|
||||
namespace Nd {
|
||||
|
||||
typedef NetworkData::RoutePreference RoutePreference; ///< Route Preference
|
||||
|
||||
|
@ -256,15 +254,15 @@ public:
|
|||
* @param[in] aPrefix The prefix contained in this option.
|
||||
*
|
||||
*/
|
||||
void SetPrefix(const Ip6::Prefix &aPrefix);
|
||||
void SetPrefix(const Prefix &aPrefix);
|
||||
|
||||
/**
|
||||
* This method gets the prefix in this option.
|
||||
*
|
||||
* @param[out] aPrefix Reference to an `Ip6::Prefix` to return the prefix.
|
||||
* @param[out] aPrefix Reference to a `Prefix` to return the prefix.
|
||||
*
|
||||
*/
|
||||
void GetPrefix(Ip6::Prefix &aPrefix) const;
|
||||
void GetPrefix(Prefix &aPrefix) const;
|
||||
|
||||
/**
|
||||
* This method indicates whether or not the option is valid.
|
||||
|
@ -303,12 +301,12 @@ private:
|
|||
static constexpr uint8_t kAutoConfigFlagMask = 0x40; // Autonomous address-configuration flag.
|
||||
static constexpr uint8_t kOnLinkFlagMask = 0x80; // On-link flag.
|
||||
|
||||
uint8_t mPrefixLength; // The prefix length in bits.
|
||||
uint8_t mFlags; // The flags field.
|
||||
uint32_t mValidLifetime; // The valid lifetime of the prefix.
|
||||
uint32_t mPreferredLifetime; // The preferred lifetime of the prefix.
|
||||
uint32_t mReserved2; // The reserved field.
|
||||
Ip6::Address mPrefix; // The prefix.
|
||||
uint8_t mPrefixLength; // The prefix length in bits.
|
||||
uint8_t mFlags; // The flags field.
|
||||
uint32_t mValidLifetime; // The valid lifetime of the prefix.
|
||||
uint32_t mPreferredLifetime; // The preferred lifetime of the prefix.
|
||||
uint32_t mReserved2; // The reserved field.
|
||||
Address mPrefix; // The prefix.
|
||||
} OT_TOOL_PACKED_END;
|
||||
|
||||
static_assert(sizeof(PrefixInfoOption) == 32, "invalid PrefixInfoOption structure");
|
||||
|
@ -370,15 +368,15 @@ public:
|
|||
* @param[in] aPrefix The prefix contained in this option.
|
||||
*
|
||||
*/
|
||||
void SetPrefix(const Ip6::Prefix &aPrefix);
|
||||
void SetPrefix(const Prefix &aPrefix);
|
||||
|
||||
/**
|
||||
* This method gets the prefix in this option.
|
||||
*
|
||||
* @param[out] aPrefix Reference to an `Ip6::Prefix` to return the prefix.
|
||||
* @param[out] aPrefix Reference to a `Prefix` to return the prefix.
|
||||
*
|
||||
*/
|
||||
void GetPrefix(Ip6::Prefix &aPrefix) const;
|
||||
void GetPrefix(Prefix &aPrefix) const;
|
||||
|
||||
/**
|
||||
* This method tells whether this option is valid.
|
||||
|
@ -561,15 +559,13 @@ public:
|
|||
RouterSolicitMessage(void);
|
||||
|
||||
private:
|
||||
Ip6::Icmp::Header mHeader; // The common ICMPv6 header.
|
||||
Icmp::Header mHeader; // The common ICMPv6 header.
|
||||
} OT_TOOL_PACKED_END;
|
||||
|
||||
static_assert(sizeof(RouterSolicitMessage) == 8, "invalid RouterSolicitMessage structure");
|
||||
|
||||
} // namespace RouterAdv
|
||||
} // namespace BorderRouter
|
||||
} // namespace Nd
|
||||
} // namespace Ip6
|
||||
} // namespace ot
|
||||
|
||||
#endif // OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
|
||||
|
||||
#endif // ROUTER_ADVERTISEMENT_HPP_
|
||||
#endif // ND6_HPP_
|
Loading…
Reference in New Issue