mirror of
https://github.com/espressif/openthread.git
synced 2026-08-07 19:27:46 +00:00
[nat64] simplify mapping lookup and Touch() method (#11864)
This change streamlines NAT64 mapping management by removing the `FindMapping()` and `FindOrAllocateMapping()` helper methods. Following recent simplifications, such as adding new `Matches()` flavors, the logic within these `Find` methods became much simpler. Their functionality is now incorporated directly into `TranslateToIp6()` and `TranslateFromIp6()`, respectively. Additionally, the `Mapping::Touch()` method is simplified to no longer require the current time as an argument. It now retrieves the time internally.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -304,7 +304,7 @@ private:
|
||||
|
||||
typedef String<kInfoStringSize> 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
|
||||
|
||||
Reference in New Issue
Block a user