Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
thread_common.h
00001 /* 00002 * Copyright (c) 2014-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 #ifndef LOWPAN_THREAD_H_ 00030 #define LOWPAN_THREAD_H_ 00031 00032 #include "ns_list.h" 00033 #include "libDHCPv6/libDHCPv6.h" 00034 #include "libDHCPv6/libDHCPv6_server.h" 00035 #include "6LoWPAN/Thread/thread_routing.h" 00036 #include "6LoWPAN/Thread/thread_network_data_storage.h" 00037 #include "thread_management_if.h" 00038 #include "thread_commissioning_api.h" 00039 #include "thread_border_router_api.h" 00040 #include "eventOS_event_timer.h" 00041 #include "MLE/mle_tlv.h" 00042 00043 #define MAX_MLE_CHALLENGE_LENGTH 32 00044 00045 /* 00046 * How long a Leader must wait after a router ID has become unassigned before it can be reused. 00047 * 00048 */ 00049 #define ROUTER_ID_REUSE_DELAY 100 //Seconds 00050 00051 #define ROUTER_ID_INFINITY_DELAY 90 //Seconds 00052 00053 #define NETWORK_ID_TIMEOUT 120 //seconds 00054 00055 // Values when adverticements are made faster when leader connection is restored 00056 #define NETWORK_ID_SPEEDUP 60 //seconds 00057 #define NETWORK_ID_SPEEDUP_MAX 100 //seconds 00058 00059 #define DHCPV6_ENTERPRISE_THREAD 0x0000AFAA 00060 #define DHCPV6_OPTION_VENDOR_SPESIFIC_INFO_LEN 0x0011 00061 #define DHCPV6_ROUTER_ID_OPTION 0x0000 00062 #define DHCPV6_ROUTER_ID_OPTION_LEN 0x0009 00063 00064 #define THREAD_KEY_INDEX(seq) ((uint8_t) (((seq) & 0x0000007f) + 1)) 00065 00066 extern uint8_t thread_version; 00067 extern uint32_t thread_delay_timer_default; 00068 extern uint32_t thread_router_selection_jitter; 00069 extern uint16_t thread_joiner_port; 00070 00071 typedef enum { 00072 THREAD_STATE_NETWORK_DISCOVER, // Not commissioned to Thread network 00073 THREAD_STATE_REATTACH, // Connection to leader lost, searching for new parent 00074 THREAD_STATE_REATTACH_RETRY, // Connection to leader lost, searching for new parent with REED bit is set 00075 THREAD_STATE_ATTACH_ANY, // Searching for all partitions with leader connectivity 00076 THREAD_STATE_CONNECTED, // Attached to Thread network - can't route 00077 THREAD_STATE_CONNECTED_ROUTER, // Attached to Thread network - Routing enabled 00078 } thread_attach_state_e; 00079 00080 typedef enum { 00081 THREAD_DEVICE_MODE_ROUTER, 00082 THREAD_DEVICE_MODE_FULL_END_DEVICE, 00083 THREAD_DEVICE_MODE_END_DEVICE, 00084 THREAD_DEVICE_MODE_SLEEPY_END_DEVICE, 00085 } thread_attach_device_mode_e; 00086 00087 typedef enum { 00088 THREAD_COMMISSIONER_NOT_REGISTERED, 00089 THREAD_COMMISSIONER_REGISTRATION_OBSOLETE, 00090 THREAD_COMMISSIONER_REGISTERED 00091 } thread_commissioner_register_status_e; 00092 00093 typedef struct thread_mcast_child { 00094 uint8_t mac64[8]; 00095 ns_list_link_t link; 00096 } thread_mcast_child_t; 00097 00098 typedef NS_LIST_HEAD (thread_mcast_child_t, link) thread_mcast_children_list_t; 00099 00100 typedef struct thread_registered_mcast_addr { 00101 uint8_t address[16]; 00102 thread_mcast_children_list_t children; 00103 ns_list_link_t link; 00104 } thread_registered_mcast_addr_t; 00105 00106 typedef NS_LIST_HEAD (thread_registered_mcast_addr_t, link) thread_registered_mcast_addr_list_t; 00107 00108 typedef struct thread_pending_child_id_req { 00109 uint8_t euid64[8]; 00110 uint8_t eiid[8]; 00111 uint8_t linkMargin; 00112 uint8_t mode; 00113 uint32_t keySeq; 00114 uint8_t keyId; 00115 bool request_active_config; 00116 uint64_t active_timestamp; 00117 uint64_t pending_timestamp; 00118 uint32_t frameCounter; 00119 uint32_t mleFrameCounter; 00120 uint32_t timeout; 00121 uint16_t version; 00122 bool shortAddressReq: 1; 00123 bool networkDataReq: 1; 00124 bool routeReq: 1; 00125 ns_list_link_t link; /*!< List link entry */ 00126 } thread_pending_child_id_req_t; 00127 00128 typedef NS_LIST_HEAD (thread_pending_child_id_req_t, link) thread_pending_id_req_list_t; 00129 00130 typedef struct thread_router_id_entry_s { 00131 uint8_t eui64[8]; 00132 uint32_t validLifeTime; 00133 bool reUsePossible; 00134 } thread_router_id_entry_t; 00135 00136 typedef struct thread_network_data_req_s { 00137 uint8_t request_destination[16]; 00138 uint8_t timeout; 00139 bool active; 00140 } thread_network_data_req_t; 00141 00142 typedef struct thread_leader_info_s { 00143 //DHCPv6 Allocated Router Id's 00144 thread_router_id_entry_t thread_router_id_list[64]; 00145 uint8_t leader_id_seq_timer; 00146 uint8_t master_router_id_mask[8]; 00147 uint8_t maskSeq; 00148 } thread_leader_info_t; 00149 00150 typedef struct thread_leader_data_s { 00151 uint32_t partitionId; //Unique partition ID 00152 uint8_t dataVersion; //Leader data version number 00153 uint8_t stableDataVersion; //Leader data stable version number 00154 uint8_t leaderRouterId; //Leader Router ID 00155 uint8_t weighting; //Data weighting 00156 } thread_leader_data_t; 00157 00158 typedef struct thread_connectivity_s { 00159 uint16_t SEDBufferSize; 00160 int8_t parentPriority; 00161 uint8_t linkQuality3; 00162 uint8_t linkQuality2; 00163 uint8_t linkQuality1; 00164 uint8_t leaderCost; 00165 uint8_t idSequence; 00166 uint8_t activeRouters; 00167 uint8_t SEDDatagramCount; 00168 } thread_connectivity_t; 00169 00170 typedef struct thread_parent_info_s { 00171 uint8_t mac64[8]; 00172 uint16_t shortAddress; 00173 uint8_t router_id; 00174 uint8_t pathCostToLeader; 00175 bool childUpdatePending: 1; 00176 bool childUpdateProcessActive: 1; 00177 bool childUpdateProcessStatus: 1; 00178 } thread_parent_info_t; 00179 00180 00181 typedef struct thread_scanned_parent_s { 00182 thread_leader_data_t leader_data; 00183 uint8_t mac64[8]; 00184 uint8_t challengeData[MAX_MLE_CHALLENGE_LENGTH]; 00185 uint32_t linLayerFrameCounter; 00186 uint32_t mleFrameCounter; 00187 uint32_t keySequence; 00188 uint16_t shortAddress; 00189 uint8_t chal_len; 00190 uint8_t linkMarginFromParent; 00191 uint8_t linkMarginToParent; 00192 uint8_t security_key_index; 00193 uint8_t routeCostToLeader; 00194 uint8_t linkQuality3; 00195 uint8_t linkQuality2; 00196 uint8_t linkQuality1; 00197 int8_t parentPriority; 00198 uint8_t activeRouters; 00199 uint16_t version; 00200 uint16_t child_id_request_id; 00201 } thread_scanned_parent_t; 00202 00203 typedef struct thread_ula_prefix_s { 00204 uint8_t ulaPrefix[8]; 00205 bool ulaValid; 00206 } thread_ula_prefix_t; 00207 00208 typedef struct thread_master_secret_material_s { 00209 uint8_t historyKey[32]; 00210 uint32_t keySwitchGuardTimer; 00211 uint32_t keyRotation; 00212 bool historyKeyValid:1; 00213 bool valid_Info:1; 00214 uint8_t historyKeyId; 00215 } thread_master_secret_material_t; 00216 00217 /*This structure is used for storing active commissioner information*/ 00218 typedef struct thread_commissioner { 00219 uint8_t steering_data[16]; 00220 uint8_t border_router_address[16]; 00221 timeout_t *commissioner_timeout; 00222 char *commissioner_id_ptr; 00223 uint16_t session_id; /* session_id is valid even if commissioner is not valid */ 00224 thread_commissioner_register_status_e commissioner_registration; /* Only for Leader */ 00225 uint8_t steering_data_len; 00226 bool commissioner_valid:1; 00227 } thread_commissioner_t; 00228 00229 typedef struct thread_announcement_s { 00230 timeout_t *timer; 00231 uint64_t timestamp; 00232 uint16_t channel; 00233 uint16_t panid; 00234 uint8_t channel_page; 00235 uint8_t count; 00236 uint16_t period; 00237 bool announce_success; 00238 } thread_announcement_t; 00239 00240 typedef struct thread_router_select { 00241 uint8_t routerUpgradeThresHold; 00242 uint8_t routerDowngradeThresHold; 00243 uint8_t possibleDefaultParent; 00244 bool jitterTimerActive; 00245 uint16_t reedAdvertisementInterval; 00246 uint16_t reedAdvertisementJitterInterval; 00247 timeout_t *reedAdvertisementTimeout; 00248 } thread_router_select_t; 00249 00250 struct thread_extension_info; 00251 struct thread_extension_credentials; 00252 00253 typedef struct thread_previous_partition_info_s { 00254 uint32_t partitionId; //partition ID of the previous partition 00255 uint8_t idSequence; //idSequence last heard from the previous partition 00256 uint8_t weighting; //weighting last heard from the previous partition 00257 } thread_previous_partition_t; 00258 00259 00260 typedef struct thread_info_s { 00261 thread_routing_info_t routing; 00262 thread_master_secret_material_t masterSecretMaterial; 00263 thread_network_data_cache_entry_t networkDataStorage; 00264 thread_network_local_data_cache_entry_t localServerDataBase; 00265 thread_pending_id_req_list_t childIdReqPending; 00266 thread_commissioner_t registered_commissioner; 00267 thread_ula_prefix_t threadPrivatePrefixInfo; 00268 thread_router_select_t routerSelectParameters; 00269 thread_previous_partition_t previous_partition_info; 00270 thread_leader_info_t *leader_private_data; //Leader Proxy 00271 thread_parent_info_t *thread_endnode_parent; 00272 thread_leader_data_t *thread_leader_data; //Dynamic Learned Network Data 00273 thread_scanned_parent_t *thread_attach_scanned_parent; 00274 thread_commissioning_link_configuration_s *native_commissioner_link; 00275 thread_commissioning_native_select_cb *native_commissioner_cb; 00276 thread_network_data_tlv_cb *network_data_tlv_cb; 00277 thread_announcement_t *announcement_info; 00278 struct thread_extension_info *extension_info; 00279 struct thread_extension_credentials *extension_credentials_ptr; 00280 thread_attach_device_mode_e thread_device_mode; 00281 thread_attach_state_e thread_attached_state; //Indicate Thread stack state 00282 thread_registered_mcast_addr_list_t child_mcast_list; 00283 uint32_t host_link_timeout; 00284 uint32_t sleepy_host_poll_time; 00285 uint32_t testRandomPartitionId; 00286 uint16_t lastAllocatedChildAddress; 00287 uint16_t native_commissioner_port; 00288 uint16_t routerShortAddress; 00289 uint16_t reedJitterTimer; 00290 uint16_t routerIdReqCoapID; // COAP msg id of RouterID request 00291 int16_t childUpdateReqTimer; 00292 uint16_t proactive_an_timer; 00293 //uint8_t lastValidRouteMask[8]; 00294 int8_t interface_id; //Thread Interface ID 00295 uint8_t version; 00296 uint8_t testMaxActiveRouterIdLimit; //Default for this is 32 00297 uint8_t maxChildCount; //Default for this is 24 00298 uint8_t partition_weighting; 00299 bool rfc6775: 1; 00300 bool requestFullNetworkData: 1; 00301 bool leaderCab: 1; 00302 bool releaseRouterId: 1; 00303 bool networkSynch: 1; 00304 bool networkDataRequested: 1; 00305 bool end_device_link_synch: 1; 00306 bool router_mc_addrs_registered: 1; 00307 bool leader_synced:1; // flag used by leader after restart 00308 } thread_info_t; 00309 00310 #ifdef HAVE_THREAD 00311 00312 struct link_configuration; 00313 struct if_group_entry; 00314 00315 /* Ceil log2 function Needed to calculate specific values for thread TLVs. 00316 * This is very approximate 00317 */ 00318 uint16_t thread_log2_aprx(uint32_t n); 00319 00320 void thread_anycast_address_policy_update(const thread_info_t *thread_info, bool addPolicy); 00321 00322 #define thread_info(cur) ((cur)->thread_info) 00323 #define thread_am_reed(cur) ((cur)->thread_info && (cur)->thread_info->thread_attached_state == THREAD_STATE_CONNECTED && (cur)->thread_info->thread_device_mode == THREAD_DEVICE_MODE_ROUTER) 00324 #define thread_am_router(cur) ((cur)->thread_info && (cur)->thread_info->thread_attached_state == THREAD_STATE_CONNECTED_ROUTER && (cur)->thread_info->thread_device_mode == THREAD_DEVICE_MODE_ROUTER) 00325 #define thread_is_connected(cur) ((cur)->thread_info && ((cur)->thread_info->thread_attached_state == THREAD_STATE_CONNECTED || (cur)->thread_info->thread_attached_state == THREAD_STATE_CONNECTED_ROUTER)) 00326 #define thread_am_host(cur) ((cur)->thread_info && \ 00327 ((cur)->thread_info->thread_device_mode == THREAD_DEVICE_MODE_SLEEPY_END_DEVICE ||\ 00328 (cur)->thread_info->thread_device_mode == THREAD_DEVICE_MODE_END_DEVICE ||\ 00329 (cur)->thread_info->thread_device_mode == THREAD_DEVICE_MODE_FULL_END_DEVICE)) 00330 00331 //int thread_configuration_save(thread_info_t *thread_info, link_configuration_s *leader_link_setup); 00332 00333 bool thread_leader_commissioner_create(thread_info_t *thread_info); 00334 void thread_leader_commissioner_free(thread_info_t *thread_info); 00335 00336 bool thread_leader_data_parse(uint8_t *ptr, uint16_t dataLength, thread_leader_data_t *leaderDataBuf); 00337 bool thread_connectivity_tlv_parse(uint8_t *ptr, uint16_t dataLength, thread_connectivity_t *connectivityTlv); 00338 00339 thread_leader_data_t *thread_leader_data_get(thread_info_t *info); 00340 thread_parent_info_t *thread_parent_data_allocate(thread_info_t *info); 00341 void thread_data_base_init(thread_info_t *thread_info, int8_t interfaceId); 00342 int thread_info_allocate_and_init(protocol_interface_info_entry_t *cur); 00343 void thread_info_deallocate(protocol_interface_info_entry_t *cur); 00344 int thread_init(protocol_interface_info_entry_t *cur); 00345 int thread_attach_ready(protocol_interface_info_entry_t *cur); 00346 bool thread_attach_active_router(protocol_interface_info_entry_t *cur); 00347 bool thread_scan_mask_validation(protocol_interface_info_entry_t *cur, uint8_t mask); 00348 int thread_route_ready_to_leader(protocol_interface_info_entry_t *cur); 00349 void thread_timer(protocol_interface_info_entry_t *cur, uint8_t ticks); 00350 void thread_seconds_timer(protocol_interface_info_entry_t *cur, uint32_t ticks); 00351 bool thread_insist_that_mesh_isnt_a_link(const protocol_interface_info_entry_t *cur); 00352 bool thread_addr_is_mesh_local(const uint8_t *addr, const protocol_interface_info_entry_t *cur); 00353 bool thread_on_mesh_route_possible_add(thread_attach_device_mode_e threadMode); 00354 bool thread_addr_is_mesh_local_16(const uint8_t *addr, const protocol_interface_info_entry_t *cur); 00355 uint8_t *thread_addr_write_mesh_local_16(uint8_t ip_addr_out[16], uint16_t addr16, const thread_info_t *thread_info); 00356 int thread_leader_ul16_address_get(thread_info_t *thread_info, uint8_t *address_ptr); 00357 void thread_network_data_request_send(protocol_interface_info_entry_t *cur, uint8_t *requestDstAddress, bool delaydTrig); 00358 uint16_t thread_network_data_generate_stable_set(protocol_interface_info_entry_t *cur, uint8_t *result_ptr); 00359 00360 void thread_set_active_router(protocol_interface_info_entry_t *cur, if_address_entry_t *address_entry, uint8_t *routerId); 00361 uint8_t thread_get_router_count_from_route_tlv(mle_tlv_info_t *routeTlv); 00362 void thread_reset_neighbour_info(protocol_interface_info_entry_t *cur, mle_neigh_table_entry_t *neighbour); 00363 00364 void thread_child_id_request_entry_clean(protocol_interface_info_entry_t *cur); 00365 thread_pending_child_id_req_t *thread_child_id_request_entry_get(protocol_interface_info_entry_t *cur, uint8_t *euid64); 00366 void thread_child_id_request_entry_remove(protocol_interface_info_entry_t *cur, thread_pending_child_id_req_t *entry); 00367 thread_pending_child_id_req_t *thread_child_id_request_entry_get_from_the_list(protocol_interface_info_entry_t *cur); 00368 00369 thread_mcast_child_t *thread_child_mcast_entry_get(protocol_interface_info_entry_t *cur, const uint8_t *mcast_addr, const uint8_t *mac64); 00370 void thread_registered_mcast_addr_entry_clean(protocol_interface_info_entry_t *cur); 00371 thread_registered_mcast_addr_t *thread_registered_mcast_addr_entry_find(protocol_interface_info_entry_t *cur, const uint8_t *mcast_addr); 00372 void thread_child_mcast_entries_remove(protocol_interface_info_entry_t *cur, const uint8_t *mac64); 00373 00374 uint8_t thread_leader_data_tlv_size(protocol_interface_info_entry_t *cur); 00375 uint8_t *thread_leader_data_tlv_write(uint8_t *ptr, protocol_interface_info_entry_t *cur); 00376 uint8_t *thread_address_registration_tlv_write(uint8_t *ptr, protocol_interface_info_entry_t *cur); 00377 int thread_link_reject_send(protocol_interface_info_entry_t *interface, const uint8_t *ll64); 00378 thread_leader_info_t *thread_allocate_and_init_leader_private_data(void); 00379 thread_route_cost_t thread_link_quality_to_cost(thread_link_quality_e quality); 00380 thread_route_cost_t thread_link_cost_sum(thread_route_cost_t a, thread_route_cost_t b); 00381 thread_link_quality_e thread_link_margin_to_quality(thread_link_margin_t margin); 00382 uint_fast8_t thread_sum_rx_path_cost_and_link_cost(uint8_t inMargim, uint8_t outMargin, uint8_t pathCost); 00383 /* 00384 * Thread beacon payload handling functions 00385 */ 00386 int8_t thread_beacon_create_payload(struct protocol_interface_info_entry *cur); 00387 uint8_t thread_beacon_indication(uint8_t *ptr, uint8_t len, protocol_interface_info_entry_t *cur); 00388 00389 int thread_network_data_propagation(struct protocol_interface_info_entry *cur, uint8_t *childUnicastAddress, bool fullList); 00390 00391 uint8_t thread_route_option_size(protocol_interface_info_entry_t *cur); 00392 uint8_t *thread_route_option_write(protocol_interface_info_entry_t *cur, uint8_t *ptr); 00393 00394 /*Generic Thread TLV write*/ 00395 uint8_t *thread_connectivity_tlv_write(uint8_t *ptr, protocol_interface_info_entry_t *cur, uint8_t mode); 00396 00397 /*Network data TLV write*/ 00398 uint16_t thread_network_data_tlv_size(struct protocol_interface_info_entry *cur, bool fulllist); 00399 uint8_t *thread_network_data_tlv_write(struct protocol_interface_info_entry *cur, uint8_t *ptr, bool fulllist); 00400 00401 /* Active and pending operational dataset write*/ 00402 uint8_t *thread_active_timestamp_write(protocol_interface_info_entry_t *cur, uint8_t *ptr); 00403 uint16_t thread_active_operational_dataset_size(protocol_interface_info_entry_t *cur); 00404 uint8_t *thread_active_operational_dataset_write(protocol_interface_info_entry_t *cur, uint8_t *ptr); 00405 bool thread_active_operational_dataset_process(protocol_interface_info_entry_t *cur, uint8_t *ptr, uint16_t len, uint64_t dataset_timestamp); 00406 uint8_t *thread_pending_timestamp_write(protocol_interface_info_entry_t *cur, uint8_t *ptr); 00407 uint16_t thread_pending_operational_dataset_size(protocol_interface_info_entry_t *cur); 00408 uint8_t *thread_pending_operational_dataset_write(protocol_interface_info_entry_t *cur, uint8_t *ptr); 00409 bool thread_pending_operational_dataset_process(protocol_interface_info_entry_t *cur, uint64_t mle_pending_timestamp, uint8_t *ptr, uint16_t len); 00410 /*Write optional thread leader data TLV if leader data is known*/ 00411 uint8_t thread_pending_timestamp_tlv_size(protocol_interface_info_entry_t *cur); 00412 void thread_calculate_key_guard_timer(protocol_interface_info_entry_t *cur, link_configuration_s *linkConfiguration, bool is_init); 00413 void thread_set_link_local_address(protocol_interface_info_entry_t *cur); 00414 void thread_mcast_group_change(struct protocol_interface_info_entry *interface, struct if_group_entry *group, bool group_added); 00415 void thread_old_partition_data_purge(protocol_interface_info_entry_t *cur); 00416 00417 #else // HAVE_THREAD 00418 00419 NS_DUMMY_DEFINITIONS_OK 00420 00421 #define thread_info(cur) ((thread_info_t *) NULL) 00422 #define thread_am_router(cur) (false) 00423 #define thread_am_host(cur) (false) 00424 00425 #define thread_addr_is_mesh_local(addr, cur) false 00426 #define thread_addr_is_mesh_local_16(addr, cur) false 00427 #define thread_timer(cur, ticks) ((void) 0) 00428 #define thread_seconds_timer(cur, ticks) ((void) 0) 00429 #define thread_insist_that_mesh_isnt_a_link(cur) false 00430 #define thread_attach_ready(cur) 0 00431 #define thread_info_allocate_and_init(cur) (-1) 00432 #define thread_info_deallocate(cur) ((void)0) 00433 #define thread_network_data_propagation(cur, childUnicastAddress, fullList) (void(-1)) 00434 #define thread_link_reject_send(interface, ll64) 0 00435 #define thread_addr_is_mesh_local_16(addr, cur) false 00436 #define thread_mcast_group_change(interface, group, group_added) ((void)0) 00437 #endif // HAVE_THREAD 00438 00439 #endif /* LOWPAN_THREAD_H_ */
Generated on Tue Jul 12 2022 13:31:37 by
