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