邊界轉送管理員

這個單元包含與邊界轉送管理員相關的定義。

摘要

必須啟用 OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE,才能使用這個模組中的所有函式。

邊界轉送管理員會處理 Thread 網路與相鄰基礎架構連結 (AIL) 的雙向轉送作業。

它會在 AIL 上發出 ICMRv6 ND Router Advertisingment (RA) 訊息,公告連結和路徑前置字元。也會處理從基礎架構接收的 RA 訊息,並鏡像在 Thread 網路資料中發現的前置字串,確保 Thread 網格上的裝置可以透過邊界路由器連線至 AIL。

轉送管理員會管理 Thread 網路資料中的「外部網格轉送」(OMR) 前置字串,後者會為 Thread 裝置設定合適的「離線 Routs 可路由 IPv6 位址」設定。這個版本在 AIL 宣布這個前置字串的可連性,方法是將前置字串納入發出的 RA 訊息做為 IPv6 路徑資訊選項 (RIO)。

轉送管理員也會監控基礎架構網路,並在其中新增連結內前置字串。如果 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
}
列舉
代表邊界轉送管理員的狀態。

Typedefs

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 PD 已啟用,並嘗試要求並發布前置字串。

OT_BORDER_ROUTING_DHCP6_PD_STATE_STOPPED

已啟用 DHCPv6 PD,但不會嘗試要求並發布前置字串。

otBorderRoutingState

 otBorderRoutingState

代表邊界轉送管理員的狀態。

屬性
OT_BORDER_ROUTING_STATE_DISABLED

轉送管理員已初始化,但已停用。

OT_BORDER_ROUTING_STATE_RUNNING

轉送管理員已初始化、啟用並執行。

OT_BORDER_ROUTING_STATE_STOPPED

轉送管理員已在初始化及啟用,但目前已停止。

OT_BORDER_ROUTING_STATE_UNINITIALIZED

未初始化轉送管理員。

Typedefs

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 前置字串的 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 PD 時,邊界路由器可發布 DHCPv6 PD 的前置字串。

詳細說明
參數
[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 取得。如要瞭解詳情或對說明文件做出貢獻,請參閱資源