边界路由管理器

本单元包含与边界路由管理器相关的定义。

摘要

此模块中的所有函数都需要启用 OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE

边界路由管理器负责处理 Thread 网络和相邻基础架构链路 (AIL) 之间的双向路由。

它会在 AIL 上发出 ICMRv6 ND 路由器通告 (RA) 消息,以通告链路和路由前缀。它还会处理来自基础架构的 RA 消息,并对在 Thread 网络数据上发现的前缀进行镜像,以确保 Thread 网状网中的设备可以通过 Border Router 路由器访问 AIL。

路由管理器管理 Thread Network 数据上的 Off-Mesh Routable (OMR) 前缀,从而为 Thread 设备配置合适的离网可路由 IPv6 地址。它通过以 IPv6 路由信息选项 (RIO) 的形式将其包含在发出的 RA 消息中,来在 AIL 中声明该前缀的可达性。

路由管理器还会监控基础架构网络上并添加链路前缀。如果 AIL 上的路由器已在提供包含 IPv6 前缀信息选项 (PIO) 的 RA 消息,使链路上的 IPv6 设备能够自行配置自己的可路由单播 IPv6 地址,则 Thread 设备可以使用此地址连接到 AIL。如果边界路由器在 AIL 上找不到此类 RA 消息,则会生成 ULA 链路前缀,然后在发出的 RA 消息中通过 AIL 通告该前缀。

枚举

otBorderRoutingDhcp6PdState{
  OT_BORDER_ROUTING_DHCP6_PD_STATE_DISABLED,
  OT_BORDER_ROUTING_DHCP6_PD_STATE_STOPPED,
  OT_BORDER_ROUTING_DHCP6_PD_STATE_RUNNING
}
枚举
此枚举表示 DHCPv6 前缀委派状态的状态。
otBorderRoutingState{
  OT_BORDER_ROUTING_STATE_UNINITIALIZED,
  OT_BORDER_ROUTING_STATE_DISABLED,
  OT_BORDER_ROUTING_STATE_STOPPED,
  OT_BORDER_ROUTING_STATE_RUNNING
}
枚举
表示边界路由管理器的状态。

类型定义符

otBorderRoutingPrefixTableEntry typedef
表示已发现的前缀表中的条目。
otBorderRoutingPrefixTableIterator typedef
表示用于遍历边界路由器发现的前缀表的迭代器。
otBorderRoutingRouterEntry typedef
表示在基础架构链路上发现的路由器。
otPdProcessedRaInfo typedef
表示由平台生成且已处理的一组 RA 消息数据。

函数

otBorderRoutingClearRouteInfoOptionPreference(otInstance *aInstance)
void
清除之前为通告的路由信息选项设置的偏好设置值。
otBorderRoutingClearRoutePreference(otInstance *aInstance)
void
清除网络数据中之前为已发布路由设置的偏好设置值。
otBorderRoutingDhcp6PdGetState(otInstance *aInstance)
获取 DHCPv6 前缀委派的当前状态。
otBorderRoutingDhcp6PdSetEnabled(otInstance *aInstance, bool aEnabled)
void
启用 / 停用 DHCPv6 前缀委派。
otBorderRoutingGetFavoredNat64Prefix(otInstance *aInstance, otIp6Prefix *aPrefix, otRoutePreference *aPreference)
获取当前首选的 NAT64 前缀。
otBorderRoutingGetFavoredOmrPrefix(otInstance *aInstance, otIp6Prefix *aPrefix, otRoutePreference *aPreference)
获取当前青睐的 Off-Mesh-Routable (OMR) 前缀。
otBorderRoutingGetFavoredOnLinkPrefix(otInstance *aInstance, otIp6Prefix *aPrefix)
获取当前首选的 On-Link 前缀。
otBorderRoutingGetNat64Prefix(otInstance *aInstance, otIp6Prefix *aPrefix)
获取边界路由器的本地 NAT64 前缀。
otBorderRoutingGetNextPrefixTableEntry(otInstance *aInstance, otBorderRoutingPrefixTableIterator *aIterator, otBorderRoutingPrefixTableEntry *aEntry)
遍历边界路由器发现的前缀表中的条目。
otBorderRoutingGetNextRouterEntry(otInstance *aInstance, otBorderRoutingPrefixTableIterator *aIterator, otBorderRoutingRouterEntry *aEntry)
遍历在基础架构链路上发现的路由器条目。
otBorderRoutingGetOmrPrefix(otInstance *aInstance, otIp6Prefix *aPrefix)
获取本地 Off-Mesh-Routable (OMR) 前缀,例如 fdfc:1ff5:1512:5622::/64
otBorderRoutingGetOnLinkPrefix(otInstance *aInstance, otIp6Prefix *aPrefix)
获取相邻基础架构链路的本地 On-Link 前缀。
otBorderRoutingGetPdOmrPrefix(otInstance *aInstance, otBorderRoutingPrefixTableEntry *aPrefixInfo)
获取 DHCPv6 前缀委派 (PD) 提供的网外路由 (OMR) 前缀。
otBorderRoutingGetPdProcessedRaInfo(otInstance *aInstance, otPdProcessedRaInfo *aPdProcessedRaInfo)
获取平台生成的 RA 消息已处理的数据。
otBorderRoutingGetRouteInfoOptionPreference(otInstance *aInstance)
获取在通过基础架构链接发送的路由器通告消息中通告路由信息选项 (RIO) 时使用的当前偏好设置。
otBorderRoutingGetRoutePreference(otInstance *aInstance)
获取用于网络数据中已发布路由的当前偏好设置。
otBorderRoutingGetState(otInstance *aInstance)
获取边界路由管理器的当前状态。
otBorderRoutingInit(otInstance *aInstance, uint32_t aInfraIfIndex, bool aInfraIfIsRunning)
在给定基础架构接口上初始化边界路由管理器。
otBorderRoutingPrefixTableInitIterator(otInstance *aInstance, otBorderRoutingPrefixTableIterator *aIterator)
void
otBorderRoutingSetEnabled(otInstance *aInstance, bool aEnabled)
启用或停用边界路由管理器。
otBorderRoutingSetRouteInfoOptionPreference(otInstance *aInstance, otRoutePreference aPreference)
void
明确设置在通过基础架构链路发送的路由器通告消息中通告路由信息选项 (RIO) 时使用的偏好设置。
otBorderRoutingSetRoutePreference(otInstance *aInstance, otRoutePreference aPreference)
void
明确设置网络数据中已发布路由的偏好设置。

结构体

otBorderRoutingPrefixTableEntry

表示已发现的前缀表中的条目。

otBorderRoutingPrefixTableIterator

表示用于遍历边界路由器发现的前缀表的迭代器。

otBorderRoutingRouterEntry

表示在基础架构链路上发现的路由器。

otPdProcessedRaInfo

表示由平台生成且已处理的一组 RA 消息数据。

枚举

otBorderRoutingDhcp6PdState

 otBorderRoutingDhcp6PdState

此枚举表示 DHCPv6 前缀委派状态的状态。

属性
OT_BORDER_ROUTING_DHCP6_PD_STATE_DISABLED

边界路由器上的 DHCPv6 PD 已停用。

OT_BORDER_ROUTING_DHCP6_PD_STATE_RUNNING

DHCPv6 永久性磁盘已启用,并将尝试请求并发布前缀。

OT_BORDER_ROUTING_DHCP6_PD_STATE_STOPPED

已启用 DHCPv6 永久性磁盘,但不会尝试请求和发布前缀。

otBorderRoutingState

 otBorderRoutingState

表示边界路由管理器的状态。

属性
OT_BORDER_ROUTING_STATE_DISABLED

路由管理器已初始化但已停用。

OT_BORDER_ROUTING_STATE_RUNNING

路由管理器已初始化、启用并运行。

OT_BORDER_ROUTING_STATE_STOPPED

路由管理器已初始化且已启用,但当前已停止。

OT_BORDER_ROUTING_STATE_UNINITIALIZED

路由管理器未初始化。

类型定义符

otBorderRoutingPrefixTableEntry

struct otBorderRoutingPrefixTableEntry otBorderRoutingPrefixTableEntry

表示已发现的前缀表中的条目。

发现表中的条目会跟踪从基础架构链路上其他路由器收到的路由器通告消息中的前缀/路由信息选项。

otBorderRoutingPrefixTableIterator

struct otBorderRoutingPrefixTableIterator otBorderRoutingPrefixTableIterator

表示用于遍历边界路由器发现的前缀表的迭代器。

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

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

otBorderRoutingRouterEntry

struct otBorderRoutingRouterEntry otBorderRoutingRouterEntry

表示在基础架构链路上发现的路由器。

otPdProcessedRaInfo

struct otPdProcessedRaInfo otPdProcessedRaInfo

表示由平台生成且已处理的一组 RA 消息数据。

函数

otBorderRoutingClearRouteInfoOptionPreference

void otBorderRoutingClearRouteInfoOptionPreference(
  otInstance *aInstance
)

清除之前为通告的路由信息选项设置的偏好设置值。

调用此函数后,BR 将使用设备的角色来确定 RIO 偏好设置:在处于路由器/领导者角色时优先级为“中”;在子角色中,优先级为“低”。

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

otBorderRoutingClearRoutePreference

void otBorderRoutingClearRoutePreference(
  otInstance *aInstance
)

清除网络数据中之前为已发布路由设置的偏好设置值。

调用此函数后,BR 将根据设备的角色和链接质量(在充当最终设备时,向父级)自动确定偏好设置。

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

otBorderRoutingDhcp6PdGetState

otBorderRoutingDhcp6PdState otBorderRoutingDhcp6PdGetState(
  otInstance *aInstance
)

获取 DHCPv6 前缀委派的当前状态。

需要启用 OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
DHCPv6 前缀委派的当前状态。

otBorderRoutingDhcp6PdSetEnabled

void otBorderRoutingDhcp6PdSetEnabled(
  otInstance *aInstance,
  bool aEnabled
)

启用 / 停用 DHCPv6 前缀委派。

必须启用“OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE”。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
是否接受平台生成的 RA 消息。

otBorderRoutingGetFavoredNat64Prefix

otError otBorderRoutingGetFavoredNat64Prefix(
  otInstance *aInstance,
  otIp6Prefix *aPrefix,
  otRoutePreference *aPreference
)

获取当前首选的 NAT64 前缀。

首选的 NAT64 前缀可以从基础架构链接中发现,也可以是此设备的本地 NAT64 前缀。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aPrefix
用于输出首选 NAT64 前缀的指针。
[out] aPreference
用于输出与喜爱的前缀相关联的偏好设置的指针。
返回值
OT_ERROR_INVALID_STATE
边界路由管理器尚未初始化。
OT_ERROR_NONE
成功检索到了首选的 NAT64 前缀。

otBorderRoutingGetFavoredOmrPrefix

otError otBorderRoutingGetFavoredOmrPrefix(
  otInstance *aInstance,
  otIp6Prefix *aPrefix,
  otRoutePreference *aPreference
)

获取当前青睐的 Off-Mesh-Routable (OMR) 前缀。

可从网络数据中发现首选 OMR 前缀,也可以使用此设备的本地 OMR 前缀。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aPrefix
用于输出喜爱的 OMR 前缀的指针。
[out] aPreference
用于输出与喜爱的前缀相关联的偏好设置的指针。
返回值
OT_ERROR_INVALID_STATE
边界路由管理器尚未运行。
OT_ERROR_NONE
已成功检索到喜爱的 OMR 前缀。

otBorderRoutingGetFavoredOnLinkPrefix

otError otBorderRoutingGetFavoredOnLinkPrefix(
  otInstance *aInstance,
  otIp6Prefix *aPrefix
)

获取当前首选的 On-Link 前缀。

首选前缀是基础架构链路上发现的链路前缀或本地链路前缀。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aPrefix
指向将输出前缀的位置的指针。
返回值
OT_ERROR_INVALID_STATE
边界路由管理器尚未初始化。
OT_ERROR_NONE
成功检索到了首选的链路前缀。

otBorderRoutingGetNat64Prefix

otError otBorderRoutingGetNat64Prefix(
  otInstance *aInstance,
  otIp6Prefix *aPrefix
)

获取边界路由器的本地 NAT64 前缀。

NAT64 前缀可能不会在 Thread 网络中通告。

必须启用“OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE”。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aPrefix
指向将输出前缀的位置的指针。
返回值
OT_ERROR_INVALID_STATE
边界路由管理器尚未初始化。
OT_ERROR_NONE
已成功检索到 NAT64 前缀。

otBorderRoutingGetNextPrefixTableEntry

otError otBorderRoutingGetNextPrefixTableEntry(
  otInstance *aInstance,
  otBorderRoutingPrefixTableIterator *aIterator,
  otBorderRoutingPrefixTableEntry *aEntry
)

遍历边界路由器发现的前缀表中的条目。

与在基础架构链路上发现的同一路由器相关联的前缀条目一定会组合在一起(连续检索)。

具体说明
参数
[in] aInstance
OpenThread 实例。
[in,out] aIterator
指向迭代器的指针。
[out] aEntry
指向要填充的条目的指针。
返回值
OT_ERROR_NONE
迭代到下一个条目,aEntryaIterator 会更新。
OT_ERROR_NOT_FOUND
表格中没有其他条目。

otBorderRoutingGetNextRouterEntry

otError otBorderRoutingGetNextRouterEntry(
  otInstance *aInstance,
  otBorderRoutingPrefixTableIterator *aIterator,
  otBorderRoutingRouterEntry *aEntry
)

遍历在基础架构链路上发现的路由器条目。

具体说明
参数
[in] aInstance
OpenThread 实例。
[in,out] aIterator
指向迭代器的指针。
[out] aEntry
指向要填充的条目的指针。
返回值
OT_ERROR_NONE
迭代到下一个路由器,aEntryaIterator 会更新。
OT_ERROR_NOT_FOUND
没有更多路由器条目。

otBorderRoutingGetOmrPrefix

otError otBorderRoutingGetOmrPrefix(
  otInstance *aInstance,
  otIp6Prefix *aPrefix
)

获取本地 Off-Mesh-Routable (OMR) 前缀,例如 fdfc:1ff5:1512:5622::/64

OMR 前缀是随机生成的 64 位前缀,如果还没有 OMR 前缀,则会在 Thread 网络中发布。可通过本地 Wi-Fi 或以太网网络访问此前缀。

注意:启用 DHCPv6 永久性磁盘后,边界路由器可能会发布 DHCPv6 永久性磁盘的前缀。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aPrefix
指向将输出前缀的位置的指针。
返回值
OT_ERROR_INVALID_STATE
边界路由管理器尚未初始化。
OT_ERROR_NONE
已成功检索到 OMR 前缀。
另请参阅
otBorderRoutingGetPdOmrPrefix

otBorderRoutingGetOnLinkPrefix

otError otBorderRoutingGetOnLinkPrefix(
  otInstance *aInstance,
  otIp6Prefix *aPrefix
)

获取相邻基础架构链路的本地 On-Link 前缀。

本地链路前缀是 64 位的前缀,如果链路上还没有可用的链路前缀,则会通告该链路。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aPrefix
指向将输出前缀的位置的指针。
返回值
OT_ERROR_INVALID_STATE
边界路由管理器尚未初始化。
OT_ERROR_NONE
成功检索了本地链接前缀。

otBorderRoutingGetPdOmrPrefix

otError otBorderRoutingGetPdOmrPrefix(
  otInstance *aInstance,
  otBorderRoutingPrefixTableEntry *aPrefixInfo
)

获取 DHCPv6 前缀委派 (PD) 提供的网外路由 (OMR) 前缀。

返回的前缀信息中仅使用 mPrefix、mValidLifetime 和 mPreferredLifetime 字段。

必须启用“OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE”。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aPrefixInfo
指向将输出前缀信息的位置的指针。
返回值
OT_ERROR_NONE
已成功检索到 OMR 前缀。
OT_ERROR_INVALID_STATE
边界路由管理器尚未初始化。
OT_ERROR_NOT_FOUND
此 BR 上没有有效的 PD 前缀。
另请参阅
otBorderRoutingGetOmrPrefix
otPlatBorderRoutingProcessIcmp6Ra

otBorderRoutingGetPdProcessedRaInfo

otError otBorderRoutingGetPdProcessedRaInfo(
  otInstance *aInstance,
  otPdProcessedRaInfo *aPdProcessedRaInfo
)

获取平台生成的 RA 消息已处理的数据。

必须启用“OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE”。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[out] aPrefixInfo
指向将输出前缀信息的位置的指针。
返回值
OT_ERROR_NONE
已成功检索到信息。
OT_ERROR_INVALID_STATE
边界路由管理器尚未初始化。
OT_ERROR_NOT_FOUND
此 BR 上没有有效信息。

otBorderRoutingGetRouteInfoOptionPreference

otRoutePreference otBorderRoutingGetRouteInfoOptionPreference(
  otInstance *aInstance
)

获取在通过基础架构链接发送的路由器通告消息中通告路由信息选项 (RIO) 时使用的当前偏好设置。

RIO 首选项按如下方式确定:

  • 如果用户通过调用 otBorderRoutingSetRouteInfoOptionPreference() 进行显式设置,系统将使用给定的偏好设置。
  • 否则,系统会根据设备的当前角色来确定:当处于路由器/领导者角色时,优先级为中等;当处于子角色时,优先级较低。

具体说明
返回值
当前的路线信息选项偏好设置。

otBorderRoutingGetRoutePreference

otRoutePreference otBorderRoutingGetRoutePreference(
  otInstance *aInstance
)

获取用于网络数据中已发布路由的当前偏好设置。

优先权根据如下方式确定:

  • 如果用户通过调用 otBorderRoutingSetRoutePreference() 进行显式设置,系统将使用给定的偏好设置。
  • 否则,由 RoutingManager 根据设备的角色和链接质量自动确定。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
当前已发布路线偏好设置。

otBorderRoutingGetState

otBorderRoutingState otBorderRoutingGetState(
  otInstance *aInstance
)

获取边界路由管理器的当前状态。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
返回值
边界路由管理器的当前状态。

otBorderRoutingInit

otError otBorderRoutingInit(
  otInstance *aInstance,
  uint32_t aInfraIfIndex,
  bool aInfraIfIsRunning
)

在给定基础架构接口上初始化边界路由管理器。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aInfraIfIndex
基础架构接口索引。
[in] aInfraIfIsRunning
指示基础架构接口是否正在运行的布尔值。
返回值
OT_ERROR_NONE
在给定基础架构上成功启动边界路由管理器。
OT_ERROR_INVALID_STATE
边界路由管理器处于已停用或未初始化状态以外的状态。
OT_ERROR_INVALID_ARGS
基础架构接口的索引无效。
OT_ERROR_FAILED
内部故障。通常是因为未能生成随机前缀。
另请参阅
otPlatInfraIfStateChanged
otBorderRoutingSetEnabled

otBorderRoutingPrefixTableInitIterator

void otBorderRoutingPrefixTableInitIterator(
  otInstance *aInstance,
  otBorderRoutingPrefixTableIterator *aIterator
)

初始化 otBorderRoutingPrefixTableIterator

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

可以再次初始化迭代器,以便从表的开头重新开始。

遍历表中的条目时,为了确保条目的更新时间 mMsecSinceLastUpdate 保持一致,系统会以迭代器初始化时间为准。

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

otBorderRoutingSetEnabled

otError otBorderRoutingSetEnabled(
  otInstance *aInstance,
  bool aEnabled
)

启用或停用边界路由管理器。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aEnabled
用于启用/停用路由管理器的布尔值。
返回值
OT_ERROR_INVALID_STATE
边界路由管理器尚未初始化。
OT_ERROR_NONE
成功启用/停用边界路由管理器。

otBorderRoutingSetRouteInfoOptionPreference

void otBorderRoutingSetRouteInfoOptionPreference(
  otInstance *aInstance,
  otRoutePreference aPreference
)

明确设置在通过基础架构链路发送的路由器通告消息中通告路由信息选项 (RIO) 时使用的偏好设置。

调用此函数后,BR 将为其通告的所有 RIO 使用给定的偏好设置。可通过调用 otBorderRoutingClearRouteInfoOptionPreference() 清除偏好设置。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aPreference
要使用的路线偏好设置。

otBorderRoutingSetRoutePreference

void otBorderRoutingSetRoutePreference(
  otInstance *aInstance,
  otRoutePreference aPreference
)

明确设置网络数据中已发布路由的偏好设置。

调用此函数后,BR 将使用指定的偏好设置。可通过调用 otBorderRoutingClearRoutePreference() 清除偏好设置。

具体说明
参数
[in] aInstance
指向 OpenThread 实例的指针。
[in] aPreference
要使用的路线偏好设置。

资源

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