BA
/
BaBoRo1
Embed:
(wiki syntax)
Show/hide line numbers
thread_resolution_client.h
00001 /* 00002 * Copyright (c) 2015-2017, Arm Limited and affiliates. 00003 * SPDX-License-Identifier: BSD-3-Clause 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 3. Neither the name of the copyright holder nor the 00014 * names of its contributors may be used to endorse or promote products 00015 * derived from this software without specific prior written permission. 00016 * 00017 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00018 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00019 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00020 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 00021 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00022 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00023 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00024 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00025 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00026 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00027 * POSSIBILITY OF SUCH DAMAGE. 00028 */ 00029 00030 /** 00031 * Thread CoAP address resolution client implementation. 00032 * 00033 * This client must be enabled for ROUTER, REED and non-sleepy HOST. 00034 * 00035 */ 00036 00037 00038 #ifndef THREAD_RESOLUTION_CLIENT_H_ 00039 #define THREAD_RESOLUTION_CLIENT_H_ 00040 #include <ns_types.h> 00041 00042 #define TRACE_GROUP_THREAD_RESOLUTION_CLIENT "TRsC" 00043 00044 /** Notification callback. 00045 * 00046 * callback to inform when unsolicited notification is received 00047 * 00048 * \param interface_id interface id of thread instance 00049 * \param ip_addr IP address from response 00050 * \param loc_addr 16-bit "RLOC" address from response 00051 * \param ml_eid 64-bit extended MAC address from response 00052 */ 00053 typedef void thread_resolution_client_notification_cb(int8_t interface_id, const uint8_t ip_addr[16], uint16_t loc_addr, const uint8_t ml_eid[8]); 00054 00055 /** Resolution response callback. 00056 * 00057 * callback to inform when response to resolution is received 00058 * 00059 * \param interface_id interface id of thread instance 00060 * \param status status of operation 0 success, -1 failed 00061 * \param ip_addr IP address from response 00062 * \param loc_addr 16-bit "RLOC" address from response 00063 * \param last_transaction_time last transaction time from response; 0 if not present 00064 * \param mleid Target MLEID 00065 * 00066 */ 00067 typedef void thread_resolution_client_response_cb(int8_t interface_id, int8_t status, const uint8_t ip_addr[16], uint16_t loc_addr, uint32_t last_transaction_time, uint8_t *mleid); 00068 00069 /** Error callback. 00070 * 00071 * callback to inform when address error is received 00072 * 00073 * \param interface_id interface id of thread instance 00074 * \param ip_addr target IP address from error 00075 * \param ml_eid 64-bit ML-EID from error 00076 */ 00077 typedef void thread_resolution_client_error_cb(int8_t interface_id, const uint8_t ip_addr[16], const uint8_t ml_eid[8]); 00078 00079 #ifdef HAVE_THREAD_NEIGHBOR_DISCOVERY 00080 00081 /** Initialise thread resolution client. 00082 * 00083 * This instance needs to be initialised once for each thread network interface. 00084 * if only one thread instance is supported this is needed to call only once. 00085 * 00086 * \param interface_id interface id of this thread instance. 00087 */ 00088 00089 void thread_resolution_client_init(int8_t interface_id); 00090 00091 /** Delete Thread resolution client. 00092 * 00093 * \param interface_id interface id of this thread instance. 00094 */ 00095 void thread_resolution_client_delete(int8_t interface_id); 00096 00097 00098 /** Set callback pointer for notifications 00099 * 00100 * \param interface_id interface id of this thread instance. 00101 * \param notification_cb callback function 00102 */ 00103 void thread_resolution_client_set_notification_cb(int8_t interface_id, thread_resolution_client_notification_cb notification_cb); 00104 00105 /** Set callback pointer for errors 00106 * 00107 * \param interface_id interface id of this thread instance. 00108 * \param error_cb callback function 00109 */ 00110 void thread_resolution_client_set_error_cb(int8_t interface_id, thread_resolution_client_error_cb error_cb); 00111 00112 /** Initiate address resolution 00113 * 00114 * Intent is that this API should ultimately implement collation of multiple 00115 * replies and selection by time indicators, and it should also implement the 00116 * "retry delay" blockage. 00117 * 00118 * Initial implementation will just be a direct shim to CoAP, and return every 00119 * POSTed response. 00120 * 00121 * \note The callback sets a per-instance callback pointer; it's not possible 00122 * to have different callbacks for multiple ongoing resolutions. Indeed, there 00123 * is currently no transaction state. 00124 * 00125 * \param interface_id interface id of this thread instance. 00126 * \param ip_addr IP address to resolve 00127 * \param resp_cb callback to inform result of the request. 00128 * 00129 * return 0 success (resolution in progress), -1 failure 00130 */ 00131 int thread_resolution_client_resolve(int8_t interface_id, uint8_t ip_addr[16], thread_resolution_client_response_cb *resp_cb); 00132 00133 /** Send an address error message 00134 * 00135 * \param interface_id interface id of this thread instance. 00136 * \param dest_ip_addr address to send error message (unicast or multicast) 00137 * \param target_ip_addr target IP address that is in error 00138 * \param ml_eid ML-EID for error report (routers with different ML-EID are in error) 00139 */ 00140 int thread_resolution_client_address_error(int8_t interface_id, const uint8_t dest_ip_addr[16], const uint8_t target_ip_addr[16], const uint8_t ml_eid[8]); 00141 00142 /** Periodic timer 00143 * 00144 * Called to maintain address query set. 00145 * 00146 * \param interface_id interface id of this thread instance. 00147 * \param seconds number of seconds elapsed since last call (usually 1) 00148 */ 00149 void thread_resolution_client_timer(int8_t interface_id, uint16_t seconds); 00150 00151 #else //HAVE_THREAD_NEIGHBOR_DISCOVERY 00152 00153 #define thread_resolution_client_init(interface_id) 00154 #define thread_resolution_client_delete(interface_id) 00155 #define thread_resolution_client_set_notification_cb(interface_id, notification_cb) 00156 #define thread_resolution_client_set_error_cb(interface_id, error_cb) 00157 #define thread_resolution_client_resolve(interface_id, ip_addr, resp_cb) (-1) 00158 #define thread_resolution_client_address_error(interface_id, dest_ip_addr, target_ip_addr, ml_eid) 00159 #define thread_resolution_client_timer(interface_id, seconds) 00160 00161 #endif //HAVE_THREAD_NEIGHBOR_DISCOVERY 00162 00163 #endif /* THREAD_RESOLUTION_CLIENT_H_ */
Generated on Tue Jul 12 2022 12:22:26 by
