IPv6

此模块包含用于控制 IPv6 通信的功能。

摘要

枚举

anonymous enum{
  OT_IP6_PROTO_HOP_OPTS = 0,
  OT_IP6_PROTO_TCP = 6,
  OT_IP6_PROTO_UDP = 17,
  OT_IP6_PROTO_IP6 = 41,
  OT_IP6_PROTO_ROUTING = 43,
  OT_IP6_PROTO_FRAGMENT = 44,
  OT_IP6_PROTO_ICMP6 = 58,
  OT_IP6_PROTO_NONE = 59,
  OT_IP6_PROTO_DST_OPTS = 60
}
枚举
互联网协议编号。
anonymous enum{
  OT_ADDRESS_ORIGIN_THREAD = 0,
  OT_ADDRESS_ORIGIN_SLAAC = 1,
  OT_ADDRESS_ORIGIN_DHCPV6 = 2,
  OT_ADDRESS_ORIGIN_MANUAL = 3
}
枚举
IPv6 地址来源。
anonymous enum{
  OT_ECN_NOT_CAPABLE = 0x0,
  OT_ECN_CAPABLE_0 = 0x2,
  OT_ECN_CAPABLE_1 = 0x1,
  OT_ECN_MARKED = 0x3
}
枚举
ECN 状态,如 IP 标头中所示。

类型定义符

otBorderRoutingCounters typedef
表示通过边界路由转发的数据包的计数器。
otIp6Address typedef
struct otIp6Address
表示 IPv6 地址。
otIp6AddressCallback)(const otIp6AddressInfo *aAddressInfo, bool aIsAdded, void *aContext) typedef
void(*
添加或移除内部 IPv6 地址时,系统会调用指针。
otIp6AddressComponents typedef
表示 IPv6 地址的组成部分。
otIp6AddressInfo typedef
表示 IPv6 地址信息。
otIp6InterfaceIdentifier typedef
表示 IPv6 地址的接口标识符。
otIp6NetworkPrefix typedef
表示 IPv6 地址的网络前缀(地址的最高有效 64 位)。
otIp6Prefix typedef
struct otIp6Prefix
表示 IPv6 前缀。
otIp6ReceiveCallback)(otMessage *aMessage, void *aContext) typedef
void(*
收到 IPv6 数据报时调用指针。
otIp6RegisterMulticastListenersCallback)(void *aContext, otError aError, uint8_t aMlrStatus, const otIp6Address *aFailedAddresses, uint8_t aFailedAddressNum) typedef
void(*
系统会通过 otIp6RegisterMulticastListeners 的结果调用指针。
otIp6SlaacPrefixFilter)(otInstance *aInstance, const otIp6Prefix *aPrefix) typedef
bool(*
指针允许用户过滤前缀,不允许根据前缀添加 SLAAC 地址。
otMessageInfo typedef
struct otMessageInfo
表示本地和对等 IPv6 套接字地址。
otNetifAddress typedef
表示 IPv6 网络接口单播地址。
otNetifMulticastAddress typedef
表示 IPv6 网络接口多播地址。
otPacketsAndBytes typedef
表示数据包和字节的计数器。
otSockAddr typedef
struct otSockAddr
表示 IPv6 套接字地址。

变量

OT_TOOL_PACKED_END

函数

otIp6AddUnicastAddress(otInstance *aInstance, const otNetifAddress *aAddress)
向 Thread 接口添加网络接口地址。
otIp6AddUnsecurePort(otInstance *aInstance, uint16_t aPort)
向允许的不安全端口列表添加端口。
otIp6AddressFromString(const char *aString, otIp6Address *aAddress)
将人类可读的 IPv6 地址字符串转换为二进制表示形式。
otIp6AddressToString(const otIp6Address *aAddress, char *aBuffer, uint16_t aSize)
void
将指定的 IPv6 地址转换为直观易懂的字符串。
otIp6ArePrefixesEqual(const otIp6Prefix *aFirst, const otIp6Prefix *aSecond)
bool
测试两个 IPv6 前缀是否相同。
otIp6GetBorderRoutingCounters(otInstance *aInstance)
获取边界路由计数器。
otIp6GetMulticastAddresses(otInstance *aInstance)
获取已订阅 Thread 接口的 IPv6 多播地址列表。
otIp6GetPrefix(const otIp6Address *aAddress, uint8_t aLength, otIp6Prefix *aPrefix)
void
aAddress 获取带 aLength 的前缀。
otIp6GetUnicastAddresses(otInstance *aInstance)
const otNetifAddress *
获取分配给 Thread 接口的 IPv6 地址列表。
otIp6GetUnsecurePorts(otInstance *aInstance, uint8_t *aNumEntries)
const uint16_t *
返回指向不安全端口列表的指针。
otIp6HasUnicastAddress(otInstance *aInstance, const otIp6Address *aAddress)
bool
指示是否已将单播 IPv6 地址分配给 Thread 接口。
otIp6IsAddressEqual(const otIp6Address *aFirst, const otIp6Address *aSecond)
bool
测试两个 IPv6 地址是否相同。
otIp6IsAddressUnspecified(const otIp6Address *aAddress)
bool
指明给定的 IPv6 地址是否为“未指定的地址”。
otIp6IsEnabled(otInstance *aInstance)
bool
指示 IPv6 接口是否已启动。
otIp6IsMulticastPromiscuousEnabled(otInstance *aInstance)
bool
检查 Thread 接口上是否启用了多播混音模式。
otIp6IsReceiveFilterEnabled(otInstance *aInstance)
bool
指示在通过 otIp6SetReceiveCallback() 中指定的回调传送 IPv6 数据报时,系统是否会滤除线程控制流量。
otIp6IsSlaacEnabled(otInstance *aInstance)
bool
指明 SLAAC 模块是否已启用。
otIp6NewMessage(otInstance *aInstance, const otMessageSettings *aSettings)
为发送 IPv6 消息分配新的消息缓冲区。
otIp6NewMessageFromBuffer(otInstance *aInstance, const uint8_t *aData, uint16_t aDataLength, const otMessageSettings *aSettings)
分配新的消息缓冲区,并将 IPv6 数据报写入消息缓冲区,以便发送 IPv6 消息。
otIp6PrefixFromString(const char *aString, otIp6Prefix *aPrefix)
将人类可读的 IPv6 前缀字符串转换为二进制表示法。
otIp6PrefixMatch(const otIp6Address *aFirst, const otIp6Address *aSecond)
uint8_t
返回两个 IPv6 地址的前缀匹配长度(位)。
otIp6PrefixToString(const otIp6Prefix *aPrefix, char *aBuffer, uint16_t aSize)
void
将指定的 IPv6 前缀转换为直观易懂的字符串。
otIp6ProtoToString(uint8_t aIpProto)
const char *
将指定的 IP 协议编号转换为直观易懂的字符串。
otIp6RegisterMulticastListeners(otInstance *aInstance, const otIp6Address *aAddresses, uint8_t aAddressNum, const uint32_t *aTimeout, otIp6RegisterMulticastListenersCallback aCallback, void *aContext)
向主骨干路由器注册多播监听器。
otIp6RemoveAllUnsecurePorts(otInstance *aInstance)
void
从允许的不安全端口列表中移除所有端口。
otIp6RemoveUnicastAddress(otInstance *aInstance, const otIp6Address *aAddress)
从 Thread 接口中移除网络接口地址。
otIp6RemoveUnsecurePort(otInstance *aInstance, uint16_t aPort)
从允许的不安全端口列表中移除端口。
otIp6ResetBorderRoutingCounters(otInstance *aInstance)
void
重置边界路由计数器。
otIp6SelectSourceAddress(otInstance *aInstance, otMessageInfo *aMessageInfo)
执行 OpenThread 源地址选择。
otIp6Send(otInstance *aInstance, otMessage *aMessage)
通过 Thread 接口发送 IPv6 数据报。
otIp6SetAddressCallback(otInstance *aInstance, otIp6AddressCallback aCallback, void *aCallbackContext)
void
注册回调以通知内部 IPv6 地址更改。
otIp6SetEnabled(otInstance *aInstance, bool aEnabled)
打开或关闭 IPv6 接口。
otIp6SetMeshLocalIid(otInstance *aInstance, const otIp6InterfaceIdentifier *aIid)
设置网格本地 IID(用于测试)。
otIp6SetMulticastPromiscuousEnabled(otInstance *aInstance, bool aEnabled)
void
在 Thread 接口上启用或停用多播混音模式。
otIp6SetReceiveCallback(otInstance *aInstance, otIp6ReceiveCallback aCallback, void *aCallbackContext)
void
注册一个回调,以提供收到的 IPv6 数据报。
otIp6SetReceiveFilterEnabled(otInstance *aInstance, bool aEnabled)
void
设置在通过 otIp6SetReceiveCallback() 中指定的回调传送 IPv6 数据报时,是否过滤掉线程控制流量。
otIp6SetSlaacEnabled(otInstance *aInstance, bool aEnabled)
void
启用/停用 SLAAC 模块。
otIp6SetSlaacPrefixFilter(otInstance *aInstance, otIp6SlaacPrefixFilter aFilter)
void
设置 SLAAC 模块过滤器处理程序。
otIp6SockAddrToString(const otSockAddr *aSockAddr, char *aBuffer, uint16_t aSize)
void
将指定的 IPv6 套接字地址转换为人类可读的字符串。
otIp6SubscribeMulticastAddress(otInstance *aInstance, const otIp6Address *aAddress)
为 Thread 接口订阅网络接口多播地址。
otIp6UnsubscribeMulticastAddress(otInstance *aInstance, const otIp6Address *aAddress)
为 Thread 接口退订网络接口多播地址。

结构体

otBorderRoutingCounters

表示通过边界路由转发的数据包的计数器。

otIp6Address

表示 IPv6 地址。

otIp6AddressComponents

表示 IPv6 地址的组成部分。

otIp6AddressInfo

表示 IPv6 地址信息。

otIp6InterfaceIdentifier

表示 IPv6 地址的接口标识符。

otIp6NetworkPrefix

表示 IPv6 地址的网络前缀(地址的最高有效 64 位)。

otIp6Prefix

表示 IPv6 前缀。

otMessageInfo

表示本地和对等 IPv6 套接字地址。

otNetifAddress

表示 IPv6 网络接口单播地址。

otNetifMulticastAddress

表示 IPv6 网络接口多播地址。

otPacketsAndBytes

表示数据包和字节的计数器。

otSockAddr

表示 IPv6 套接字地址。

联合体

otIp6InterfaceIdentifier::OT_TOOL_PACKED_FIELD

枚举

匿名枚举

 anonymous enum

互联网协议编号。

属性
OT_IP6_PROTO_DST_OPTS

IPv6 的目标选项。

OT_IP6_PROTO_FRAGMENT

IPv6 的 fragment 标头。

OT_IP6_PROTO_HOP_OPTS

IPv6 逐跳选项。

OT_IP6_PROTO_ICMP6

适用于 IPv6 的 ICMP。

OT_IP6_PROTO_IP6

IPv6 封装。

OT_IP6_PROTO_NONE

没有 IPv6 的下一个标头。

OT_IP6_PROTO_ROUTING

IPv6 的路由标头。

OT_IP6_PROTO_TCP

传输控制协议。

OT_IP6_PROTO_UDP

用户数据报。

匿名枚举

 anonymous enum

IPv6 地址来源。

属性
OT_ADDRESS_ORIGIN_DHCPV6

为 DHCPv6 分配的地址。

OT_ADDRESS_ORIGIN_MANUAL

手动分配的地址。

OT_ADDRESS_ORIGIN_SLAAC

SLAAC 分配的地址。

OT_ADDRESS_ORIGIN_THREAD

会话串分配的地址(ALOC、RLOC、MLEID 等)

匿名枚举

 anonymous enum

ECN 状态,如 IP 标头中所示。

属性
OT_ECN_CAPABLE_0

ECT(0)

OT_ECN_CAPABLE_1

ECT(1)

OT_ECN_MARKED

发生拥塞 (CE)

OT_ECN_NOT_CAPABLE

非 ECT。

类型定义符

otBorderRoutingCounters

struct otBorderRoutingCounters otBorderRoutingCounters

表示通过边界路由转发的数据包的计数器。

otIp6Address

struct otIp6Address otIp6Address

表示 IPv6 地址。

otIp6AddressCallback

void(* otIp6AddressCallback)(const otIp6AddressInfo *aAddressInfo, bool aIsAdded, void *aContext)

添加或移除内部 IPv6 地址时,系统会调用指针。

具体说明
参数
[in] aAddressInfo
指向 IPv6 地址信息的指针。
[in] aIsAdded
如果添加了 aAddress,则为 TRUE,如果移除了 aAddress,则为 FALSE。
[in] aContext
指向应用特定上下文的指针。

otIp6AddressComponents

struct otIp6AddressComponents otIp6AddressComponents

表示 IPv6 地址的组成部分。

otIp6AddressInfo

struct otIp6AddressInfo otIp6AddressInfo

表示 IPv6 地址信息。

otIp6InterfaceIdentifier

struct otIp6InterfaceIdentifier otIp6InterfaceIdentifier

表示 IPv6 地址的接口标识符。

otIp6NetworkPrefix

struct otIp6NetworkPrefix otIp6NetworkPrefix

表示 IPv6 地址的网络前缀(地址的最高有效 64 位)。

otIp6Prefix

struct otIp6Prefix otIp6Prefix

表示 IPv6 前缀。

otIp6ReceiveCallback

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

收到 IPv6 数据报时调用指针。

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

otIp6RegisterMulticastListenersCallback

void(* otIp6RegisterMulticastListenersCallback)(void *aContext, otError aError, uint8_t aMlrStatus, const otIp6Address *aFailedAddresses, uint8_t aFailedAddressNum)

系统会通过 otIp6RegisterMulticastListeners 的结果调用指针。

具体说明
参数
[in] aContext
指向用户上下文的指针。
[in] aError
成功发送 MLR.req 和收到 MLR.rsp 时 OT_ERROR_NONE;接收 MLR.rsp 时收到 OT_ERROR_DESCRIPTION_TIMEOUT;解析 MLR.rsp 时返回 OT_ERROR_PARSE。
[in] aMlrStatus
aError 为 OT_ERROR_NONE 时的多播监听器注册状态。
[in] aFailedAddresses
aError 为 OT_ERROR_NONE 时,指向失败的 IPv6 地址的指针。
[in] aFailedAddressNum
aError 为 OT_ERROR_NONE 时失败的 IPv6 地址数量。
另请参阅
otIp6RegisterMulticastListeners

otIp6SlaacPrefixFilter

bool(* otIp6SlaacPrefixFilter)(otInstance *aInstance, const otIp6Prefix *aPrefix)

指针允许用户过滤前缀,不允许根据前缀添加 SLAAC 地址。

otIp6SetSlaacPrefixFilter() 可用于设置过滤器处理程序。当 SLAAC 模块即将根据前缀添加 SLAAC 地址时,它会调用过滤器处理程序。其布尔返回值决定了是否过滤(不添加)地址。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aPrefix
指向要添加 SLAAC 地址的前缀的指针。
返回值
TRUE
表示基于前缀的 SLAAC 地址应进行过滤,而不添加。
FALSE
表示应添加基于前缀的 SLAAC 地址。

otMessageInfo

struct otMessageInfo otMessageInfo

表示本地和对等 IPv6 套接字地址。

otNetifAddress

struct otNetifAddress otNetifAddress

表示 IPv6 网络接口单播地址。

otNetifMulticastAddress

struct otNetifMulticastAddress otNetifMulticastAddress

表示 IPv6 网络接口多播地址。

otPacketsAndBytes

struct otPacketsAndBytes otPacketsAndBytes

表示数据包和字节的计数器。

otSockAddr

struct otSockAddr otSockAddr

表示 IPv6 套接字地址。

变量

OT_TOOL_PACKED_END

OT_TOOL_PACKED_BEGIN struct otIp6InterfaceIdentifier OT_TOOL_PACKED_END

函数

otIp6AddUnicastAddress

otError otIp6AddUnicastAddress(
  otInstance *aInstance,
  const otNetifAddress *aAddress
)

向 Thread 接口添加网络接口地址。

Thread 接口复制了传入实例 aAddress。Thread 接口仅支持固定数量的外部添加的单播地址。请参阅OPENTHREAD_CONFIG_IP6_MAX_EXT_UCAST_ADDRS

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aAddress
指向网络接口地址的指针。
返回值
OT_ERROR_NONE
已成功添加(或更新)网络接口地址。
OT_ERROR_INVALID_ARGS
aAddress 表示的 IP 地址是内部地址。
OT_ERROR_NO_BUFS
网络接口存储的外部地址数量已达上限。

otIp6AddUnsecurePort

otError otIp6AddUnsecurePort(
  otInstance *aInstance,
  uint16_t aPort
)

向允许的不安全端口列表添加端口。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aPort
端口值。
返回值
OT_ERROR_NONE
此端口已成功添加到允许的不安全端口列表中。
OT_ERROR_INVALID_ARGS
端口无效(值 0 已预留供内部使用)。
OT_ERROR_NO_BUFS
不安全的端口列表已满。

otIp6AddressFromString

otError otIp6AddressFromString(
  const char *aString,
  otIp6Address *aAddress
)

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

具体说明
参数
[in] aString
指向以 NULL 终止的字符串的指针。
[out] aAddress
指向 IPv6 地址的指针。
返回值
OT_ERROR_NONE
已成功解析 aString 并更新了 aAddress
OT_ERROR_PARSE
未能将 aString 解析为 IPv6 地址。

otIp6AddressToString

void otIp6AddressToString(
  const otIp6Address *aAddress,
  char *aBuffer,
  uint16_t aSize
)

将指定的 IPv6 地址转换为直观易懂的字符串。

IPv6 地址字符串的格式为 16 个十六进制值,以“:”分隔(即"%x:%x:%x:...:%x").

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

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

otIp6ArePrefixesEqual

bool otIp6ArePrefixesEqual(
  const otIp6Prefix *aFirst,
  const otIp6Prefix *aSecond
)

测试两个 IPv6 前缀是否相同。

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

otIp6GetBorderRoutingCounters

const otBorderRoutingCounters * otIp6GetBorderRoutingCounters(
  otInstance *aInstance
)

获取边界路由计数器。

必须启用 OPENTHREAD_CONFIG_IP6_BR_COUNTERS_ENABLE 构建时功能。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
指向边界路由计数器的指针。

otIp6GetMulticastAddresses

const otNetifMulticastAddress * otIp6GetMulticastAddresses(
  otInstance *aInstance
)

获取已订阅 Thread 接口的 IPv6 多播地址列表。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
指向第一个网络接口多播地址的指针。

otIp6GetPrefix

void otIp6GetPrefix(
  const otIp6Address *aAddress,
  uint8_t aLength,
  otIp6Prefix *aPrefix
)

aAddress 获取带 aLength 的前缀。

具体说明
参数
[in] aAddress
指向 IPv6 地址的指针。
[in] aLength
前缀的长度(以位为单位)。
[out] aPrefix
用于输出 IPv6 前缀的指针。

otIp6GetUnicastAddresses

const otNetifAddress * otIp6GetUnicastAddresses(
  otInstance *aInstance
)

获取分配给 Thread 接口的 IPv6 地址列表。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
指向第一个网络接口地址的指针。

otIp6GetUnsecurePorts

const uint16_t * otIp6GetUnsecurePorts(
  otInstance *aInstance,
  uint8_t *aNumEntries
)

返回指向不安全端口列表的指针。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aNumEntries
列表中的条目数量。
返回值
指向不安全端口列表的指针。

otIp6HasUnicastAddress

bool otIp6HasUnicastAddress(
  otInstance *aInstance,
  const otIp6Address *aAddress
)

指示是否已将单播 IPv6 地址分配给 Thread 接口。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aAddress
指向单播地址的指针。
返回值
TRUE
如果为 Thread 接口分配了 aAddress
FALSE
如果 aAddress 未分配给 Thread 接口。

otIp6IsAddressEqual

bool otIp6IsAddressEqual(
  const otIp6Address *aFirst,
  const otIp6Address *aSecond
)

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

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

otIp6IsAddressUnspecified

bool otIp6IsAddressUnspecified(
  const otIp6Address *aAddress
)

指明给定的 IPv6 地址是否为“未指定的地址”。

具体说明
参数
[in] aAddress
指向 IPv6 地址的指针。
返回值
TRUE
IPv6 地址是“未指定的地址”。
FALSE
IPv6 地址不是“未指定的地址”。

otIp6IsEnabled

bool otIp6IsEnabled(
  otInstance *aInstance
)

指示 IPv6 接口是否已启动。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
TRUE
IPv6 接口已启用。
FALSE
IPv6 接口已停用。

otIp6IsMulticastPromiscuousEnabled

bool otIp6IsMulticastPromiscuousEnabled(
  otInstance *aInstance
)

检查 Thread 接口上是否启用了多播混音模式。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
另请参阅
otIp6SetMulticastPromiscuousEnabled

otIp6IsReceiveFilterEnabled

bool otIp6IsReceiveFilterEnabled(
  otInstance *aInstance
)

指示在通过 otIp6SetReceiveCallback() 中指定的回调传送 IPv6 数据报时,系统是否会滤除线程控制流量。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
如果过滤掉线程控制流量,则为 TRUE,否则为 FALSE。
另请参阅
otIp6SetReceiveCallback
otIp6SetReceiveFilterEnabled

otIp6IsSlaacEnabled

bool otIp6IsSlaacEnabled(
  otInstance *aInstance
)

指明 SLAAC 模块是否已启用。

必须启用 OPENTHREAD_CONFIG_IP6_SLAAC_ENABLE 构建时功能。

具体说明
返回值
TRUE
已启用 SLAAC 模块。
FALSE
SLAAC 模块已停用。

otIp6NewMessage

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

为发送 IPv6 消息分配新的消息缓冲区。

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

otIp6NewMessageFromBuffer

otMessage * otIp6NewMessageFromBuffer(
  otInstance *aInstance,
  const uint8_t *aData,
  uint16_t aDataLength,
  const otMessageSettings *aSettings
)

分配新的消息缓冲区,并将 IPv6 数据报写入消息缓冲区,以便发送 IPv6 消息。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aData
指向 IPv6 数据报缓冲区的指针。
[in] aDataLength
aData 指向的 IPv6 数据报缓冲区的大小。
[in] aSettings
指向邮件设置的指针,或用于设置默认设置的 NULL。
返回值
指向消息的指针,如果 IPv6 标头格式错误或消息缓冲区不足,则为 NULL。
另请参阅
otMessageFree

otIp6PrefixFromString

otError otIp6PrefixFromString(
  const char *aString,
  otIp6Prefix *aPrefix
)

将人类可读的 IPv6 前缀字符串转换为二进制表示法。

aString 参数应为格式为“

/”,其中
是 IPv6 地址, 是前缀长度。

具体说明
参数
[in] aString
指向以 NULL 终止的字符串的指针。
[out] aPrefix
指向 IPv6 前缀的指针。
返回值
OT_ERROR_NONE
已成功将字符串解析为 IPv6 前缀并更新了 aPrefix
OT_ERROR_PARSE
未能将 aString 解析为 IPv6 前缀。

otIp6PrefixMatch

uint8_t otIp6PrefixMatch(
  const otIp6Address *aFirst,
  const otIp6Address *aSecond
)

返回两个 IPv6 地址的前缀匹配长度(位)。

具体说明
参数
[in] aFirst
指向第一个 IPv6 地址的指针。
[in] aSecond
指向第二个 IPv6 地址的指针。
返回值
前缀匹配长度(以位为单位)。

otIp6PrefixToString

void otIp6PrefixToString(
  const otIp6Prefix *aPrefix,
  char *aBuffer,
  uint16_t aSize
)

将指定的 IPv6 前缀转换为直观易懂的字符串。

IPv6 地址字符串的格式为“%x:%x:%x:...[::]/plen”。

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

具体说明
参数
[in] aPrefix
指向 IPv6 前缀的指针(不得为 NULL)。
[out] aBuffer
指向用于输出字符串的字符数组的指针(不得为 NULL)。
[in] aSize
aBuffer 的大小(以字节为单位)。建议使用 OT_IP6_PREFIX_STRING_SIZE

otIp6ProtoToString

const char * otIp6ProtoToString(
  uint8_t aIpProto
)

将指定的 IP 协议编号转换为直观易懂的字符串。

具体说明
参数
[in] aIpProto
IP 协议编号(OT_IP6_PROTO_* 枚举)。
返回值
一个表示 aIpProto 的字符串。

otIp6RegisterMulticastListeners

otError otIp6RegisterMulticastListeners(
  otInstance *aInstance,
  const otIp6Address *aAddresses,
  uint8_t aAddressNum,
  const uint32_t *aTimeout,
  otIp6RegisterMulticastListenersCallback aCallback,
  void *aContext
)

向主骨干路由器注册多播监听器。

必须启用 OPENTHREAD_CONFIG_TMF_PROXY_MLR_ENABLEOPENTHREAD_CONFIG_COMMISSIONER_ENABLE

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aAddresses
要注册的多播地址数组。
[in] aAddressNum
要注册的多播地址数量(如果 aAddresses 为 NULL,则为 0)。
[in] aTimeout
指向 MLR.req 中包含的超时值(以秒为单位)的指针。超时值为 0 会移除相应的多播监听器。如果为 NULL,则默认情况下,MLR.req 没有超时 Tlv。
[in] aCallback
指向回调函数的指针。
[in] aContext
指向用户上下文的指针。
返回值
OT_ERROR_NONE
已成功发送 MLR.req. 如果此方法返回 OT_ERROR_NONE,则会调用 aCallback
OT_ERROR_BUSY
之前的注册是否正在进行。
OT_ERROR_INVALID_ARGS
一个或多个参数无效。
OT_ERROR_INVALID_STATE
如果设备未处于发送 MLR.req 的有效状态(例如,调试器未启动,找不到主骨干路由器)。
OT_ERROR_NO_BUFS
如果消息缓冲区不足。
另请参阅
otIp6RegisterMulticastListenersCallback

otIp6RemoveAllUnsecurePorts

void otIp6RemoveAllUnsecurePorts(
  otInstance *aInstance
)

从允许的不安全端口列表中移除所有端口。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。

otIp6RemoveUnicastAddress

otError otIp6RemoveUnicastAddress(
  otInstance *aInstance,
  const otIp6Address *aAddress
)

从 Thread 接口中移除网络接口地址。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aAddress
指向 IP 地址的指针。
返回值
OT_ERROR_NONE
已成功移除网络接口地址。
OT_ERROR_INVALID_ARGS
aAddress 表示的 IP 地址是内部地址。
OT_ERROR_NOT_FOUND
找不到 aAddress 表示的 IP 地址。

otIp6RemoveUnsecurePort

otError otIp6RemoveUnsecurePort(
  otInstance *aInstance,
  uint16_t aPort
)

从允许的不安全端口列表中移除端口。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aPort
端口值。
返回值
OT_ERROR_NONE
已成功将该端口从允许的不安全端口列表中移除。
OT_ERROR_INVALID_ARGS
端口无效(值 0 已预留供内部使用)。
OT_ERROR_NOT_FOUND
未在不安全的端口列表中找到该端口。

otIp6ResetBorderRoutingCounters

void otIp6ResetBorderRoutingCounters(
  otInstance *aInstance
)

重置边界路由计数器。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。

otIp6SelectSourceAddress

otError otIp6SelectSourceAddress(
  otInstance *aInstance,
  otMessageInfo *aMessageInfo
)

执行 OpenThread 源地址选择。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in,out] aMessageInfo
指向消息信息的指针。
返回值
OT_ERROR_NONE
找到了一个源地址,并将其填充到 aMessageInfo 的 mSockAddr 中。
OT_ERROR_NOT_FOUND
未找到来源地址,并且 aMessageInfo 保持不变。

otIp6Send

otError otIp6Send(
  otInstance *aInstance,
  otMessage *aMessage
)

通过 Thread 接口发送 IPv6 数据报。

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

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

otIp6SetAddressCallback

void otIp6SetAddressCallback(
  otInstance *aInstance,
  otIp6AddressCallback aCallback,
  void *aCallbackContext
)

注册回调以通知内部 IPv6 地址更改。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aCallback
指向添加或移除内部 IPv6 地址时调用的函数的指针。NULL,以停用回调。
[in] aCallbackContext
指向应用特定上下文的指针。

otIp6SetEnabled

otError otIp6SetEnabled(
  otInstance *aInstance,
  bool aEnabled
)

打开或关闭 IPv6 接口。

调用此方法可以启用或停用 IPv6 通信。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
如果启用 IPv6,则为 TRUE,否则为 FALSE。
返回值
OT_ERROR_NONE
成功启用/停用 IPv6 接口。
OT_ERROR_INVALID_STATE
由于设备以原始链接模式运行(仅适用于启用了 OPENTHREAD_CONFIG_LINK_RAW_ENABLE 功能时),因此 IPv6 接口不可用。

otIp6SetMeshLocalIid

otError otIp6SetMeshLocalIid(
  otInstance *aInstance,
  const otIp6InterfaceIdentifier *aIid
)

设置网格本地 IID(用于测试)。

需要 OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aIid
指向要设置的网格本地 IID 的指针。
返回值
OT_ERROR_NONE
成功设置网格本地 IID。
OT_ERROR_INVALID_STATE
已启用线程协议。

otIp6SetMulticastPromiscuousEnabled

void otIp6SetMulticastPromiscuousEnabled(
  otInstance *aInstance,
  bool aEnabled
)

在 Thread 接口上启用或停用多播混音模式。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
为 TRUE 启用多播混播模式,否则为 FALSE。
另请参阅
otIp6IsMulticastPromiscuousEnabled

otIp6SetReceiveCallback

void otIp6SetReceiveCallback(
  otInstance *aInstance,
  otIp6ReceiveCallback aCallback,
  void *aCallbackContext
)

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

默认情况下,此回调不会传递线程控制流量。如需更改线程控制流量过滤器设置,请参阅 otIp6SetReceiveFilterEnabled()

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

otIp6SetReceiveFilterEnabled

void otIp6SetReceiveFilterEnabled(
  otInstance *aInstance,
  bool aEnabled
)

设置在通过 otIp6SetReceiveCallback() 中指定的回调传送 IPv6 数据报时,是否过滤掉线程控制流量。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
如果过滤掉线程控制流量,则为 TRUE,否则为 FALSE。
另请参阅
otIp6SetReceiveCallback
otIsReceiveIp6FilterEnabled

otIp6SetSlaacEnabled

void otIp6SetSlaacEnabled(
  otInstance *aInstance,
  bool aEnabled
)

启用/停用 SLAAC 模块。

必须启用 OPENTHREAD_CONFIG_IP6_SLAAC_ENABLE 构建时功能。

启用 SLAAC 模块后,SLAAC 地址(基于网络数据中的网状前缀)会添加到接口。停用 SLAAC 模块后,系统会移除之前添加的所有 SLAAC 地址。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
为 TRUE 时启用,为 FALSE 以停用。

otIp6SetSlaacPrefixFilter

void otIp6SetSlaacPrefixFilter(
  otInstance *aInstance,
  otIp6SlaacPrefixFilter aFilter
)

设置 SLAAC 模块过滤器处理程序。

必须启用 OPENTHREAD_CONFIG_IP6_SLAAC_ENABLE 构建时功能。

当 SLAAC 模块即将根据前缀添加 SLAAC 地址来确定是否应添加地址时,它会调用过滤器处理程序。

NULL 过滤器处理程序会停用过滤,并允许添加所有 SLAAC 地址。

如果未调用此函数,则 SLAAC 模块使用的默认过滤器将为 NULL(过滤功能已停用)。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aFilter
指向 SLAAC 前缀过滤器处理程序的指针,或为 NULL 以停用过滤。

otIp6SockAddrToString

void otIp6SockAddrToString(
  const otSockAddr *aSockAddr,
  char *aBuffer,
  uint16_t aSize
)

将指定的 IPv6 套接字地址转换为人类可读的字符串。

IPv6 套接字地址字符串的格式为 [address]:port,其中 address 显示为由 : 分隔的 16 个十六进制值,port 是十进制格式的端口号,例如“[%x:%x:...:%x]:%u”。

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

具体说明
参数
[in] aSockAddr
指向 IPv6 套接字地址的指针(不得为 NULL)。
[out] aBuffer
指向用于输出字符串的字符数组的指针(不得为 NULL)。
[in] aSize
aBuffer 的大小(以字节为单位)。建议使用 OT_IP6_SOCK_ADDR_STRING_SIZE

otIp6SubscribeMulticastAddress

otError otIp6SubscribeMulticastAddress(
  otInstance *aInstance,
  const otIp6Address *aAddress
)

为 Thread 接口订阅网络接口多播地址。

Thread 接口会复制传入的实例 aAddress。Thread 接口仅支持固定数量的外部添加的多播地址。请参阅OPENTHREAD_CONFIG_IP6_MAX_EXT_MCAST_ADDRS

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aAddress
指向 IP 地址的指针。
返回值
OT_ERROR_NONE
已成功订阅网络接口多播地址。
OT_ERROR_ALREADY
该多播地址已经订阅。
OT_ERROR_INVALID_ARGS
aAddress 指示的 IP 地址是无效的多播地址。
OT_ERROR_REJECTED
aAddress 指示的 IP 地址是内部多播地址。
OT_ERROR_NO_BUFS
网络接口存储的外部多播地址数量已达到上限。

otIp6UnsubscribeMulticastAddress

otError otIp6UnsubscribeMulticastAddress(
  otInstance *aInstance,
  const otIp6Address *aAddress
)

为 Thread 接口退订网络接口多播地址。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aAddress
指向 IP 地址的指针。
返回值
OT_ERROR_NONE
已成功退订网络接口多播地址。
OT_ERROR_REJECTED
aAddress 表示的 IP 地址是内部地址。
OT_ERROR_NOT_FOUND
找不到 aAddress 表示的 IP 地址。

OT_IP6_ADDRESS_SIZE

 OT_IP6_ADDRESS_SIZE 16

IPv6 地址的大小(字节)

OT_IP6_ADDRESS_STRING_SIZE

 OT_IP6_ADDRESS_STRING_SIZE 40

建议的 IPv6 地址字符串表示大小。

OT_IP6_HEADER_PROTO_OFFSET

 OT_IP6_HEADER_PROTO_OFFSET 6

IPv6 标头中 proto 字段的偏移量(字节)

OT_IP6_HEADER_SIZE

 OT_IP6_HEADER_SIZE 40

IPv6 标头大小(字节)

OT_IP6_IID_SIZE

 OT_IP6_IID_SIZE 8

IPv6 接口标识符的大小(字节)

OT_IP6_MAX_MLR_ADDRESSES

 OT_IP6_MAX_MLR_ADDRESSES 15

多播监听器注册支持的 IPv6 地址数量上限。

OT_IP6_PREFIX_BITSIZE

 OT_IP6_PREFIX_BITSIZE (OT_IP6_PREFIX_SIZE * 8)

IPv6 前缀的大小(位)

OT_IP6_PREFIX_SIZE

 OT_IP6_PREFIX_SIZE 8

IPv6 前缀的大小(字节)

OT_IP6_PREFIX_STRING_SIZE

 OT_IP6_PREFIX_STRING_SIZE 45

IPv6 前缀的字符串表示形式的建议大小。

OT_IP6_SOCK_ADDR_STRING_SIZE

 OT_IP6_SOCK_ADDR_STRING_SIZE 48

IPv6 套接字地址的字符串表示形式的建议大小。

资源

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