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.
Fork of OmniWheels by
thread_network_data_storage.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 00030 /* 00031 * \file thread_network_data_storage.h 00032 * \brief Add short description about this file!!! 00033 * 00034 */ 00035 00036 #ifndef THREAD_NETWORK_DATA_PROXY_H_ 00037 #define THREAD_NETWORK_DATA_PROXY_H_ 00038 00039 #include "ns_list.h" 00040 #include "thread_constants.h" 00041 00042 struct link_configuration; 00043 struct thread_commissioner; 00044 00045 typedef struct thread_network_data_context_entry_s { 00046 unsigned cid: 4; /*!< 4-bit Context ID */ 00047 bool compression: 1; /*!< C (Compression) flag */ 00048 bool stableData: 1; 00049 bool canDelete: 1; 00050 uint8_t contextPrefixLength; /*!< Context prefix length in bits */ 00051 uint32_t context_reuse_delay; /*!< Time in seconds */ 00052 ns_list_link_t link; /*!< List link entry */ 00053 } thread_network_data_context_entry_t; 00054 00055 typedef struct thread_network_local_data_context_entry_s { 00056 unsigned cid: 4; /*!< 4-bit Context ID */ 00057 bool compression: 1; /*!< C (Compression) flag */ 00058 uint8_t contextPrefixLength; /*!< Context prefix length in bits */ 00059 bool stableData: 1; 00060 } thread_network_local_data_context_entry_t; 00061 00062 typedef NS_LIST_HEAD (thread_network_data_context_entry_t, link) thread_data_context_list_t; 00063 00064 typedef struct thread_network_data_temporary_route_or_dhcpv6_server_entry_s { 00065 uint16_t routerID; /*!< Services UL16 */ 00066 signed Prf: 2; 00067 bool P_preferred: 1; 00068 bool P_slaac: 1; 00069 bool P_dhcp: 1; 00070 bool P_configure: 1; 00071 bool P_default_route: 1; 00072 bool stableData: 1; 00073 bool P_on_mesh: 1; 00074 bool P_nd_dns: 1; 00075 bool canDelete: 1; 00076 ns_list_link_t link; /*!< List link entry */ 00077 } thread_network_server_data_entry_t; 00078 00079 typedef struct thread_border_router_tlv_entry_t { 00080 uint16_t routerID; /*!< Services UL16 */ 00081 signed Prf: 2; /* P_preference */ 00082 bool P_preferred: 1; /* P_preferred */ 00083 bool P_slaac: 1; /* P_slaac */ 00084 bool P_dhcp: 1; /* P_dhcp */ 00085 bool P_configure: 1; /* P_configure */ 00086 bool P_default_route: 1; /* P_default */ 00087 bool stableData: 1; /* P_stable */ 00088 bool P_on_mesh: 1; /* P_on_mesh */ 00089 bool P_nd_dns: 1; /* P_nd_dns */ 00090 } thread_border_router_tlv_entry_t; 00091 00092 typedef struct thread_prefix_tlv { 00093 uint8_t domainId; 00094 uint8_t *Prefix; 00095 uint8_t PrefixLen; 00096 } thread_prefix_tlv_t; 00097 00098 typedef NS_LIST_HEAD (thread_network_server_data_entry_t, link) thread_network_server_data_list_t; 00099 00100 typedef struct thread_network_data_service_server_entry_s { 00101 uint16_t router_id; /*!< Services UL16 */ 00102 uint8_t *server_data; 00103 uint8_t server_data_length; 00104 bool stable : 1; 00105 bool can_delete : 1; 00106 ns_list_link_t link; /*!< List link entry */ 00107 } thread_network_data_service_server_entry_t; 00108 00109 typedef NS_LIST_HEAD (thread_network_data_service_server_entry_t, link) thread_network_data_service_server_list_t; 00110 00111 typedef struct thread_network_data_service_cache_entry_s { 00112 bool T : 1; 00113 unsigned S_id : 4; 00114 bool S_stable : 1; 00115 uint32_t S_enterprise_number; 00116 uint8_t *S_service_data; 00117 uint8_t S_service_data_length; 00118 thread_network_data_service_server_list_t server_list; 00119 ns_list_link_t link; /*!< List link entry */ 00120 } thread_network_data_service_cache_entry_t; 00121 00122 /** This List Not inlude ::/0 Routes those are listed separately */ 00123 typedef struct thread_network_data_prefix_cache_entry_s { 00124 uint8_t domainId; 00125 uint8_t servicesPrefix [16]; /*!< Services Prefix */ 00126 uint8_t servicesPrefixLen ; /*!< Prefix length in bits This Can Be 1-128 */ 00127 thread_data_context_list_t contextList; 00128 thread_network_server_data_list_t routeList; 00129 thread_network_server_data_list_t borderRouterList; 00130 ns_list_link_t link ; /*!< List link entry */ 00131 } thread_network_data_prefix_cache_entry_t; 00132 00133 typedef struct thread_network_local_data_entry_s { 00134 uint8_t domainId; 00135 uint8_t servicesPrefix[16]; /*!< Services Prefix */ 00136 uint8_t servicesPrefixLen; /*!< Prefix length in bits This Can Be 1-128 */ 00137 bool routeActive: 1; 00138 bool routeDataStable: 1; 00139 bool dhcpv6ServerActive: 1; 00140 bool dhcpv6ServerDataStable: 1; 00141 bool slaacServerActive: 1; 00142 bool slaacServerDataStable: 1; 00143 bool slaacPreferred: 1; 00144 unsigned preference: 2; 00145 bool configure: 1; 00146 bool defaultRoute: 1; 00147 bool onMesh: 1; 00148 bool ndDns: 1; 00149 ns_list_link_t link; /*!< List link entry */ 00150 } thread_network_local_data_entry_t; 00151 00152 /* The contents of the Service TLV & Server Set tuple */ 00153 typedef struct thread_network_data_service_entry_s { 00154 bool T : 1; // '1' if S_enterprise number is THREAD_ENTERPRISE_NUMBER; otherwise, '0'. 00155 unsigned S_id : 4; 00156 uint32_t S_enterprise_number; 00157 uint8_t *S_service_data; 00158 uint8_t S_service_data_length; 00159 uint8_t *S_server_data; 00160 uint8_t S_server_data_length; 00161 bool S_stable; 00162 ns_list_link_t link; /*!< List link entry */ 00163 } thread_network_data_service_entry_t; 00164 00165 typedef NS_LIST_HEAD (thread_network_data_service_cache_entry_t, link) thread_network_data_service_cache_list_t; 00166 typedef NS_LIST_HEAD (thread_network_data_prefix_cache_entry_t, link) thread_network_prefix_list_t; 00167 typedef NS_LIST_HEAD (thread_network_local_data_entry_t, link) thread_network_data_prefix_list_t; 00168 typedef NS_LIST_HEAD (thread_network_data_service_entry_t, link) thread_network_data_service_list_t; 00169 00170 /** Network Data Main struct for seprate local data and Global */ 00171 typedef struct thread_network_data_cache_entry_s { 00172 thread_network_prefix_list_t localPrefixList ; /*!< Local parsed or generated service list */ 00173 thread_network_data_service_cache_list_t service_list; 00174 uint8_t networkDataTlvSize ; /*!< Network data TLV Size */ 00175 uint8_t network_data[THREAD_MAX_NETWORK_DATA_SIZE]; 00176 uint16_t network_data_len; 00177 uint32_t contex_id_reuse_timeout; 00178 uint8_t network_data_update_delay; 00179 bool stableUpdatePushed: 1; 00180 bool temporaryUpdatePushed: 1; 00181 } thread_network_data_cache_entry_t; 00182 00183 typedef struct thread_network_local_data_cache_entry_s { 00184 thread_network_data_prefix_list_t prefix_list; /*!< Local parsed or generated service list */ 00185 thread_network_data_service_list_t service_list; 00186 uint16_t registered_rloc16;/*!< Address used for latest registration */ 00187 bool release_old_address:1;/*!< true if release of old address is needed */ 00188 bool publish_active:1;/*!< true when publish is active */ 00189 bool publish_pending:1;/*!< true when publish attempt made during active publish */ 00190 } thread_network_local_data_cache_entry_t; 00191 00192 /** 00193 * Initialise Thread Network Data cache 00194 * 00195 * \param cachePtr Pointer to Network Data Structure which will be initialized 00196 * 00197 */ 00198 void thread_network_data_base_init(thread_network_data_cache_entry_t *cachePtr); 00199 00200 void thread_network_local_server_data_base_init(thread_network_local_data_cache_entry_t *cachePtr); 00201 00202 void thread_network_data_free_and_clean(thread_network_data_cache_entry_t *cachePtr); 00203 00204 void thread_network_data_router_id_mark_delete(thread_network_data_cache_entry_t *cachePtr, uint16_t routerID, bool subSet); 00205 00206 bool thread_network_data_router_id_free(thread_network_data_cache_entry_t *cachePtr, bool subSet, struct protocol_interface_info_entry *curInterface); 00207 00208 void thread_network_local_data_free_and_clean(thread_network_local_data_cache_entry_t *cachePtr, int8_t interface_id); 00209 00210 void thread_network_data_context_re_use_timer_update(thread_network_data_cache_entry_t *cachePtr, uint32_t ticks, lowpan_context_list_t *context_list); 00211 00212 /** 00213 * Add new route information to route List 00214 * 00215 * \param networkDataList Pointer main network data structure 00216 * \param prefixTlv Prefix TLV (domainID, Prefix, PrefixLen) 00217 * \param service Route TLV 00218 * 00219 * return 0, ADD OK 00220 * return <0 Add Not OK 00221 */ 00222 int thread_nd_local_list_add_route(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service); 00223 00224 int thread_nd_local_list_add_service(thread_network_data_cache_entry_t *networkDataList, thread_network_data_service_entry_t *service, thread_network_data_service_server_entry_t *server); 00225 00226 /** 00227 * Add new DHCPv6 Server information to route List 00228 * 00229 * \param networkDataList Pointer main network data structure 00230 * \param prefixTlv Prefix TLV (domainID, Prefix, PrefixLen) 00231 * \param service On Mesh prefix TLV 00232 * 00233 * return 0, ADD OK 00234 * return <0 Add Not OK 00235 */ 00236 int thread_nd_local_list_add_on_mesh_prefix(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service); 00237 00238 00239 /** 00240 * Del DHCPv6 Server information to route List 00241 * 00242 * \param networkDataList Pointer main network data structure 00243 * \param prefixTlv Prefix TLV (domainID, Prefix, PrefixLen) 00244 * \param service On Mesh prefix TLV 00245 * 00246 * return 0, Del OK 00247 * return <0 Del Not OK 00248 */ 00249 int thread_nd_local_list_del_on_mesh_server(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service); 00250 00251 /** 00252 * Add new Local DHCPv6 Server information to route List 00253 * 00254 * \param networkDataList Pointer main network data structure 00255 * \param prefixTlv Prefix TLV (domainID, Prefix, PrefixLen) 00256 * \param service On Mesh prefix TLV 00257 * 00258 * return 0, ADD OK 00259 * return <0 Add Not OK 00260 */ 00261 int thread_local_server_list_add_on_mesh_server(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service); 00262 00263 /** 00264 * Del Local DHCPv6 Server information to route List 00265 * 00266 * \param networkDataList Pointer main network data structure 00267 * \param prefixTlv Prefix TLV (domainID, Prefix, PrefixLen) 00268 * 00269 * return 0, Del OK 00270 * return <0 Del Not OK 00271 */ 00272 int thread_local_server_list_del_on_mesh_server(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv); 00273 00274 int thread_local_service_list_add(thread_network_local_data_cache_entry_t *networkDataList, thread_network_data_service_entry_t *service); 00275 00276 int thread_local_service_list_del(thread_network_local_data_cache_entry_t *networkDataList, thread_network_data_service_entry_t *service); 00277 00278 /** 00279 * Add new local route information to route List 00280 * 00281 * \param networkDataList Pointer main network data structure 00282 * \param prefixTlv Prefix TLV (domainID, Prefix, PrefixLen) 00283 * \param route HAS Route TLV 00284 * 00285 * return 0, ADD OK 00286 * return <0 Add Not OK 00287 */ 00288 int thread_local_server_add_route(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *route); 00289 00290 /** 00291 * Del local route information to route List 00292 * 00293 * \param networkDataList Pointer main network data structure 00294 * \param prefixTlv Prefix TLV (domainID, Prefix, PrefixLen) 00295 * 00296 * return 0, Del OK 00297 * return <0 Del Not OK 00298 */ 00299 int thread_local_server_del_route(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv); 00300 00301 /** 00302 * Add new 6LoWPAN contexts information to Network Data list 00303 * 00304 * \param networkDataList Network Data structure pointer 00305 * \param prefixTlv Prefix TLV (domainID, Prefix, PrefixLen) 00306 * \param context Context TLV 00307 * 00308 * return 0, ADD OK 00309 * return <0 Add Not OK 00310 */ 00311 int thread_nd_local_list_add_contexts(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_network_local_data_context_entry_t *context); 00312 00313 /** 00314 * Add new 6LoWPAN contexts information to Network Data list 00315 * 00316 * \param networkDataList Network Interface 00317 * \param prefixPtr pointer 6LoWPAN Contexts 00318 * \param prefixLength indicate prefix pointer valid information in bits 00319 * 00320 * return 0, ADD OK 00321 * return <0 Add Not OK 00322 */ 00323 uint8_t thread_nd_context_id_allocate(thread_network_data_cache_entry_t *networkDataList, thread_network_local_data_cache_entry_t *localDataList, uint8_t *prefixPtr, uint8_t prefixLength); 00324 00325 int thread_nd_verify_contex_id_is_free(thread_network_data_cache_entry_t *list, uint8_t *prefixPtr, thread_network_local_data_context_entry_t *context); 00326 00327 thread_network_data_service_cache_entry_t *thread_network_data_service_entry_find(thread_network_data_service_cache_list_t *list, thread_network_data_service_entry_t *service); 00328 00329 /** 00330 * Write Network Data full list or stable subset to given pointer 00331 * 00332 * \param networkDataList Network Data structure pointer 00333 * \param ptr pointer for write Network Data 00334 * \param fullList Boolean to select Full data or stable subset 00335 * 00336 * return Updated Pointer value end of Network Data 00337 */ 00338 uint16_t thread_network_data_service_set_size(thread_network_data_cache_entry_t *networkDataList, bool fullList); 00339 uint16_t thread_network_data_prefix_set_size(thread_network_data_cache_entry_t *networkDataList, bool fullList); 00340 uint8_t *thread_network_data_prefix_set_write(thread_network_data_cache_entry_t *networkDataList, uint8_t *ptr); 00341 uint8_t *thread_network_data_service_set_write(thread_network_data_cache_entry_t *networkDataList, uint8_t *ptr); 00342 bool thread_network_data_service_hosted_by_this_router_id(thread_network_data_service_cache_entry_t *dataList, uint16_t router_id); 00343 uint16_t thread_network_data_service_child_id_from_networkdata_get(thread_network_data_cache_entry_t *networkDataList, uint16_t router_short_addr); 00344 00345 uint8_t * thread_nd_own_service_list_data_write(thread_network_local_data_cache_entry_t *serverDataList, uint8_t *ptr, uint16_t routerID); 00346 00347 uint16_t thread_nd_own_service_list_data_size(thread_network_local_data_cache_entry_t *serverDataList); 00348 00349 void thread_nd_network_data_print(thread_network_data_cache_entry_t *networkData, uint16_t routerId); 00350 bool thread_nd_dhcp_anycast_address_mapping_from_network_data(thread_network_data_cache_entry_t *networkDataList, uint16_t *rlocAddress, uint8_t contexId); 00351 bool thread_nd_service_anycast_address_mapping_from_network_data(thread_network_data_cache_entry_t *networkDataList, uint16_t *rlocAddress, uint8_t S_id); 00352 00353 bool thread_nd_on_mesh_address_valid(thread_network_server_data_entry_t *curRoute); 00354 thread_network_server_data_entry_t *thread_nd_hosted_by_this_routerid(uint16_t routerId, thread_network_server_data_list_t *list); 00355 bool thread_network_data_services_registered(thread_network_data_cache_entry_t *cachePtr, uint16_t routerID); 00356 int thread_network_data_resulting_tlv_size(thread_network_data_cache_entry_t *networkDataStorage, uint8_t *network_data_ptr, uint16_t network_data_length, uint16_t router_id); 00357 00358 #endif /* THREAD_NETWORK_DATA_PROXY_H_ */
Generated on Fri Jul 22 2022 04:54:03 by
 1.7.2
 1.7.2 
    