[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:
Abtin Keshavarzian
2023-02-20 21:20:57 -08:00
committed by GitHub
parent afbb2d5799
commit 13ac7297a0
2 changed files with 10 additions and 11 deletions
+8 -8
View File
@@ -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());
+2 -3
View File
@@ -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);