NAT64

此模块包含边界路由器上 NAT64 函数的函数和结构体。

摘要

仅当启用 OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE 时,这些函数才可用。

枚举

otNat64DropReason{
  OT_NAT64_DROP_REASON_UNKNOWN = 0,
  OT_NAT64_DROP_REASON_ILLEGAL_PACKET,
  OT_NAT64_DROP_REASON_UNSUPPORTED_PROTO,
  OT_NAT64_DROP_REASON_NO_MAPPING
}
枚举
数据包丢弃的原因。
otNat64State{
  OT_NAT64_STATE_DISABLED = 0,
  OT_NAT64_STATE_NOT_RUNNING,
  OT_NAT64_STATE_IDLE,
  OT_NAT64_STATE_ACTIVE
}
枚举
NAT64 的州。

类型定义符

otIp4Address typedef
struct otIp4Address
表示 IPv4 地址。
otIp4Cidr typedef
struct otIp4Cidr
otNat64AddressMapping typedef
表示 NAT64 的地址映射记录。
otNat64AddressMappingIterator typedef
用于遍历 NAT64 地址映射。
otNat64Counters typedef
表示 NAT64 的计数器。
otNat64DropReason typedef
数据包丢弃的原因。
otNat64ErrorCounters typedef
表示在处理 NAT64 数据包时因错误而丢弃数据包的计数器。
otNat64ProtocolCounters typedef
表示 NAT64 支持的协议的计数器。
otNat64ReceiveIp4Callback)(otMessage *aMessage, void *aContext) typedef
void(*
当收到 IPv4 数据报(由 NAT64 转换器转换)时,系统会调用指针。

变量

OT_TOOL_PACKED_END

函数

otIp4AddressFromString(const char *aString, otIp4Address *aAddress)
将人类可读的 IPv4 地址字符串转换为二进制表示形式。
otIp4AddressToString(const otIp4Address *aAddress, char *aBuffer, uint16_t aSize)
void
将地址转换为字符串。
otIp4CidrFromString(const char *aString, otIp4Cidr *aCidr)
将人类可读的 IPv4 CIDR 字符串转换为二进制表示法。
otIp4CidrToString(const otIp4Cidr *aCidr, char *aBuffer, uint16_t aSize)
void
将 IPv4 CIDR 转换为字符串。
otIp4ExtractFromIp6Address(uint8_t aPrefixLength, const otIp6Address *aIp6Address, otIp4Address *aIp4Address)
void
按照 RFC 6052 的规定,通过从 aIp6Address 执行 NAT64 地址转换来设置 aIp4Address
otIp4IsAddressEqual(const otIp4Address *aFirst, const otIp4Address *aSecond)
bool
测试两个 IPv4 地址是否相同。
otIp4NewMessage(otInstance *aInstance, const otMessageSettings *aSettings)
分配新的消息缓冲区,以用于向 NAT64 转换器发送 IPv4 消息。
otNat64GetCidr(otInstance *aInstance, otIp4Cidr *aCidr)
获取在 NAT64 转换器中配置的 IPv4 CIDR。
otNat64GetCounters(otInstance *aInstance, otNat64ProtocolCounters *aCounters)
void
获取 NAT64 转换器计数器。
otNat64GetErrorCounters(otInstance *aInstance, otNat64ErrorCounters *aCounters)
void
获取 NAT64 转换器错误计数器。
otNat64GetNextAddressMapping(otInstance *aInstance, otNat64AddressMappingIterator *aIterator, otNat64AddressMapping *aMapping)
获取下一个 AddressMapping 信息(使用迭代器)。
otNat64GetPrefixManagerState(otInstance *aInstance)
获取 NAT64 前缀管理器的状态。
otNat64GetTranslatorState(otInstance *aInstance)
获取 NAT64 转换器的状态。
otNat64InitAddressMappingIterator(otInstance *aInstance, otNat64AddressMappingIterator *aIterator)
void
otNat64Send(otInstance *aInstance, otMessage *aMessage)
将 IPv4 数据报转换为 IPv6 数据报,并通过 Thread 接口发送。
otNat64SetEnabled(otInstance *aInstance, bool aEnabled)
void
启用或停用 NAT64 函数。
otNat64SetIp4Cidr(otInstance *aInstance, const otIp4Cidr *aCidr)
设置在设置已转换的传出 IPv4 数据包的来源地址时使用的 CIDR。
otNat64SetReceiveIp4Callback(otInstance *aInstance, otNat64ReceiveIp4Callback aCallback, void *aContext)
void
注册一个回调,以提供收到的 IPv4 数据报。
otNat64SynthesizeIp6Address(otInstance *aInstance, const otIp4Address *aIp4Address, otIp6Address *aIp6Address)
通过从首选 NAT64 前缀和 RFC 6052 中指定的指定 IPv4 地址执行 NAT64 地址转换,设置 IPv6 地址。

结构体

otIp4Address

表示 IPv4 地址。

otIp4Cidr

表示 IPv4 CIDR 地址块。

otNat64AddressMapping

表示 NAT64 的地址映射记录。

otNat64AddressMappingIterator

用于遍历 NAT64 地址映射。

otNat64Counters

表示 NAT64 的计数器。

otNat64ErrorCounters

表示在处理 NAT64 数据包时因错误而丢弃数据包的计数器。

otNat64ProtocolCounters

表示 NAT64 支持的协议的计数器。

联合体

otIp4Address::OT_TOOL_PACKED_FIELD

枚举

otNat64DropReason

 otNat64DropReason

数据包丢弃的原因。

属性
OT_NAT64_DROP_REASON_ILLEGAL_PACKET

数据包因无法解析数据报而被丢弃。

OT_NAT64_DROP_REASON_NO_MAPPING

数据包由于未找到映射或映射池已用尽而丢弃。

OT_NAT64_DROP_REASON_UNKNOWN

数据包丢弃,原因未知。

OT_NAT64_DROP_REASON_UNSUPPORTED_PROTO

数据包由于 IP 协议不受支持而被丢弃。

otNat64State

 otNat64State

NAT64 的州。

属性
OT_NAT64_STATE_ACTIVE

BR 正在发布 NAT64 前缀和/或转换数据包。

OT_NAT64_STATE_DISABLED

NAT64 已停用。

OT_NAT64_STATE_IDLE

NAT64 已启用,但此 BR 不是活跃的 NAT64 BR。

OT_NAT64_STATE_NOT_RUNNING

NAT64 已启用,但一个或多个 NAT64 依赖项未运行。

类型定义符

otIp4Address

struct otIp4Address otIp4Address

表示 IPv4 地址。

otIp4Cidr

struct otIp4Cidr otIp4Cidr

otNat64AddressMapping

struct otNat64AddressMapping otNat64AddressMapping

表示 NAT64 的地址映射记录。

otNat64AddressMappingIterator

struct otNat64AddressMappingIterator otNat64AddressMappingIterator

用于遍历 NAT64 地址映射。

此类型的字段是不透明的(仅供 OpenThread 核心使用),因此调用方不应访问或使用。

在使用迭代器之前,必须使用 otNat64AddressMappingIteratorInit() 对其进行初始化。

otNat64Counters

struct otNat64Counters otNat64Counters

表示 NAT64 的计数器。

otNat64DropReason

enum otNat64DropReason otNat64DropReason

数据包丢弃的原因。

otNat64ErrorCounters

struct otNat64ErrorCounters otNat64ErrorCounters

表示在处理 NAT64 数据包时因错误而丢弃数据包的计数器。

otNat64ProtocolCounters

struct otNat64ProtocolCounters otNat64ProtocolCounters

表示 NAT64 支持的协议的计数器。

otNat64ReceiveIp4Callback

void(* otNat64ReceiveIp4Callback)(otMessage *aMessage, void *aContext)

当收到 IPv4 数据报(由 NAT64 转换器转换)时,系统会调用指针。

具体说明
参数
[in] aMessage
指向包含已接收 IPv6 数据报的消息缓冲区的指针。此函数将 aMessage 的所有权转移给回调的接收器。处理完消息后,回调的接收方应该将其释放。
[in] aContext
指向应用特定上下文的指针。

变量

OT_TOOL_PACKED_END

OT_TOOL_PACKED_BEGIN struct otIp4Address OT_TOOL_PACKED_END

函数

otIp4AddressFromString

otError otIp4AddressFromString(
  const char *aString,
  otIp4Address *aAddress
)

将人类可读的 IPv4 地址字符串转换为二进制表示形式。

具体说明
参数
[in] aString
指向以 NULL 终止的字符串的指针。
[out] aAddress
指向 IPv4 地址的指针。
返回值
OT_ERROR_NONE
已成功解析字符串。
OT_ERROR_INVALID_ARGS
未能解析字符串。

otIp4AddressToString

void otIp4AddressToString(
  const otIp4Address *aAddress,
  char *aBuffer,
  uint16_t aSize
)

将地址转换为字符串。

该字符串格式在地址中使用四点状表示法,表示 4 个字节(例如,“127.0.0.1”)。

如果生成的字符串不适合 aBuffer(在其 aSize 字符内),该字符串将被截断,但输出的字符串始终以空字符结尾。

具体说明
参数
[in] aAddress
指向 IPv4 地址的指针(不得为 NULL)。
[out] aBuffer
指向用于输出字符串的字符数组的指针(不得为 nullptr)。
[in] aSize
aBuffer 的大小(以字节为单位)。

otIp4CidrFromString

otError otIp4CidrFromString(
  const char *aString,
  otIp4Cidr *aCidr
)

将人类可读的 IPv4 CIDR 字符串转换为二进制表示法。

具体说明
参数
[in] aString
指向以 NULL 终止的字符串的指针。
[out] aCidr
指向 IPv4 CIDR 的指针。
返回值
OT_ERROR_NONE
已成功解析字符串。
OT_ERROR_INVALID_ARGS
未能解析字符串。

otIp4CidrToString

void otIp4CidrToString(
  const otIp4Cidr *aCidr,
  char *aBuffer,
  uint16_t aSize
)

将 IPv4 CIDR 转换为字符串。

该字符串格式使用地址中 4 个字节的四点式表示法,带有前缀(例如“127.0.0.1/32”)。

如果生成的字符串不适合 aBuffer(在其 aSize 字符内),该字符串将被截断,但输出的字符串始终以空字符结尾。

具体说明
参数
[in] aCidr
指向 IPv4 CIDR(不得为 NULL)的指针。
[out] aBuffer
指向用于输出字符串的字符数组的指针(不得为 nullptr)。
[in] aSize
aBuffer 的大小(以字节为单位)。

otIp4ExtractFromIp6Address

void otIp4ExtractFromIp6Address(
  uint8_t aPrefixLength,
  const otIp6Address *aIp6Address,
  otIp4Address *aIp4Address
)

按照 RFC 6052 的规定,通过从 aIp6Address 执行 NAT64 地址转换来设置 aIp4Address

NAT64 aPrefixLength 必须是以下值之一:32、40、48、56、64 或 96,否则未定义此方法的行为。

具体说明
参数
[in] aPrefixLength
用于 IPv4/IPv6 转换的前缀长度。
[in] aIp6Address
指向 IPv6 地址的指针。
[out] aIp4Address
用于输出 IPv4 地址的指针。

otIp4IsAddressEqual

bool otIp4IsAddressEqual(
  const otIp4Address *aFirst,
  const otIp4Address *aSecond
)

测试两个 IPv4 地址是否相同。

具体说明
参数
[in] aFirst
指向要比较的第一个 IPv4 地址的指针。
[in] aSecond
指向要比较的第二个 IPv4 地址的指针。
返回值
TRUE
两个 IPv4 地址是相同的。
FALSE
这两个 IPv4 地址不同。

otIp4NewMessage

otMessage * otIp4NewMessage(
  otInstance *aInstance,
  const otMessageSettings *aSettings
)

分配新的消息缓冲区,以用于向 NAT64 转换器发送 IPv4 消息。

此函数分配的消息缓冲区将预留 20 个字节(IPv6 标头大小和 IPv4 标头大小之差)。

启用 OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 后可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aSettings
指向邮件设置的指针,或用于设置默认设置的 NULL。
返回值
指向消息缓冲区的指针,如果没有可用的消息缓冲区或参数无效,则为 NULL。
另请参阅
otNat64Send

otNat64GetCidr

otError otNat64GetCidr(
  otInstance *aInstance,
  otIp4Cidr *aCidr
)

获取在 NAT64 转换器中配置的 IPv4 CIDR。

启用 OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 后可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aCidr
指向 otIp4Cidr 的指针。CIDR 将填充到的位置。

otNat64GetCounters

void otNat64GetCounters(
  otInstance *aInstance,
  otNat64ProtocolCounters *aCounters
)

获取 NAT64 转换器计数器。

计数器从实例初始化开始计数。

启用 OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 后可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aCounters
指向 otNat64Counters 的指针,其中将放置 NAT64 转换器的计数器。

otNat64GetErrorCounters

void otNat64GetErrorCounters(
  otInstance *aInstance,
  otNat64ErrorCounters *aCounters
)

获取 NAT64 转换器错误计数器。

在初始化 OpenThread 实例时,计数器初始化为零。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aCounters
指向 otNat64Counters 的指针,其中将放置 NAT64 转换器的计数器。

otNat64GetNextAddressMapping

otError otNat64GetNextAddressMapping(
  otInstance *aInstance,
  otNat64AddressMappingIterator *aIterator,
  otNat64AddressMapping *aMapping
)

获取下一个 AddressMapping 信息(使用迭代器)。

启用 OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 后可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in,out] aIterator
指向迭代器的指针。成功后,迭代器将更新为指向下一条 NAT64 地址映射记录。如需获取第一个条目,应将迭代器设置为 OT_NAT64_ADDRESS_MAPPING_ITERATOR_INIT。
[out] aMapping
指向 otNat64AddressMapping 的指针,其中放置了下一条 NAT64 地址映射记录的信息(如果成功)。
返回值
OT_ERROR_NONE
已成功找到下一个 NAT64 地址映射信息(已成功更新 aMapping)。
OT_ERROR_NOT_FOUND
未找到后续 NAT64 地址映射信息。

otNat64GetPrefixManagerState

otNat64State otNat64GetPrefixManagerState(
  otInstance *aInstance
)

获取 NAT64 前缀管理器的状态。

启用 OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE 后可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
OT_NAT64_STATE_DISABLED
NAT64 前缀管理器已停用。
OT_NAT64_STATE_NOT_RUNNING
NAT64 前缀管理器已启用,但未运行(因为路由管理器未运行)。
OT_NAT64_STATE_IDLE
NAT64 前缀管理器已启用,但未发布 NAT64 前缀。通常是在有另一个边界路由器时,发布优先级更高的 NAT64 前缀。
OT_NAT64_STATE_ACTIVE
NAT64 前缀管理器已启用,并且正在向 Thread 网络发布 NAT64 前缀。

otNat64GetTranslatorState

otNat64State otNat64GetTranslatorState(
  otInstance *aInstance
)

获取 NAT64 转换器的状态。

启用 OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 后可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
OT_NAT64_STATE_DISABLED
NAT64 转换器已停用。
OT_NAT64_STATE_NOT_RUNNING
NAT64 转换器已启用,但该转换器未配置有效的 NAT64 前缀和 CIDR。
OT_NAT64_STATE_ACTIVE
NAT64 转换器已启用,正在转换数据包。

otNat64InitAddressMappingIterator

void otNat64InitAddressMappingIterator(
  otInstance *aInstance,
  otNat64AddressMappingIterator *aIterator
)

初始化 otNat64AddressMappingIterator

在使用迭代器之前,必须先对其进行初始化。

可以再次初始化迭代器,以便从映射信息的开头重新开始。

具体说明
参数
[in] aInstance
OpenThread 实例。
[out] aIterator
指向要初始化的迭代器的指针。

otNat64Send

otError otNat64Send(
  otInstance *aInstance,
  otMessage *aMessage
)

将 IPv4 数据报转换为 IPv6 数据报,并通过 Thread 接口发送。

调用方在进行此调用时转移 aMessage 的所有权。OpenThread 会在处理完成时(包括返回 OT_ERROR_NONE 以外的值时)释放 aMessage

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aMessage
指向包含 IPv4 数据报的消息缓冲区的指针。
返回值
OT_ERROR_NONE
已成功处理消息。
OT_ERROR_DROP
消息格式正确,但根据数据包处理规则未得到完全处理。
OT_ERROR_NO_BUFS
处理数据报时,无法分配必要的消息缓冲区。
OT_ERROR_NO_ROUTE
没有通向主机的路由。
OT_ERROR_INVALID_SOURCE_ADDRESS
源地址无效,例如任播地址或多播地址。
OT_ERROR_PARSE
处理消息时遇到格式错误的标头。

otNat64SetEnabled

void otNat64SetEnabled(
  otInstance *aInstance,
  bool aEnabled
)

启用或停用 NAT64 函数。

注意:这包括 NAT64 转换器(如果 OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 启用时)和 NAT64 前缀管理器(如果 OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE 处于启用状态)。

启用 OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 后,将停用设置为 true 会重置翻译器中的映射表。

在启用 OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLEOPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE 后可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
用于启用/停用 NAT64 函数的布尔值
另请参阅
otNat64GetTranslatorState
otNat64GetPrefixManagerState

otNat64SetIp4Cidr

otError otNat64SetIp4Cidr(
  otInstance *aInstance,
  const otIp4Cidr *aCidr
)

设置在设置已转换的传出 IPv4 数据包的来源地址时使用的 CIDR。

仅当启用 OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 时可用。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aCidr
指向 NAT64 IPv4 CIDR 块的 otIp4Cidr 的指针。
返回值
OT_ERROR_INVALID_ARGS
给定的 CIDR 不是 NAT64 的有效 IPv4 CIDR。
OT_ERROR_NONE
成功为 NAT64 设置 CIDR。
另请参阅
otBorderRouterSend
otBorderRouterSetReceiveCallback

otNat64SetReceiveIp4Callback

void otNat64SetReceiveIp4Callback(
  otInstance *aInstance,
  otNat64ReceiveIp4Callback aCallback,
  void *aContext
)

注册一个回调,以提供收到的 IPv4 数据报。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aCallback
一个指针,指向在收到 IPv4 数据报时调用的函数,或者为 NULL 以停用回调函数。
[in] aContext
指向应用特定上下文的指针。

otNat64SynthesizeIp6Address

otError otNat64SynthesizeIp6Address(
  otInstance *aInstance,
  const otIp4Address *aIp4Address,
  otIp6Address *aIp6Address
)

通过从首选 NAT64 前缀和 RFC 6052 中指定的指定 IPv4 地址执行 NAT64 地址转换,设置 IPv6 地址。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aIp4Address
指向要转换为 IPv6 的 IPv4 地址的指针。
[out] aIp6Address
指向合成 IPv6 地址的指针。
返回值
OT_ERROR_NONE 根据 NAT64 前缀和 IPv4 地址成功合成 IPv6 地址。
返回值
OT_ERROR_INVALID_STATE 网络数据中没有有效的 NAT64 前缀。

OT_IP4_ADDRESS_SIZE

 OT_IP4_ADDRESS_SIZE 4

IPv4 地址的大小(字节)

OT_IP4_ADDRESS_STRING_SIZE

 OT_IP4_ADDRESS_STRING_SIZE 17

长度 000.000.000.000 加上后缀 NUL。

OT_IP4_CIDR_STRING_SIZE

 OT_IP4_CIDR_STRING_SIZE 20

长度 000.000.000.000/00 加上后缀 NUL。

资源

OpenThread API 参考文档源自 GitHub 上提供的源代码。如需了解详情,或者为我们的文档做贡献,请参阅资源