/* * Copyright (c) 2015-2018, Arm Limited and affiliates. * SPDX-License-Identifier: BSD-3-Clause * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the copyright holder nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /** * Thread CoAP management client implementation. * * This client must be enabled for ROUTER, REED and HOST that want to publish network data. * * HOST * - sending own network data to thread leader * * REED * - Router id assignment client. */ #ifndef THREAD_MANAGEMENT_CLIENT_H_ #define THREAD_MANAGEMENT_CLIENT_H_ #include #include "thread_management_if.h" #define TRACE_GROUP_THREAD_MANAGEMENT_CLIENT "TMFs" /** Initialise thread management client. * * This instance needs to bee initialised once for each thread network interface. * if only one thread instance is supported this is needed to call only once. * * /param interface interface id of this thread instance. * */ void thread_management_client_init(int8_t interface_id); /** Delete dhcp thread dhcp client. * * When this is called all addressed assigned by this module are removed from stack. */ void thread_management_client_delete(int8_t interface_id); /** Router id handler callback. * * callback to inform when new router id is received from leader. * * /param status status of operation 0 success, -1 not accepted * /param router_rloc router rloc16 address assigned to this device. 0xfffe if failure. * /param router_mask_ptr Router id mask of current thread network. * */ typedef void thread_management_client_router_id_cb(int8_t interface_id, int8_t status, uint16_t router_rloc, const uint8_t router_mask_ptr[9]); /** request router id from the leader of network. * * /param mac extented mac address of requested device. * /param router_id old router id of this device, 0xffff if new address requested. * /param id_cb callback to inform result of the request. * /param status See thread 1.1.0 specification, chapter 5.19.5 for possible values. * * return positive value indicates COAP message ID of the request, zero or negative value indicates failure */ int thread_management_client_router_id_get(int8_t interface_id, uint8_t mac[8], uint16_t router_id, thread_management_client_router_id_cb *id_cb, uint8_t status); /** release router id from the leader of network. * * /param mac extented mac address of requested device. * /param router_id router id of this device. * /param id_cb callback to inform result of the request when calling this status is -1 and address is 0xfffe. * * return 0 success other values failure */ int thread_management_client_router_id_release(int8_t interface_id, uint8_t mac[8], uint16_t router_id, thread_management_client_router_id_cb *id_cb); /** Network data set response callback. * * callback to inform if network data was set to leader. * * /param status status of operation 0 success, -1 failure from leader received * /param data_ptr pointer to network data TLV that leader accepted. * /param data_len length of network data. * */ typedef void thread_management_client_network_data_set_cb(int8_t interface_id, int8_t status, uint8_t *data_ptr, uint16_t data_len); /** send network data to leader of the network * * /param interface interface id of this thread instance. * /param data_ptr pointer to network data TLV to publish for leader of the network. * /param data_len length of network data. * /param set_cb callback to see if setting of network data was success. can be NULL. * *return 0 success other values failure */ int thread_management_client_network_data_register(int8_t interface_id, uint8_t *data_ptr, uint16_t data_len, thread_management_client_network_data_set_cb *set_cb); /** Send network data clear for leader to clean network data related to this rloc16. * * /param interface interface id of this thread instance. * /param rloc16 rloc16 of device which network data is unregistered. * *return 0 success other values failure */ int thread_management_client_network_data_unregister(int8_t interface_id, uint16_t rloc16); /** Send neighbor discovery data request to given destination. Requested options will be: * -Recursive DNS Server Option (25) and, * -DNS Search List Option (31). * * /param interface interface id of this thread instance. * /param destination address where message is sent. * /param options requested nd data options according to RFC6106 * /param options_len number of options requested * /param set_cb callback to be called when a response arrives. * *return 0 success other values failure */ int thread_management_client_neighbor_discovery_data_request(int8_t interface_id, const uint8_t destination[16], const uint8_t *options, uint8_t options_len, thread_management_client_network_data_set_cb *set_cb); /** Get interface_id of based on coap service_id * * * /param service_id coap service id. * *return interface_id of thread instance if successful and -1 for failure */ int thread_management_client_get_interface_id_by_service_id(int8_t service_id); /** send active configuration dataset get for parent * * /param interface_id interface id of this thread instance. * /param dst_address destination address * *return 0 success other values failure */ int8_t thread_management_client_active_get(int8_t interface_id, uint8_t *dst_address); /** send active configuration dataset set for parent * * /param interface_id interface id of this thread instance. * /param dst_address destination address * *return 0 success other values failure */ int8_t thread_management_client_active_set(int8_t interface_id, uint8_t *dst_address); /** send pending configuration dataset get query for parent * * /param interface_id interface id of this thread instance. * /param dst_address destination address * *return 0 success other values failure */ int8_t thread_management_client_pending_get(int8_t interface_id, uint8_t *dst_address); /** send next pending configuration dataset * * /param interface_id interface id of this thread instance. * /param dst_address destination address * *return 0 success other values failure */ int8_t thread_management_client_pending_set(int8_t interface_id, uint8_t *dst_address); /** Send application provisioning message * * /param interface_id interface id of this thread instance. * /param dst_address destination address * /param port destination port * *return 0 success other values failure */ int thread_management_client_provision_request(int8_t interface_id, uint8_t *dst_address, uint16_t port); /** Send out Address Notification proactively. * * \param interface_id interface id of this Thread instance. * \param address The target address added to the interface. * \param rloc RLOC responsible for the target address. * \param ml_eid Mesh-local EID value. * \param dst_addr The address to send the notification to. */ void thread_management_client_proactive_an(int8_t interface_id, const uint8_t address[16], const uint16_t rloc, const uint8_t ml_eid[8], const uint8_t dst_addr[16]); /** Delete COAP message . * * Delete COAP message that is sent to COAP service. * * \param interface_id interface id of this Thread instance. * \param coap_message_id COAP message to be deleted. */ void thread_management_client_coap_message_delete(int8_t interface_id, uint16_t coap_message_id); /** Clear old partition data. * * Clear data related to old partition, like pending COAP transactions. * * \param interface_id interface id of this Thread instance. */ void thread_management_client_old_partition_data_clean(int8_t interface_id); #endif /* THREAD_MANAGEMENT_CLIENT_H_ */