mirror of
https://github.com/espressif/openthread.git
synced 2026-08-06 02:37:47 +00:00
[routing-manager] use NA target address (#8777)
This commit updates `ProcessNeighborAdvertMessage()` method in `RoutingManager` to use the Target Address included in Neighbor Advertisement to find the related `Router` (instead of sender's IPv6 address). This addresses situations where the router responding may use a different address.
This commit is contained in:
@@ -363,7 +363,7 @@ void RoutingManager::HandleReceived(const InfraIf::Icmp6Packet &aPacket, const I
|
||||
HandleRouterSolicit(aPacket, aSrcAddress);
|
||||
break;
|
||||
case Ip6::Icmp::Header::kTypeNeighborAdvert:
|
||||
HandleNeighborAdvertisement(aPacket, aSrcAddress);
|
||||
HandleNeighborAdvertisement(aPacket);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -943,14 +943,14 @@ void RoutingManager::HandleRouterSolicit(const InfraIf::Icmp6Packet &aPacket, co
|
||||
ScheduleRoutingPolicyEvaluation(kToReplyToRs);
|
||||
}
|
||||
|
||||
void RoutingManager::HandleNeighborAdvertisement(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress)
|
||||
void RoutingManager::HandleNeighborAdvertisement(const InfraIf::Icmp6Packet &aPacket)
|
||||
{
|
||||
const Ip6::Nd::NeighborAdvertMessage *naMsg;
|
||||
|
||||
VerifyOrExit(aPacket.GetLength() >= sizeof(naMsg));
|
||||
naMsg = reinterpret_cast<const Ip6::Nd::NeighborAdvertMessage *>(aPacket.GetBytes());
|
||||
|
||||
mDiscoveredPrefixTable.ProcessNeighborAdvertMessage(*naMsg, aSrcAddress);
|
||||
mDiscoveredPrefixTable.ProcessNeighborAdvertMessage(*naMsg);
|
||||
|
||||
exit:
|
||||
return;
|
||||
@@ -1715,14 +1715,14 @@ void RoutingManager::DiscoveredPrefixTable::RemoveExpiredEntries(void)
|
||||
void RoutingManager::DiscoveredPrefixTable::SignalTableChanged(void) { mSignalTask.Post(); }
|
||||
|
||||
void RoutingManager::DiscoveredPrefixTable::ProcessNeighborAdvertMessage(
|
||||
const Ip6::Nd::NeighborAdvertMessage &aNaMessage,
|
||||
const Ip6::Address &aSrcAddress)
|
||||
const Ip6::Nd::NeighborAdvertMessage &aNaMessage)
|
||||
{
|
||||
Router *router = mRouters.FindMatching(aSrcAddress);
|
||||
Router *router;
|
||||
|
||||
VerifyOrExit(router != nullptr);
|
||||
VerifyOrExit(aNaMessage.IsValid());
|
||||
VerifyOrExit(aNaMessage.GetTargetAddress() == router->mAddress);
|
||||
|
||||
router = mRouters.FindMatching(aNaMessage.GetTargetAddress());
|
||||
VerifyOrExit(router != nullptr);
|
||||
|
||||
LogInfo("Received NA from router %s", router->mAddress.ToString().AsCString());
|
||||
|
||||
|
||||
@@ -462,8 +462,7 @@ private:
|
||||
|
||||
void ProcessRouterAdvertMessage(const Ip6::Nd::RouterAdvertMessage &aRaMessage,
|
||||
const Ip6::Address &aSrcAddress);
|
||||
void ProcessNeighborAdvertMessage(const Ip6::Nd::NeighborAdvertMessage &aNaMessage,
|
||||
const Ip6::Address &aSrcAddress);
|
||||
void ProcessNeighborAdvertMessage(const Ip6::Nd::NeighborAdvertMessage &aNaMessage);
|
||||
|
||||
void SetAllowDefaultRouteInNetData(bool aAllow);
|
||||
|
||||
@@ -868,7 +867,7 @@ private:
|
||||
|
||||
void HandleRouterAdvertisement(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress);
|
||||
void HandleRouterSolicit(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress);
|
||||
void HandleNeighborAdvertisement(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress);
|
||||
void HandleNeighborAdvertisement(const InfraIf::Icmp6Packet &aPacket);
|
||||
bool ShouldProcessPrefixInfoOption(const Ip6::Nd::PrefixInfoOption &aPio, const Ip6::Prefix &aPrefix);
|
||||
bool ShouldProcessRouteInfoOption(const Ip6::Nd::RouteInfoOption &aRio, const Ip6::Prefix &aPrefix);
|
||||
void UpdateDiscoveredPrefixTableOnNetDataChange(void);
|
||||
|
||||
Reference in New Issue
Block a user