Border Routing Manager#
This module includes definitions related to Border Routing Manager.
All the functions in this module require OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
to be enabled.
Border Routing Manager handles bi-directional routing between Thread network and adjacent infrastructure link (AIL).
It emits ICMRv6 ND Router Advertisement (RA) messages on AIL to advertise on-link and route prefixes. It also processes received RA messages from infrastructure and mirrors the discovered prefixes on the Thread Network Data to ensure devices on Thread mesh can reach AIL through the Border Router.
Routing Manager manages the Off-Mesh Routable (OMR) prefix on the Thread Network data which configures Thread devices with a suitable Off-Mesh Routable IPv6 address. It announces the reachability of this prefix on AIL by including it in the emitted RA messages as an IPv6 Route Information Option (RIO).
Routing Manager also monitors and adds on-link prefix on the infrastructure network. If a router on AIL is already providing RA messages containing an IPv6 Prefix Information Option (PIO) that enables IPv6 devices on the link to self-configure their own routable unicast IPv6 address, this address can be used by Thread devices to reach AIL. If Border Router finds no such RA message on AIL, it generates a ULA on-link prefix which it then advertises on AIL in the emitted RA messages.
Modules#
otBorderRoutingPrefixTableIterator
otBorderRoutingPrefixTableEntry
otBorderRoutingPeerBorderRouterEntry
Enumerations#
Represents the configuration options related to the OMR prefix.
Represents the state of Border Routing Manager.
This enumeration represents the state of DHCPv6 Prefix Delegation State.
Typedefs#
Represents an iterator to iterate through the Border Router's discovered prefix table.
Represents a discovered router on the infrastructure link.
Represents an entry from the discovered prefix table.
Represents a discovered Recursive DNS Server (RDNSS) address entry.
Represents information about a peer Border Router found in the Network Data.
Represents a group of data of platform-generated RA messages processed.
A callback function pointer called when the multi-AIL detection state changes.
Callback function pointer to notify of changes to discovered Recursive DNS Server (RDNSS) address entries.
When the state of a DHCPv6 Prefix Delegation (PD) on the Thread interface changes, this callback notifies processes in the OS of this changed state.
Functions#
Initializes the Border Routing Manager on given infrastructure interface.
Enables or disables the Border Routing Manager.
Gets the current state of Border Routing Manager.
Configures the OMR prefix handling in the Border Routing Manager.
Gets the current OMR prefix configuration mode.
Gets the current preference used when advertising Route Info Options (RIO) in Router Advertisement messages sent over the infrastructure link.
Explicitly sets the preference to use when advertising Route Info Options (RIO) in Router Advertisement messages sent over the infrastructure link.
Clears a previously set preference value for advertised Route Info Options.
Sets additional options to append at the end of emitted Router Advertisement (RA) messages.
Gets the current preference used for published routes in Network Data.
Explicitly sets the preference of published routes in Network Data.
Clears a previously set preference value for published routes in Network Data.
Gets the local Off-Mesh-Routable (OMR) Prefix, for example fdfc:1ff5:1512:5622::/64
.
Gets the DHCPv6 Prefix Delegation (PD) provided off-mesh-routable (OMR) prefix.
Gets the data of platform generated RA message processed.
Gets the currently favored Off-Mesh-Routable (OMR) Prefix.
Gets the local On-Link Prefix for the adjacent infrastructure link.
Gets the currently favored On-Link Prefix.
Gets the local NAT64 Prefix of the Border Router.
Gets the currently favored NAT64 prefix.
Initializes an otBorderRoutingPrefixTableIterator
.
Iterates over the entries in the Border Router's discovered prefix table.
Iterates over the discovered router entries on the infrastructure link.
Iterates over the peer BRs found in the Network Data.
Returns the number of peer BRs found in the Network Data.
Gets the current detected state regarding multiple Adjacent Infrastructure Links (AILs).
Sets a callback function to be notified of changes in the multi-AIL detection state.
Iterates over the Recursive DNS Server (RDNSS) address entries.
Sets the callback to be notified of changes to discovered Recursive DNS Server (RDNSS) address entries.
Enables / Disables DHCPv6 Prefix Delegation.
Gets the current state of DHCPv6 Prefix Delegation.
Sets the callback whenever the DHCPv6 PD state changes on the Thread interface.
Sets the local on-link prefix.
Enumeration Documentation#
otBorderRoutingOmrConfig#
otBorderRoutingOmrConfig
Represents the configuration options related to the OMR prefix.
This is used in otBorderRoutingSetOmrConfig()
to offer manual administration options to explicitly configure the OMR prefix or to disable it.
Enumerator | |
---|---|
OT_BORDER_ROUTING_OMR_CONFIG_AUTO | BR auto-generates the local OMR prefix. |
OT_BORDER_ROUTING_OMR_CONFIG_CUSTOM | BR uses a given custom OMR prefix. |
OT_BORDER_ROUTING_OMR_CONFIG_DISABLED | BR does not add local/PD OMR prefix in Network Data. |
otBorderRoutingState#
otBorderRoutingState
Represents the state of Border Routing Manager.
Enumerator | |
---|---|
OT_BORDER_ROUTING_STATE_UNINITIALIZED | Routing Manager is uninitialized. |
OT_BORDER_ROUTING_STATE_DISABLED | Routing Manager is initialized but disabled. |
OT_BORDER_ROUTING_STATE_STOPPED | Routing Manager in initialized and enabled but currently stopped. |
OT_BORDER_ROUTING_STATE_RUNNING | Routing Manager is initialized, enabled, and running. |
otBorderRoutingDhcp6PdState#
otBorderRoutingDhcp6PdState
This enumeration represents the state of DHCPv6 Prefix Delegation State.
Enumerator | |
---|---|
OT_BORDER_ROUTING_DHCP6_PD_STATE_DISABLED | DHCPv6 PD is disabled on the border router. |
OT_BORDER_ROUTING_DHCP6_PD_STATE_STOPPED | DHCPv6 PD in enabled but won't try to request and publish a prefix. |
OT_BORDER_ROUTING_DHCP6_PD_STATE_RUNNING | DHCPv6 PD is enabled and will try to request and publish a prefix. |
OT_BORDER_ROUTING_DHCP6_PD_STATE_IDLE | DHCPv6 PD is idle; Higher-prf prefix published by other BRs. |
Typedef Documentation#
otBorderRoutingPrefixTableIterator#
typedef struct otBorderRoutingPrefixTableIterator otBorderRoutingPrefixTableIterator
Represents an iterator to iterate through the Border Router's discovered prefix table.
The fields in this type are opaque (intended for use by OpenThread core only) and therefore should not be accessed or used by caller.
Before using an iterator, it MUST be initialized using otBorderRoutingPrefixTableInitIterator()
.
otBorderRoutingRouterEntry#
typedef struct otBorderRoutingRouterEntry otBorderRoutingRouterEntry
Represents a discovered router on the infrastructure link.
The mIsPeerBr
field requires OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE
. Routing Manager determines whether the router is a peer BR (connected to the same Thread mesh network) by comparing its advertised PIO/RIO prefixes with the entries in the Thread Network Data. While this method is generally effective, it may not be 100% accurate in all scenarios, so the mIsPeerBr
flag should be used with caution.
otBorderRoutingPrefixTableEntry#
typedef struct otBorderRoutingPrefixTableEntry otBorderRoutingPrefixTableEntry
Represents an entry from the discovered prefix table.
The entries in the discovered table track the Prefix/Route Info Options in the received Router Advertisement messages from other routers on the infrastructure link.
otBorderRoutingRdnssAddrEntry#
typedef struct otBorderRoutingRdnssAddrEntry otBorderRoutingRdnssAddrEntry
Represents a discovered Recursive DNS Server (RDNSS) address entry.
Address entries are discovered by processing the RDNSS options within received Router Advertisement messages from routers on infrastructure link.
otBorderRoutingPeerBorderRouterEntry#
typedef struct otBorderRoutingPeerBorderRouterEntry otBorderRoutingPeerBorderRouterEntry
Represents information about a peer Border Router found in the Network Data.
otPdProcessedRaInfo#
typedef struct otPdProcessedRaInfo otPdProcessedRaInfo
Represents a group of data of platform-generated RA messages processed.
otBorderRoutingMultiAilCallback#
typedef void(* otBorderRoutingMultiAilCallback) (bool aDetected, void *aContext) )(bool aDetected, void *aContext)
A callback function pointer called when the multi-AIL detection state changes.
Type | Direction | Argument Name | Description |
---|---|---|---|
[in] | aDetected |
| |
[in] | aContext | A pointer to arbitrary context information provided when the callback was registered using |
This callback function is invoked by the OpenThread stack whenever the Routing Manager determines a change in whether Border Routers on the Thread mesh might be connected to different Adjacent Infrastructure Links (AILs).
See otBorderRoutingIsMultiAilDetected()
for more details.
otBorderRoutingRdnssAddrCallback#
typedef void(* otBorderRoutingRdnssAddrCallback) (void *aContext) )(void *aContext)
Callback function pointer to notify of changes to discovered Recursive DNS Server (RDNSS) address entries.
Type | Direction | Argument Name | Description |
---|---|---|---|
[in] | aContext | A pointer to arbitrary context information. |
Address entries are discovered by processing the RDNSS options within received Router Advertisement messages from routers on infrastructure link.
The otBorderRoutingGetNextRdnssAddrEntry()
function can be used to iterate over the discovered RDNSS address entries.
This callback is invoked when any of the following changes occur to the address entries associated with a discovered router:
A new RDNSS address is advertised by the router.
A previously discovered address is removed due to the router advertising it with a zero lifetime.
A previously discovered address has aged out (its lifetime expired without being re-advertised).
We determine that the router that advertised the address is now unreachable, and therefore all its associated entries are removed.
otBorderRoutingRequestDhcp6PdCallback#
typedef void(* otBorderRoutingRequestDhcp6PdCallback) (otBorderRoutingDhcp6PdState aState, void *aContext) )(otBorderRoutingDhcp6PdState aState, void *aContext)
When the state of a DHCPv6 Prefix Delegation (PD) on the Thread interface changes, this callback notifies processes in the OS of this changed state.
Type | Direction | Argument Name | Description |
---|---|---|---|
[in] | aState | The state of DHCPv6 Prefix Delegation State. | |
[in] | aContext | A pointer to arbitrary context information. |
Function Documentation#
otBorderRoutingInit#
otError otBorderRoutingInit (otInstance * aInstance, uint32_t aInfraIfIndex, bool aInfraIfIsRunning)
Initializes the Border Routing Manager on given infrastructure interface.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
uint32_t | [in] | aInfraIfIndex | The infrastructure interface index. |
bool | [in] | aInfraIfIsRunning | A boolean that indicates whether the infrastructure interface is running. |
Note
This method MUST be called before any other otBorderRouting* APIs.
This method can be re-called to change the infrastructure interface, but the Border Routing Manager should be disabled first, and re-enabled after.
See Also
otBorderRoutingSetEnabled#
otError otBorderRoutingSetEnabled (otInstance * aInstance, bool aEnabled)
Enables or disables the Border Routing Manager.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
bool | [in] | aEnabled | A boolean to enable/disable the routing manager. |
Note
The Border Routing Manager is disabled by default.
otBorderRoutingGetState#
otBorderRoutingState otBorderRoutingGetState (otInstance * aInstance)
Gets the current state of Border Routing Manager.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
Returns
The current state of Border Routing Manager.
otBorderRoutingSetOmrConfig#
otError otBorderRoutingSetOmrConfig (otInstance * aInstance, otBorderRoutingOmrConfig aConfig, const otIp6Prefix * aOmrPrefix, otRoutePreference aPreference)
Configures the OMR prefix handling in the Border Routing Manager.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to the OpenThread instance. |
otBorderRoutingOmrConfig | [in] | aConfig | The desired OMR configuration. |
const otIp6Prefix * | [in] | aOmrPrefix | A pointer to the custom OMR prefix. Required only when |
otRoutePreference | [in] | aPreference | The preference associated with the custom OMR prefix. |
This function offers manual administration options to explicitly configure the OMR prefix or to disable it.
By default, OT_BORDER_ROUTING_OMR_CONFIG_AUTO
is used. In this mode, the Border Routing Manager automatically selects and manages the OMR prefix. This can involve auto-generating a local prefix or utilizing a prefix obtained through DHCPv6 PD (Prefix Delegation), if the feature is enabled.
The OT_BORDER_ROUTING_OMR_CONFIG_CUSTOM
option enables the use of a user-specified OMR prefix. When this option is selected, the aOmrPrefix
and aPreference
parameters are used to define the custom OMR prefix and its associated preference. These parameters are ignored for other configuration modes, and aOmrPrefix
can be NULL
.
The OT_BORDER_ROUTING_OMR_CONFIG_DISABLED
option disables the Border Routing Manager's management of the OMR prefix. The Routing Manager module itself will not add any local or DHCPv6 PD OMR prefixes to the Network Data.
otBorderRoutingGetOmrConfig#
otBorderRoutingOmrConfig otBorderRoutingGetOmrConfig (otInstance * aInstance, otIp6Prefix * aOmrPrefix, otRoutePreference * aPreference)
Gets the current OMR prefix configuration mode.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to the OpenThread instance. |
otIp6Prefix * | [out] | aOmrPrefix | A pointer to an |
otRoutePreference * | [out] | aPreference | A pointer to return the preference associated with the custom OMR prefix. |
This function retrieves the current OMR configuration and, if a custom OMR prefix is configured, the custom prefix and its associated preference.
If the caller does not require the custom OMR prefix and preference, the aOmrPrefix
and aPreference
parameters can be set to NULL
.
Returns
The current OMR prefix configuration mode.
otBorderRoutingGetRouteInfoOptionPreference#
otRoutePreference otBorderRoutingGetRouteInfoOptionPreference (otInstance * aInstance)
Gets the current preference used when advertising Route Info Options (RIO) in Router Advertisement messages sent over the infrastructure link.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | N/A | aInstance |
The RIO preference is determined as follows:
If explicitly set by user by calling
otBorderRoutingSetRouteInfoOptionPreference()
, the given preference is used.Otherwise, it is determined based on device's current role: Medium preference when in router/leader role and low preference when in child role.
Returns
The current Route Info Option preference.
otBorderRoutingSetRouteInfoOptionPreference#
void otBorderRoutingSetRouteInfoOptionPreference (otInstance * aInstance, otRoutePreference aPreference)
Explicitly sets the preference to use when advertising Route Info Options (RIO) in Router Advertisement messages sent over the infrastructure link.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otRoutePreference | [in] | aPreference | The route preference to use. |
After a call to this function, BR will use the given preference for all its advertised RIOs. The preference can be cleared by calling otBorderRoutingClearRouteInfoOptionPreference()
.
otBorderRoutingClearRouteInfoOptionPreference#
void otBorderRoutingClearRouteInfoOptionPreference (otInstance * aInstance)
Clears a previously set preference value for advertised Route Info Options.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
After a call to this function, BR will use device's role to determine the RIO preference: Medium preference when in router/leader role and low preference when in child role.
otBorderRoutingSetExtraRouterAdvertOptions#
otError otBorderRoutingSetExtraRouterAdvertOptions (otInstance * aInstance, const uint8_t * aOptions, uint16_t aLength)
Sets additional options to append at the end of emitted Router Advertisement (RA) messages.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to the encoded options. Can be |
const uint8_t * | [in] | aOptions | Number of bytes in |
uint16_t | N/A | aLength |
The content of aOptions
is copied internally, so it can be a temporary buffer (e.g., a stack allocated array).
Subsequent calls to this function overwrite the previously set value.
otBorderRoutingGetRoutePreference#
otRoutePreference otBorderRoutingGetRoutePreference (otInstance * aInstance)
Gets the current preference used for published routes in Network Data.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
The preference is determined as follows:
If explicitly set by user by calling
otBorderRoutingSetRoutePreference()
, the given preference is used.Otherwise, it is determined automatically by
RoutingManager
based on the device's role and link quality.
Returns
The current published route preference.
otBorderRoutingSetRoutePreference#
void otBorderRoutingSetRoutePreference (otInstance * aInstance, otRoutePreference aPreference)
Explicitly sets the preference of published routes in Network Data.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otRoutePreference | [in] | aPreference | The route preference to use. |
After a call to this function, BR will use the given preference. The preference can be cleared by calling otBorderRoutingClearRoutePreference()
.
otBorderRoutingClearRoutePreference#
void otBorderRoutingClearRoutePreference (otInstance * aInstance)
Clears a previously set preference value for published routes in Network Data.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
After a call to this function, BR will determine the preference automatically based on the device's role and link quality (to the parent when acting as end-device).
otBorderRoutingGetOmrPrefix#
otError otBorderRoutingGetOmrPrefix (otInstance * aInstance, otIp6Prefix * aPrefix)
Gets the local Off-Mesh-Routable (OMR) Prefix, for example fdfc:1ff5:1512:5622::/64
.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otIp6Prefix * | [out] | aPrefix | A pointer to where the prefix will be output to. |
An OMR Prefix is a randomly generated 64-bit prefix that's published in the Thread network if there isn't already an OMR prefix. This prefix can be reached from the local Wi-Fi or Ethernet network.
Note: When DHCPv6 PD is enabled, the border router may publish the prefix from DHCPv6 PD.
See Also
otBorderRoutingGetPdOmrPrefix#
otError otBorderRoutingGetPdOmrPrefix (otInstance * aInstance, otBorderRoutingPrefixTableEntry * aPrefixInfo)
Gets the DHCPv6 Prefix Delegation (PD) provided off-mesh-routable (OMR) prefix.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otBorderRoutingPrefixTableEntry * | [out] | aPrefixInfo | A pointer to where the prefix info will be output to. |
Only mPrefix, mValidLifetime and mPreferredLifetime fields are used in the returned prefix info.
OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
must be enabled.
See Also
otBorderRoutingGetPdProcessedRaInfo#
otError otBorderRoutingGetPdProcessedRaInfo (otInstance * aInstance, otPdProcessedRaInfo * aPdProcessedRaInfo)
Gets the data of platform generated RA message processed.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otPdProcessedRaInfo * | [out] | aPdProcessedRaInfo | A pointer to where the prefix info will be output to. |
OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
must be enabled.
otBorderRoutingGetFavoredOmrPrefix#
otError otBorderRoutingGetFavoredOmrPrefix (otInstance * aInstance, otIp6Prefix * aPrefix, otRoutePreference * aPreference)
Gets the currently favored Off-Mesh-Routable (OMR) Prefix.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otIp6Prefix * | [out] | aPrefix | A pointer to output the favored OMR prefix. |
otRoutePreference * | [out] | aPreference | A pointer to output the preference associated the favored prefix. |
The favored OMR prefix can be discovered from Network Data or can be this device's local OMR prefix.
otBorderRoutingGetOnLinkPrefix#
otError otBorderRoutingGetOnLinkPrefix (otInstance * aInstance, otIp6Prefix * aPrefix)
Gets the local On-Link Prefix for the adjacent infrastructure link.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otIp6Prefix * | [out] | aPrefix | A pointer to where the prefix will be output to. |
The local On-Link Prefix is a 64-bit prefix that's advertised on the infrastructure link if there isn't already a usable on-link prefix being advertised on the link.
otBorderRoutingGetFavoredOnLinkPrefix#
otError otBorderRoutingGetFavoredOnLinkPrefix (otInstance * aInstance, otIp6Prefix * aPrefix)
Gets the currently favored On-Link Prefix.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otIp6Prefix * | [out] | aPrefix | A pointer to where the prefix will be output to. |
The favored prefix is either a discovered on-link prefix on the infrastructure link or the local on-link prefix.
otBorderRoutingGetNat64Prefix#
otError otBorderRoutingGetNat64Prefix (otInstance * aInstance, otIp6Prefix * aPrefix)
Gets the local NAT64 Prefix of the Border Router.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otIp6Prefix * | [out] | aPrefix | A pointer to where the prefix will be output to. |
NAT64 Prefix might not be advertised in the Thread network.
OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE
must be enabled.
otBorderRoutingGetFavoredNat64Prefix#
otError otBorderRoutingGetFavoredNat64Prefix (otInstance * aInstance, otIp6Prefix * aPrefix, otRoutePreference * aPreference)
Gets the currently favored NAT64 prefix.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otIp6Prefix * | [out] | aPrefix | A pointer to output the favored NAT64 prefix. |
otRoutePreference * | [out] | aPreference | A pointer to output the preference associated the favored prefix. |
The favored NAT64 prefix can be discovered from infrastructure link or can be this device's local NAT64 prefix.
otBorderRoutingPrefixTableInitIterator#
void otBorderRoutingPrefixTableInitIterator (otInstance * aInstance, otBorderRoutingPrefixTableIterator * aIterator)
Initializes an otBorderRoutingPrefixTableIterator
.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | The OpenThread instance. |
otBorderRoutingPrefixTableIterator * | [out] | aIterator | A pointer to the iterator to initialize. |
An iterator MUST be initialized before it is used.
An iterator can be initialized again to restart from the beginning of the table.
When iterating over entries in the table, to ensure the update times mMsecSinceLastUpdate
of entries are consistent, they are given relative to the time the iterator was initialized.
otBorderRoutingGetNextPrefixTableEntry#
otError otBorderRoutingGetNextPrefixTableEntry (otInstance * aInstance, otBorderRoutingPrefixTableIterator * aIterator, otBorderRoutingPrefixTableEntry * aEntry)
Iterates over the entries in the Border Router's discovered prefix table.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | The OpenThread instance. |
otBorderRoutingPrefixTableIterator * | [inout] | aIterator | A pointer to the iterator. |
otBorderRoutingPrefixTableEntry * | [out] | aEntry | A pointer to the entry to populate. |
Prefix entries associated with the same discovered router on an infrastructure link are guaranteed to be grouped together (retrieved back-to-back).
otBorderRoutingGetNextRouterEntry#
otError otBorderRoutingGetNextRouterEntry (otInstance * aInstance, otBorderRoutingPrefixTableIterator * aIterator, otBorderRoutingRouterEntry * aEntry)
Iterates over the discovered router entries on the infrastructure link.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | The OpenThread instance. |
otBorderRoutingPrefixTableIterator * | [inout] | aIterator | A pointer to the iterator. |
otBorderRoutingRouterEntry * | [out] | aEntry | A pointer to the entry to populate. |
otBorderRoutingGetNextPeerBrEntry#
otError otBorderRoutingGetNextPeerBrEntry (otInstance * aInstance, otBorderRoutingPrefixTableIterator * aIterator, otBorderRoutingPeerBorderRouterEntry * aEntry)
Iterates over the peer BRs found in the Network Data.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | The OpenThread instance. |
otBorderRoutingPrefixTableIterator * | [inout] | aIterator | A pointer to the iterator. |
otBorderRoutingPeerBorderRouterEntry * | [out] | aEntry | A pointer to the entry to populate. |
Requires OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE
.
Peer BRs are other devices within the Thread mesh that provide external IP connectivity. A device is considered to provide external IP connectivity if at least one of the following conditions is met regarding its Network Data entries:
It has added at least one external route entry.
It has added at least one prefix entry with both the default-route and on-mesh flags set.
It has added at least one domain prefix (with both the domain and on-mesh flags set).
The list of peer BRs specifically excludes the current device, even if it is itself acting as a BR.
otBorderRoutingCountPeerBrs#
uint16_t otBorderRoutingCountPeerBrs (otInstance * aInstance, uint32_t * aMinAge)
Returns the number of peer BRs found in the Network Data.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | The OpenThread instance. |
uint32_t * | [out] | aMinAge | Pointer to an |
Requires OPENTHREAD_CONFIG_BORDER_ROUTING_TRACK_PEER_BR_INFO_ENABLE
.
Peer BRs are other devices within the Thread mesh that provide external IP connectivity. A device is considered to provide external IP connectivity if at least one of the following conditions is met regarding its Network Data entries:
It has added at least one external route entry.
It has added at least one prefix entry with both the default-route and on-mesh flags set.
It has added at least one domain prefix (with both the domain and on-mesh flags set).
The list of peer BRs specifically excludes the current device, even if it is itself acting as a BR.
Returns
The number of peer BRs.
otBorderRoutingIsMultiAilDetected#
bool otBorderRoutingIsMultiAilDetected (otInstance * aInstance)
Gets the current detected state regarding multiple Adjacent Infrastructure Links (AILs).
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to the OpenThread instance. |
Requires OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
.
It returns whether the Routing Manager currently believes that Border Routers (BRs) on the Thread mesh may be connected to different AILs.
The detection mechanism operates as follows: The Routing Manager monitors the number of peer BRs listed in the Thread Network Data (see otBorderRoutingCountPeerBrs()
) and compares this count with the number of peer BRs discovered by processing received Router Advertisement (RA) messages on its connected AIL. If the count derived from Network Data consistently exceeds the count derived from RAs for a detection duration of 10 minutes, it concludes that BRs are likely connected to different AILs. To clear state a shorter window of 1 minute is used.
The detection window of 10 minutes helps to avoid false positives due to transient changes. The Routing Manager uses 200 seconds for reachability checks of peer BRs (sending Neighbor Solicitation). Stale Network Data entries are also expected to age out within a few minutes. So a 10-minute detection time accommodates both cases.
While generally effective, this detection mechanism may get less reliable in scenarios with a large number of BRs, particularly exceeding ten. This is related to the "Network Data Publisher" mechanism, where BRs might refrain from publishing their external route information in the Network Data to conserve its limited size, potentially skewing the Network Data BR count.
otBorderRoutingSetMultiAilCallback#
void otBorderRoutingSetMultiAilCallback (otInstance * aInstance, otBorderRoutingMultiAilCallback aCallback, void * aContext)
Sets a callback function to be notified of changes in the multi-AIL detection state.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to the OpenThread instance. |
otBorderRoutingMultiAilCallback | [in] | aCallback | A pointer to the function ( |
void * | [in] | aContext | A pointer to application-specific context that will be passed back in the |
Requires OPENTHREAD_CONFIG_BORDER_ROUTING_MULTI_AIL_DETECTION_ENABLE
.
Subsequent calls to this function will overwrite the previous callback setting. Using NULL
for aCallback
will disable the callback.
otBorderRoutingGetNextRdnssAddrEntry#
otError otBorderRoutingGetNextRdnssAddrEntry (otInstance * aInstance, otBorderRoutingPrefixTableIterator * aIterator, otBorderRoutingRdnssAddrEntry * aEntry)
Iterates over the Recursive DNS Server (RDNSS) address entries.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | The OpenThread instance. |
otBorderRoutingPrefixTableIterator * | [inout] | aIterator | A pointer to the iterator. |
otBorderRoutingRdnssAddrEntry * | [out] | aEntry | A pointer to the entry to populate. |
Address entries are discovered by processing the RDNSS options within received Router Advertisement messages from routers on infrastructure link.
Address entries associated with the same discovered router on an infrastructure link are guaranteed to be grouped together (retrieved back-to-back).
otBorderRoutingSetRdnssAddrCallback#
void otBorderRoutingSetRdnssAddrCallback (otInstance * aInstance, otBorderRoutingRdnssAddrCallback aCallback, void * aContext)
Sets the callback to be notified of changes to discovered Recursive DNS Server (RDNSS) address entries.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | The OpenThread instance. |
otBorderRoutingRdnssAddrCallback | [in] | aCallback | The callback function pointer. Can be |
void * | [in] | aContext | An arbitrary context information (used when invoking the callback). |
A subsequent call to this function, replaces a previously set callback.
otBorderRoutingDhcp6PdSetEnabled#
void otBorderRoutingDhcp6PdSetEnabled (otInstance * aInstance, bool aEnabled)
Enables / Disables DHCPv6 Prefix Delegation.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
bool | [in] | aEnabled | Whether to accept platform generated RA messages. |
OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
must be enabled.
otBorderRoutingDhcp6PdGetState#
otBorderRoutingDhcp6PdState otBorderRoutingDhcp6PdGetState (otInstance * aInstance)
Gets the current state of DHCPv6 Prefix Delegation.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
Requires OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE
to be enabled.
Returns
The current state of DHCPv6 Prefix Delegation.
otBorderRoutingDhcp6PdSetRequestCallback#
void otBorderRoutingDhcp6PdSetRequestCallback (otInstance * aInstance, otBorderRoutingRequestDhcp6PdCallback aCallback, void * aContext)
Sets the callback whenever the DHCPv6 PD state changes on the Thread interface.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | A pointer to an OpenThread instance. |
otBorderRoutingRequestDhcp6PdCallback | [in] | aCallback | A pointer to a function that is called whenever the DHCPv6 PD state changes. |
void * | [in] | aContext | A pointer to arbitrary context information. |
Subsequent calls to this function replace the previously set callback.
otBorderRoutingSetOnLinkPrefix#
void otBorderRoutingSetOnLinkPrefix (otInstance * aInstance, const otIp6Prefix * aPrefix)
Sets the local on-link prefix.
Type | Direction | Argument Name | Description |
---|---|---|---|
otInstance * | [in] | aInstance | The on-link prefix to use. |
const otIp6Prefix * | N/A | aPrefix |
Requires OPENTHREAD_CONFIG_BORDER_ROUTING_TESTING_API_ENABLE
.
This is intended for testing only and using it will make the BR non-compliant with the Thread Specification.