15 KiB
Thread APIs
API Headers
To manage Thread, include the following headers into your application:
#include thread_commissioning_api.h
#include thread_management_api.h
The subsequent sections describe API functionality for Thread. To understand the ideas behind Thread, read ARM mbed Thread Stack Overview.
Thread Commissioning API
Thread Commissioning API is used for enabling the Thread commissioning process.
Registering a commissioner candidate
If the Border Router or a Commissioner Router interface is up in the network, a Thread commissioner candidate can begin to register with the network.
To start the registration process:
int commissioning_register(uint8_t interface_id);
Parameter | Description |
---|---|
interface_id |
The interface ID of the commissioner candidate. |
- Response
- -1, if a commissioner exists already.
- -2, if failed to create a commissioner, interface does not exist.
- 0, success.
Unregistering a commissioner candidate
Unregisters the commissioner candidate from the network.
To start the unregistration:
int commissioning_unregister(uint8_t interface_id);
Parameter | Description |
---|---|
interface_id |
The interface ID of the commissioner. |
- Response
- any value other than 0, failure.
- 0, success.
Petitioning process
After the registration to the network, the commissioner candfidate initiates petitioning to validate itself as the sole commissioner of the network via a Commissioner Router or Border Router (Commissioner Representative) to the Thread Leader Router.
To initiate the petitioning process:
int commissioning_petition_start(int8_t interface_id, char *commissioner_id_ptr, commissioning_status_cb *status_cb_ptr);
Parameter | Description |
---|---|
interface_id |
ID of the interface. |
commissioner_id_ptr |
A pointer to the commissioner ID. |
status_cb_ptr |
A pointer to the callback function to receive the state of the commissioning process. |
- Response
- any value other than 0, failure.
- 0, success.
Commissioning state enumeration
Defines current state of the petition made by the commissioner. The following enumeration type definition is used:
typedef enum {
COMMISSIONING_STATE_ACCEPT,
COMMISSIONING_STATE_PENDING,
COMMISSIONING_STATE_REJECT,
COMMISSIONING_STATE_NO_NETWORK
} commissioning_state_e;
State | Description |
---|---|
COMMISSIONING_STATE_ACCEPT |
Accepted state, everything went fine. |
COMMISSIONING_STATE_PENDING |
Commissioning request is still pending. |
COMMISSIONING_STATE_REJECT |
Request rejected by the Leader Router. |
COMMISSIONING_STATE_NO_NETWORK |
No Thread network found. |
Petition response callback
This is the callback function that handles the commissioning status response after a petition request is initiated. A pointer to this callback is given as a parameter to the petition initiation function.
typedef int (commissioning_status_cb)(int8_t interface_id, commissioning_state_e state);
Petition keep alive messages
The commissioner keeps secure commissioning session via a Commissioner Router or Border Router with the Leader Router using keep alive messages that can be secured and authenticated using DTLS.
To set the keep alive messages going:
int commissioning_petition_keep_alive(int8_t interface_id, commissioning_state_e state);
Adding a joiner device
A device that wants to join the Thread network is typically called a joiner device. Such a device is added to the Thread network through the commissioning process.
To add a joiner device to the Thread network:
int commissioning_device_add(int8_t interface_id, bool short_eui64,
uint8_t EUI64[8], uint8_t *PSKd_ptr, uint8_t PSKd_len,
commissioning_joiner_finalisation_cb *joining_device_cb_ptr);
Parameter | Description |
---|---|
interface_id |
ID of the Commissioner interface. |
short_eui64 |
A boolean determining if we will use a short EUI64 address for Bloom filter generation or not. |
EUI64[8] |
A pointer to the buffer where the EUI64 bit address is stored. |
PSKd_ptr |
A pointer to the pre-shared key of the device. |
PSKd_len |
Length of the pre-shared key. Minimum of 6 uppercase alphanumeric characters long. |
joining_device_cb_ptr |
A pointer to the callback function, to receive the result of the joining process. |
- Response
- 0, success.
- failure otherwise.
Removing a joiner device
To remove a joiner device from the Thread network:
int commissioning_device_delete(int8_t interface_id, uint8_t EUI64[8]);
Parameter | Description |
---|---|
interface_id |
ID of the Commissioner interface. |
EUI64[8] |
A pointer to the buffer where the EUI64 bit address is stored. |
- Response
- 0, success.
- failure otherwise.
Joining finalization callback
This is the callback function that provides the handler for the joining process responses.
typedef int (commissioning_joiner_finalisation_cb)(int8_t interface_id,
uint8_t EUI64[8], uint8_t *message_ptr, uint16_t message_len);
Parameter | Description |
---|---|
interface_id |
ID of the Commissioner interface. |
EUI64[8] |
A pointer to the buffer where the EUI64 bit address is stored. |
message_ptr |
A pointer to a MeshCoP TLV message buffer. For parsing this message, you can use thread_meshcop_lib.h header. |
message_len |
Length of the message. |
- Response
- 0, success.
- failure otherwise.
Thread Management API
This API enables the user to manage a Thread network configuration. This interface essentially provides the capability to read or write various parameters related to Thread network.
Parameter Name | Description |
---|---|
Network Name |
Read/Write. |
Security Policy |
Read/Write. |
Steering Data |
Read/Write. |
Commissioning Data Time-Stamp |
Read/Write. |
Commissioning Credential, PSKc |
Write only. |
Network Master Key |
Read Only when policy allows. |
Network Key Sequence |
Read Only when policy allows. |
Network Mesh Local ULA |
Read Only. |
Border Router Locator |
Read Only. |
Commissioner Session ID |
Read Only. |
XPANID |
Read Only. |
PANID |
Read Only. |
Channel |
Read Only. |
Registering a Thread Management Interface
To instantiate a Thread Management Interface which can in turn start the Thread Management Session:
int thread_management_register(int8_t interface_id);
Parameter | Description |
---|---|
interface_id |
ID of the management interface. |
- Response
- An integer other than 0 or -1, the
instance_id
, a handle of the management interface. - 0, if the stack failed to allocate memory for the management session.
- -1, if the stack failed to free up memory for the management session.
Unregister a Thread Management Interface
To remove a Thread Management Interface and therefore remove any management session bound to that interface:
int thread_management_register(int8_t interface_id);
Parameter | Description |
---|---|
interface_id |
ID of the management interface. |
- Response
- 0, success.
- -1, failure.
Setting up the Thread network name
To set the name for Thread network:
int thread_management_set_network_name(int8_t instance_id, uint8_t *name_ptr, uint8_t name_len, management_set_response_cb *cb_ptr);
Parameter | Description |
---|---|
instance_id |
Instance ID of the management session. |
name_ptr |
Pointer to the new name. |
name_len |
Length of the name. |
cb_ptr |
Pointer to the management response callback function. |
- Response
- 0, success.
- <0, failure.
Thread management response callback
To receive the response to the Thread management commands:
typedef int (management_set_response_cb)(int8_t interface_id, management_state_e status);
Parameter | Description |
---|---|
interface_id |
Interface ID of the management session. |
status |
Result status of the request. |
Thread management states
An enumeration type definition is used to set and read the state of the Thread management session requests.
typedef enum {
MANAGEMENT_STATE_REJECT,
MANAGEMENT_STATE_PENDING,
MANAGEMENT_STATE_ACCEPT
} management_state_e;
Enumeration | Description |
---|---|
MANAGEMENT_STATE_REJECT |
Thread management suit has rejected the request. |
MANAGEMENT_STATE_PENDING |
Request is still pending. |
MANAGEMENT_STATE_ACCEPT |
Thread management suit has accepted the request. |
Setting up security policy
The function thread_management_set_security_policy()
is used to regulate the current security policy in a Thread network. Using this function, you can enable and disable external and native commissioning and set the network security key rotation time.
int thread_management_set_security_policy(int8_t instance_id, uint8_t options, uint16_t rotation_time, management_set_response_cb *cb_ptr);
Parameter | Description |
---|---|
instance_id |
Instance ID of the management session. |
options |
If the bit number 8 is set to 1, external commissioning is restricted. If bit number 7 is set to 1, native commissioning is restricted. |
rotation_time |
Thread key rotation time in hours. |
cb_ptr |
A pointer to management_set_response_cb callback function. |
- Response
- 0, success.
- <0, failure.
Data Steering
The function thread_management_set_steering_data()
steers the way how Thread network allows joiners to join the network. Using this function, you can enable and disable the joining process or filter out the joiners. A Bloom filter is used for the filtering. The length of Bloom filter can be set from 1-16 bytes. The first bit of the first byte (set to 0
)indicates whether to use EUI64 addresses or bottom 24 bits of the EUI64 address (set to 1
).
int thread_management_set_steering_data(int8_t instance_id, uint8_t *steering_data_ptr, uint8_t steering_data_len, management_set_response_cb *cb_ptr);
Parameter | Description |
---|---|
instance_id |
Instance ID of the management session. |
steering_data_ptr |
A pointer to the steering data. If all bits are set to 0 , no joiners will be allowed to join. If all bits are set to 1, any joiner is allowed to join. A mix of 1s and 0s can be defined if you are using a Bloom filter. This filter allows any specific devices to join and prohibits others. |
steering_data_len |
Length of the steering data. |
cb_ptr |
A pointer to management_set_response_cb callback function. It can be set to NULL, if no response is required. |
- Response
- 0, success.
- <0, failure.
Thread commissioning time-stamps
To add time-stamps to the Thread commissioning related chunks of data:
int thread_management_set_commissioning_data_timestamp(int8_t instance_id, uint64_t time, management_set_response_cb *cb_ptr);
Parameter | Description |
---|---|
instance_id |
Instance ID of the management session. |
time |
64 bits in total. Upper 48 bits are is time in seconds. Lower 16 bits are fractional portion of time. |
rotation_time |
Thread key rotation time in hours. |
cb_ptr |
A pointer to management_set_response_cb callback function. |
- Response
- 0, success.
- <0, failure.
Setting up commissioning credentials
To set up the security credentials for the Thread network:
int thread_management_set_commissioning_credentials(int8_t instance_id, uint8_t PSKc[32], uint8_t PSKc_len, management_set_response_cb *cb_ptr);
Parameter | Description |
---|---|
instance_id |
Instance ID of the management session. |
PSKc |
Maximum 32 bytes long pre-shared key used as a network security credential. |
PSKc_len |
Length of the pre-shared key used. |
cb_ptr |
A pointer to management_set_response_cb callback function. |
- Response
- 0, success.
- <0, failure.
Collecting Thread management information
Fetching Thread Management Information
The function thread_management_get()
is used to collect Thread management related information from the any device in the Thread network.
Parameter | Description |
---|---|
instance_id |
Instance ID of the management session. |
dst_addr |
Destination address; the address of a remote device from whome it is desirable to fetch management information. If however, the address is not provided, a request is sent to the leader of the network for this purpose. If a native commissioner is used, the request for management information is sent to the border router. |
uri_ptr |
The ASCII string for the URI. This string identifies the CoAP URI for the desired resource. For example, /c/mg identifies the management get information resource. |
fields_ptr |
A pointer to management fields; a set of TLVs. A list of such TLVs can be found in thread_meshcop_lib.h . |
field_count |
Number of fields in the field pointer array (set of TLVs). |
cb_ptr |
A pointer to management_get_response_cb callback function carrying the result of the operation. |
- Response
- 0, success.
- <0, failure.
Setting up Thread Management Information
The function thread_management_set()
is used to set up Thread management related information to any device in the Thread network.
Parameter | Description |
---|---|
instance_id |
Instance ID of the management session. |
dst_addr |
Destination address; the address of a remote device where it is desired to set up management information. If however, the address is not provided, a request is sent to the leader of the network for this purpose. If a native commissioner is used, the request for setting up management information is sent to the border router. |
uri_ptr |
The ASCII string for the URI. This string identifies the CoAP URI for the desired resource. For example, /c/ms identifies the management set information resource. |
data_ptr |
A pointer to the desired set of TLVs. |
field_count |
Number of fields in the field pointer array (set of TLVs). |
cb_ptr |
A pointer to management_get_response_cb callback function carrying the result of the operation. |
- Response
- 0, success.
- <0, failure.
Thread management get response callback
The callback function (management_get_response_cb)
is used for receiving the information regarding Thread management from various fields related to the Thread management. Such fields can be parsed using macros defined in thread_meshcop_lib.h
.
typedef int (management_get_response_cb)(int8_t instance_id, management_state_e status, uint8_t *response_message_ptr, uint16_t response_message_len);
Parameter | Description |
---|---|
instance_id |
Instance ID of the management session. |
status |
The state of the management interface given by management_state_e . |
response_message_ptr |
A pointer to a MeshCoP TLV structure that contains the requested TLVs. |
response_message_len |
Length of the response message. |