diff --git a/src/core/net/nat64_translator.cpp b/src/core/net/nat64_translator.cpp index 8c366e434..fa5baf594 100644 --- a/src/core/net/nat64_translator.cpp +++ b/src/core/net/nat64_translator.cpp @@ -148,7 +148,12 @@ Translator::Result Translator::TranslateFromIp6(Message &aMessage) ExitNow(result = kNotTranslated); } - mapping = FindOrAllocateMapping(ip6Headers); + mapping = mActiveMappings.FindMatching(ip6Headers); + + if (mapping == nullptr) + { + mapping = AllocateMapping(ip6Headers); + } if (mapping == nullptr) { @@ -261,7 +266,7 @@ Translator::Result Translator::TranslateToIp6(Message &aMessage) ExitNow(result = kDrop); } - mapping = FindMapping(ip4Headers); + mapping = mActiveMappings.FindMatching(ip4Headers); if (mapping == nullptr) { @@ -270,6 +275,8 @@ Translator::Result Translator::TranslateToIp6(Message &aMessage) ExitNow(result = kDrop); } + mapping->Touch(ip4Headers.GetIpProto()); + #if OPENTHREAD_CONFIG_NAT64_PORT_TRANSLATION_ENABLE dstPortOrId = mapping->mSrcPortOrId; #else @@ -485,7 +492,7 @@ Translator::Mapping *Translator::AllocateMapping(const Ip6::Headers &aIp6Headers mapping->mSrcPortOrId = 0; mapping->mTranslatedPortOrId = 0; #endif - mapping->Touch(TimerMilli::GetNow(), aIp6Headers.GetIpProto()); + mapping->Touch(aIp6Headers.GetIpProto()); LogInfo("Mapping created: %s", mapping->ToString().AsCString()); @@ -493,41 +500,20 @@ exit: return mapping; } -Translator::Mapping *Translator::FindOrAllocateMapping(const Ip6::Headers &aIp6Headers) +void Translator::Mapping::Touch(uint8_t aProtocol) { - Mapping *mapping = mActiveMappings.FindMatching(aIp6Headers); + uint32_t timeout; - // Exit if we found a valid mapping. - VerifyOrExit(mapping == nullptr); - - mapping = AllocateMapping(aIp6Headers); - -exit: - return mapping; -} - -Translator::Mapping *Translator::FindMapping(const Ip4::Headers &aIp4Headers) -{ - Mapping *mapping = mActiveMappings.FindMatching(aIp4Headers); - - if (mapping != nullptr) - { - mapping->Touch(TimerMilli::GetNow(), aIp4Headers.GetIpProto()); - } - - return mapping; -} - -void Translator::Mapping::Touch(TimeMilli aNow, uint8_t aProtocol) -{ if ((aProtocol == Ip6::kProtoIcmp6) || (aProtocol == Ip4::kProtoIcmp)) { - mExpiry = aNow + kIcmpTimeout; + timeout = kIcmpTimeout; } else { - mExpiry = aNow + kIdleTimeout; + timeout = kIdleTimeout; } + + mExpiry = TimerMilli::GetNow() + timeout; } bool Translator::Mapping::Matches(const Ip6::Headers &aIp6Headers) const diff --git a/src/core/net/nat64_translator.hpp b/src/core/net/nat64_translator.hpp index 1e7b1ac40..5f1809ca8 100644 --- a/src/core/net/nat64_translator.hpp +++ b/src/core/net/nat64_translator.hpp @@ -304,7 +304,7 @@ private: typedef String InfoString; - void Touch(TimeMilli aNow, uint8_t aProtocol); + void Touch(uint8_t aProtocol); InfoString ToString(void) const; void CopyTo(AddressMapping &aMapping, TimeMilli aNow) const; bool Matches(const Ip6::Headers &aIp6Headers) const; @@ -328,8 +328,6 @@ private: void ReleaseMapping(Mapping &aMapping); uint16_t ReleaseExpiredMappings(void); Mapping *AllocateMapping(const Ip6::Headers &aIp6Headers); - Mapping *FindOrAllocateMapping(const Ip6::Headers &aIp6Headers); - Mapping *FindMapping(const Ip4::Headers &aIp4Headers); void HandleTimer(void); void UpdateState(void); #if OPENTHREAD_CONFIG_NAT64_PORT_TRANSLATION_ENABLE