Modules#

otBorderRoutingPrefixTableIterator

otBorderRoutingPrefixTableEntry

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.

Enumerations#

enum
OT_BORDER_ROUTING_STATE_UNINITIALIZED
OT_BORDER_ROUTING_STATE_DISABLED
OT_BORDER_ROUTING_STATE_STOPPED
OT_BORDER_ROUTING_STATE_RUNNING
}

This enumeration represents the state of Border Routing Manager.

Typedefs#

This structure represents an iterator to iterate through the Border Router's discovered prefix table.

This structure represents an entry from the discovered prefix table.

Functions#

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

This method initializes the Border Routing Manager on given infrastructure interface.

otBorderRoutingSetEnabled(otInstance *aInstance, bool aEnabled)

Enables or disables the Border Routing Manager.

otBorderRoutingGetState(otInstance *aInstance)

Gets the current state of Border Routing Manager.

This function gets the current preference used when advertising Route Info Options (RIO) in Router Advertisement messages sent over the infrastructure link.

void
otBorderRoutingSetRouteInfoOptionPreference(otInstance *aInstance, otRoutePreference aPreference)

This function explicitly sets the preference to use when advertising Route Info Options (RIO) in Router Advertisement messages sent over the infrastructure link.

void

This function clears a previously set preference value for advertised Route Info Options.

otBorderRoutingGetOmrPrefix(otInstance *aInstance, otIp6Prefix *aPrefix)

Gets the local Off-Mesh-Routable (OMR) Prefix, for example fdfc:1ff5:1512:5622::/64.

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

Gets the currently favored Off-Mesh-Routable (OMR) Prefix.

otBorderRoutingGetOnLinkPrefix(otInstance *aInstance, otIp6Prefix *aPrefix)

Gets the local On-Link Prefix for the adjacent infrastructure link.

otBorderRoutingGetFavoredOnLinkPrefix(otInstance *aInstance, otIp6Prefix *aPrefix)

Gets the currently favored On-Link Prefix.

otBorderRoutingGetNat64Prefix(otInstance *aInstance, otIp6Prefix *aPrefix)

Gets the local NAT64 Prefix of the Border Router.

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

Gets the currently favored NAT64 prefix.

void
otBorderRoutingPrefixTableInitIterator(otInstance *aInstance, otBorderRoutingPrefixTableIterator *aIterator)

This function initializes an otBorderRoutingPrefixTableIterator.

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

This function iterates over the entries in the Border Router's discovered prefix table.

Enumeration Documentation#

otBorderRoutingState#

otBorderRoutingState

This enumeration 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.


Typedef Documentation#

otBorderRoutingPrefixTableIterator#

typedef struct otBorderRoutingPrefixTableIterator otBorderRoutingPrefixTableIterator

This structure 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().


otBorderRoutingPrefixTableEntry#

typedef struct otBorderRoutingPrefixTableEntry otBorderRoutingPrefixTableEntry

This structure 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 infrastructure link.


Function Documentation#

otBorderRoutingInit#

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

This method initializes the Border Routing Manager on given infrastructure interface.

Parameters
TypeDirectionArgument NameDescription
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.

See Also


otBorderRoutingSetEnabled#

otError otBorderRoutingSetEnabled (otInstance * aInstance, bool aEnabled)

Enables or disables the Border Routing Manager.

Parameters
TypeDirectionArgument NameDescription
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.

Parameters
TypeDirectionArgument NameDescription
otInstance *[in]aInstance

A pointer to an OpenThread instance.

Returns

  • The current state of Border Routing Manager.


otBorderRoutingGetRouteInfoOptionPreference#

otRoutePreference otBorderRoutingGetRouteInfoOptionPreference (otInstance * aInstance)

This function gets the current preference used when advertising Route Info Options (RIO) in Router Advertisement messages sent over the infrastructure link.

Parameters
TypeDirectionArgument NameDescription
otInstance *N/AaInstance

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)

This function explicitly sets the preference to use when advertising Route Info Options (RIO) in Router Advertisement messages sent over the infrastructure link.

Parameters
TypeDirectionArgument NameDescription
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)

This function clears a previously set preference value for advertised Route Info Options.

Parameters
TypeDirectionArgument NameDescription
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.


otBorderRoutingGetOmrPrefix#

otError otBorderRoutingGetOmrPrefix (otInstance * aInstance, otIp6Prefix * aPrefix)

Gets the local Off-Mesh-Routable (OMR) Prefix, for example fdfc:1ff5:1512:5622::/64.

Parameters
TypeDirectionArgument NameDescription
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.


otBorderRoutingGetFavoredOmrPrefix#

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

Gets the currently favored Off-Mesh-Routable (OMR) Prefix.

Parameters
TypeDirectionArgument NameDescription
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.

Parameters
TypeDirectionArgument NameDescription
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.

Parameters
TypeDirectionArgument NameDescription
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.

Parameters
TypeDirectionArgument NameDescription
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.

Parameters
TypeDirectionArgument NameDescription
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)

This function initializes an otBorderRoutingPrefixTableIterator.

Parameters
TypeDirectionArgument NameDescription
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)

This function iterates over the entries in the Border Router's discovered prefix table.

Parameters
TypeDirectionArgument NameDescription
otInstance *[in]aInstance

The OpenThread instance.

otBorderRoutingPrefixTableIterator *[inout]aIterator

A pointer to the iterator.

otBorderRoutingPrefixTableEntry *[out]aEntry

A pointer to the entry to populate.