邊界轉送管理員

這個模組包含邊界路由管理員的相關定義。

摘要

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

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

這個 API 會在 AIL 上發出 ICMRv6 ND 路由器通告 (RA) 訊息,藉此通告連結和路徑前置字元。也會處理來自基礎架構的 RA 訊息,並為 Thread 網路資料中發現的前置字串建立鏡像,確保 Thread 網狀網路的裝置可以透過邊界路由器連線至 AIL。

轉送管理員會管理 Thread 網路資料的 Off-Mesh Routable (OMR) 前置字串,藉此使用合適的 Off-Mesh Routable IPv6 位址設定 Thread 裝置。這個前置字串會將這個前置字串納入發出的 RA 訊息中做為 IPv6 路徑資訊選項 (RIO),以宣告這個前置字串在 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
}
列舉
代表邊界轉送管理員的狀態。

Typedefs

otBorderRoutingPrefixTableEntry typedef
代表找到的前置字串資料表中的項目。
otBorderRoutingPrefixTableIterator typedef
代表透過邊界路由器找到前置字串資料表進行疊代的疊代器。
otBorderRoutingRouterEntry typedef
代表基礎架構連結中偵測到的路由器。

函式

otBorderRoutingClearRouteInfoOptionPreference(otInstance *aInstance)
void
清除通告路線資訊選項先前設定的偏好設定值。
otBorderRoutingClearRoutePreference(otInstance *aInstance)
void
清除網路資料中已發布路徑的偏好設定值。
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)
取得目前偏好的連結前置字串。
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)
取得相鄰基礎架構連結的本機連結前置字串。
otBorderRoutingGetPdOmrPrefix(otInstance *aInstance, otBorderRoutingPrefixTableEntry *aPrefixInfo)
取得提供的 DHCPv6 前置字串委派 (PD) 前置字串 (OMR) 前置字串。
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

代表基礎架構連結中偵測到的路由器。

列舉

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

代表基礎架構連結中偵測到的路由器。

函式

otBorderRoutingClearRouteInfoOptionPreference

void otBorderRoutingClearRouteInfoOptionPreference(
  otInstance *aInstance
)

清除通告路線資訊選項先前設定的偏好設定值。

呼叫這個函式後,BR 將使用裝置的角色判斷 RIO 偏好設定:路由器/主要角色為中度偏好設定,以及子項角色為低偏好時。

詳細說明
參數
[in] aInstance
OpenThread 執行個體的指標。

otBorderRoutingClearRoutePreference

void otBorderRoutingClearRoutePreference(
  otInstance *aInstance
)

清除網路資料中已發布路徑的偏好設定值。

呼叫此函式後,BR 會根據裝置的角色和連結品質 (以裝置身分運作時至父項) 自動決定偏好設定。

詳細說明
參數
[in] aInstance
OpenThread 執行個體的指標。

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
)

取得目前偏好的連結前置字串。

偏好使用的前置字元可能是基礎架構連結的連結前置字元,或本機連結前置字元。

詳細說明
參數
[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
)

取得相鄰基礎架構連結的本機連結前置字串。

「本機端連結前置字元」為 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
otPlatBorderForwardProcessIcmp6Ra

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 取得。如要瞭解詳情或參與說明文件,請參閱資源