边界路由管理器
本单元包含与边界路由管理器相关的定义。
摘要
此模块中的所有函数都需要启用 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 通告该前缀。
类型定义符 |
|
---|---|
otBorderRoutingPrefixTableEntry
|
typedef 表示已发现的前缀表中的条目。 |
otBorderRoutingPrefixTableIterator
|
typedef 表示用于遍历边界路由器发现的前缀表的迭代器。 |
otBorderRoutingRouterEntry
|
typedefstruct otBorderRoutingRouterEntry
表示在基础架构链路上发现的路由器。 |
otPdProcessedRaInfo
|
typedefstruct otPdProcessedRaInfo
表示由平台生成且已处理的一组 RA 消息数据。 |
结构体 |
|
---|---|
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
表示在基础架构链路上发现的路由器。
函数
otBorderRoutingClearRouteInfoOptionPreference
void otBorderRoutingClearRouteInfoOptionPreference( otInstance *aInstance )
清除之前为通告的路由信息选项设置的偏好设置值。
调用此函数后,BR 将使用设备的角色来确定 RIO 偏好设置:在处于路由器/领导者角色时优先级为“中”;在子角色中,优先级为“低”。
具体说明 | |||
---|---|---|---|
参数 |
|
otBorderRoutingClearRoutePreference
void otBorderRoutingClearRoutePreference( otInstance *aInstance )
清除网络数据中之前为已发布路由设置的偏好设置值。
调用此函数后,BR 将根据设备的角色和链接质量(在充当最终设备时,向父级)自动确定偏好设置。
具体说明 | |||
---|---|---|---|
参数 |
|
otBorderRoutingDhcp6PdGetState
otBorderRoutingDhcp6PdState otBorderRoutingDhcp6PdGetState( otInstance *aInstance )
获取 DHCPv6 前缀委派的当前状态。
需要启用 OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
。
具体说明 | |||
---|---|---|---|
参数 |
|
||
返回值 |
DHCPv6 前缀委派的当前状态。
|
otBorderRoutingDhcp6PdSetEnabled
void otBorderRoutingDhcp6PdSetEnabled( otInstance *aInstance, bool aEnabled )
启用 / 停用 DHCPv6 前缀委派。
必须启用“OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
”。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
otBorderRoutingGetFavoredNat64Prefix
otError otBorderRoutingGetFavoredNat64Prefix( otInstance *aInstance, otIp6Prefix *aPrefix, otRoutePreference *aPreference )
获取当前首选的 NAT64 前缀。
首选的 NAT64 前缀可以从基础架构链接中发现,也可以是此设备的本地 NAT64 前缀。
具体说明 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
otBorderRoutingGetFavoredOmrPrefix
otError otBorderRoutingGetFavoredOmrPrefix( otInstance *aInstance, otIp6Prefix *aPrefix, otRoutePreference *aPreference )
获取当前青睐的 Off-Mesh-Routable (OMR) 前缀。
可从网络数据中发现首选 OMR 前缀,也可以使用此设备的本地 OMR 前缀。
具体说明 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
otBorderRoutingGetFavoredOnLinkPrefix
otError otBorderRoutingGetFavoredOnLinkPrefix( otInstance *aInstance, otIp6Prefix *aPrefix )
获取当前首选的 On-Link 前缀。
首选前缀是基础架构链路上发现的链路前缀或本地链路前缀。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
otBorderRoutingGetNat64Prefix
otError otBorderRoutingGetNat64Prefix( otInstance *aInstance, otIp6Prefix *aPrefix )
获取边界路由器的本地 NAT64 前缀。
NAT64 前缀可能不会在 Thread 网络中通告。
必须启用“OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE
”。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
otBorderRoutingGetNextPrefixTableEntry
otError otBorderRoutingGetNextPrefixTableEntry( otInstance *aInstance, otBorderRoutingPrefixTableIterator *aIterator, otBorderRoutingPrefixTableEntry *aEntry )
遍历边界路由器发现的前缀表中的条目。
与在基础架构链路上发现的同一路由器相关联的前缀条目一定会组合在一起(连续检索)。
具体说明 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
otBorderRoutingGetNextRouterEntry
otError otBorderRoutingGetNextRouterEntry( otInstance *aInstance, otBorderRoutingPrefixTableIterator *aIterator, otBorderRoutingRouterEntry *aEntry )
遍历在基础架构链路上发现的路由器条目。
具体说明 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
otBorderRoutingGetOmrPrefix
otError otBorderRoutingGetOmrPrefix( otInstance *aInstance, otIp6Prefix *aPrefix )
获取本地 Off-Mesh-Routable (OMR) 前缀,例如 fdfc:1ff5:1512:5622::/64
。
OMR 前缀是随机生成的 64 位前缀,如果还没有 OMR 前缀,则会在 Thread 网络中发布。可通过本地 Wi-Fi 或以太网网络访问此前缀。
注意:启用 DHCPv6 永久性磁盘后,边界路由器可能会发布 DHCPv6 永久性磁盘的前缀。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
otBorderRoutingGetPdOmrPrefix
otBorderRoutingGetOnLinkPrefix
otError otBorderRoutingGetOnLinkPrefix( otInstance *aInstance, otIp6Prefix *aPrefix )
获取相邻基础架构链路的本地 On-Link 前缀。
本地链路前缀是 64 位的前缀,如果链路上还没有可用的链路前缀,则会通告该链路。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
otBorderRoutingGetPdOmrPrefix
otError otBorderRoutingGetPdOmrPrefix( otInstance *aInstance, otBorderRoutingPrefixTableEntry *aPrefixInfo )
获取 DHCPv6 前缀委派 (PD) 提供的网外路由 (OMR) 前缀。
返回的前缀信息中仅使用 mPrefix、mValidLifetime 和 mPreferredLifetime 字段。
必须启用“OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
”。
具体说明 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
otBorderRoutingGetOmrPrefix
otPlatBorderRoutingProcessIcmp6Ra
otBorderRoutingGetPdProcessedRaInfo
otError otBorderRoutingGetPdProcessedRaInfo( otInstance *aInstance, otPdProcessedRaInfo *aPdProcessedRaInfo )
获取平台生成的 RA 消息已处理的数据。
必须启用“OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
”。
具体说明 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
otBorderRoutingGetRouteInfoOptionPreference
otRoutePreference otBorderRoutingGetRouteInfoOptionPreference( otInstance *aInstance )
获取在通过基础架构链接发送的路由器通告消息中通告路由信息选项 (RIO) 时使用的当前偏好设置。
RIO 首选项按如下方式确定:
- 如果用户通过调用
otBorderRoutingSetRouteInfoOptionPreference()
进行显式设置,系统将使用给定的偏好设置。 - 否则,系统会根据设备的当前角色来确定:当处于路由器/领导者角色时,优先级为中等;当处于子角色时,优先级较低。
具体说明 | |
---|---|
返回值 |
当前的路线信息选项偏好设置。
|
otBorderRoutingGetRoutePreference
otRoutePreference otBorderRoutingGetRoutePreference( otInstance *aInstance )
获取用于网络数据中已发布路由的当前偏好设置。
优先权根据如下方式确定:
- 如果用户通过调用
otBorderRoutingSetRoutePreference()
进行显式设置,系统将使用给定的偏好设置。 - 否则,由
RoutingManager
根据设备的角色和链接质量自动确定。
具体说明 | |||
---|---|---|---|
参数 |
|
||
返回值 |
当前已发布路线偏好设置。
|
otBorderRoutingGetState
otBorderRoutingState otBorderRoutingGetState( otInstance *aInstance )
获取边界路由管理器的当前状态。
具体说明 | |||
---|---|---|---|
参数 |
|
||
返回值 |
边界路由管理器的当前状态。
|
otBorderRoutingInit
otError otBorderRoutingInit( otInstance *aInstance, uint32_t aInfraIfIndex, bool aInfraIfIsRunning )
在给定基础架构接口上初始化边界路由管理器。
具体说明 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
|
otPlatInfraIfStateChanged。
otBorderRoutingSetEnabled。
otBorderRoutingPrefixTableInitIterator
void otBorderRoutingPrefixTableInitIterator( otInstance *aInstance, otBorderRoutingPrefixTableIterator *aIterator )
初始化 otBorderRoutingPrefixTableIterator
。
在使用迭代器之前,必须先对其进行初始化。
可以再次初始化迭代器,以便从表的开头重新开始。
遍历表中的条目时,为了确保条目的更新时间 mMsecSinceLastUpdate
保持一致,系统会以迭代器初始化时间为准。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
otBorderRoutingSetEnabled
otError otBorderRoutingSetEnabled( otInstance *aInstance, bool aEnabled )
启用或停用边界路由管理器。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
otBorderRoutingSetRouteInfoOptionPreference
void otBorderRoutingSetRouteInfoOptionPreference( otInstance *aInstance, otRoutePreference aPreference )
明确设置在通过基础架构链路发送的路由器通告消息中通告路由信息选项 (RIO) 时使用的偏好设置。
调用此函数后,BR 将为其通告的所有 RIO 使用给定的偏好设置。可通过调用 otBorderRoutingClearRouteInfoOptionPreference()
清除偏好设置。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
otBorderRoutingSetRoutePreference
void otBorderRoutingSetRoutePreference( otInstance *aInstance, otRoutePreference aPreference )
明确设置网络数据中已发布路由的偏好设置。
调用此函数后,BR 将使用指定的偏好设置。可通过调用 otBorderRoutingClearRoutePreference()
清除偏好设置。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
资源
OpenThread API 参考文档源自 GitHub 上提供的源代码。如需了解详情,或者为我们的文档做贡献,请参阅资源。