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.
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
protocol_6lowpan_interface.c
00001 /* 00002 * Copyright (c) 2015-2018, Arm Limited and affiliates. 00003 * SPDX-License-Identifier: Apache-2.0 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 00018 /* 00019 * \file protocol_6lowpan_interface.c 00020 * \brief Add short description about this file!!! 00021 * 00022 */ 00023 #include "nsconfig.h" 00024 #include "string.h" 00025 #include "ns_types.h" 00026 #include "eventOS_event.h" 00027 #include "eventOS_scheduler.h" 00028 #include "ns_trace.h" 00029 #include "nsdynmemLIB.h" 00030 #include "NWK_INTERFACE/Include/protocol.h" 00031 #include "Common_Protocols/udp.h" 00032 #include "Common_Protocols/ipv6_constants.h" 00033 #include "Common_Protocols/icmpv6.h" 00034 #include "Common_Protocols/icmpv6_radv.h" 00035 #include "6LoWPAN/Bootstraps/network_lib.h" 00036 #include "6LoWPAN/Bootstraps/protocol_6lowpan.h" 00037 #include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" 00038 #include "Service_Libs/blacklist/blacklist.h" 00039 #include "6LoWPAN/MAC/mac_helper.h" 00040 #include "Service_Libs/mac_neighbor_table/mac_neighbor_table.h" 00041 #include "mac_api.h" 00042 00043 #ifdef HAVE_RPL 00044 #include "RPL/rpl_control.h" 00045 #endif 00046 #include "6LoWPAN/IPHC_Decode/cipv6.h" 00047 #ifndef NO_MLE 00048 #include "MLE/mle.h" 00049 #endif 00050 #include "6LoWPAN/Mesh/mesh.h" 00051 #include "6LoWPAN/Thread/thread_common.h" 00052 00053 #ifdef ECC 00054 #include "libX509_V3.h" 00055 #include "ecc.h" 00056 #endif 00057 #include "ccmLIB.h" 00058 #include "shalib.h" 00059 #include "Security/TLS/tls_lib.h" 00060 #include "Security/Common/sec_lib.h" 00061 #include "net_nvm_api.h" 00062 #include "Security/PANA/pana.h" 00063 #include "Security/PANA/pana_internal_api.h" 00064 #include "Common_Protocols/tcp.h" 00065 00066 #include "6LoWPAN/ND/nd_router_object.h" 00067 #include "platform/arm_hal_interrupt.h" 00068 #include "common_functions.h" 00069 #include "mac_api.h" 00070 #include "6LoWPAN/MAC/mpx_api.h" 00071 #include "6LoWPAN/lowpan_adaptation_interface.h" 00072 #include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" 00073 #include "libNET/src/net_load_balance_internal.h" 00074 00075 00076 00077 static int8_t set_6lowpan_nwk_down(protocol_interface_info_entry_t *cur) 00078 { 00079 int8_t ret_val = -1; 00080 // Check first current state 00081 if (cur->lowpan_info & INTERFACE_NWK_ACTIVE) { 00082 /* Change Active -> Idle */ 00083 /* Disable Protocols Timers */ 00084 if (!thread_info(cur)) { 00085 mac_neighbor_table_neighbor_list_clean(mac_neighbor_info(cur)); 00086 #ifndef NO_MLE 00087 if (cur->lowpan_info & INTERFACE_NWK_BOOTSRAP_MLE) { 00088 00089 blacklist_clear(); 00090 00091 } 00092 #endif 00093 } 00094 if (cur->lowpan_info & INTERFACE_NWK_BOOTSRAP_PANA_AUTHENTICATION) { 00095 pana_reset_values(cur->mac_parameters->pan_id); 00096 } 00097 00098 if (cur->interface_mode == INTERFACE_UP) { 00099 if (cur->mac_api) { 00100 mlme_reset_t reset; 00101 reset.SetDefaultPIB = true; 00102 cur->mac_parameters->pan_id = 0xffff; 00103 cur->mac_parameters->SecurityEnabled = false; 00104 cur->mac_parameters->security_frame_counter = 0; 00105 cur->mac_parameters->mac_security_level = 0; 00106 cur->mac_api->mlme_req(cur->mac_api, MLME_RESET, &reset); 00107 } 00108 cur->interface_mode = INTERFACE_IDLE; 00109 net_load_balance_internal_state_activate(cur, false); 00110 } 00111 lowpan_adaptation_interface_reset(cur->id); 00112 reassembly_interface_reset(cur->id); 00113 00114 icmp_nd_routers_init(); 00115 00116 if (cur->pana_sec_info_temp) { 00117 ns_dyn_mem_free(cur->pana_sec_info_temp); 00118 cur->pana_sec_info_temp = 0; 00119 } 00120 /* Init RPL Timers */ 00121 cur->bootsrap_state_machine_cnt = 0; 00122 mac_helper_free_scan_confirm(&cur->mac_parameters->nwk_scan_params); 00123 00124 cur->lowpan_info &= ~INTERFACE_NWK_ROUTER_DEVICE; 00125 cur->lowpan_info &= ~(INTERFACE_NWK_BOOTSRAP_ACTIVE | INTERFACE_NWK_ACTIVE); 00126 cur->interface_mode = INTERFACE_IDLE; 00127 ret_val = 0; 00128 } 00129 return ret_val; 00130 } 00131 00132 static int8_t set_6lowpan_nwk_up(protocol_interface_info_entry_t *cur) 00133 { 00134 int8_t ret_val = 1; 00135 00136 if ((cur->lowpan_info & INTERFACE_NWK_ACTIVE) == 0) { 00137 /* Change Idle-> Active */ 00138 icmp_nd_routers_init(); 00139 cur->nwk_bootstrap_state = ER_ACTIVE_SCAN; 00140 cur->lowpan_info |= INTERFACE_NWK_BOOTSRAP_ACTIVE | INTERFACE_NWK_ACTIVE; //Set Active Bootsrap 00141 cur->lowpan_info &= ~INTERFACE_NWK_BOOTSRAP_ADDRESS_REGISTER_READY; //Clear Bind 00142 cur->bootsrap_state_machine_cnt = 2; 00143 //Possible mac_mlme_start_req(call) 00144 mac_helper_panid_set(cur, 0xffff); 00145 mac_helper_mac16_address_set(cur, 0xffff); 00146 00147 if (cur->lowpan_info & INTERFACE_NWK_BOOTSRAP_PANA_AUTHENTICATION) { 00148 mac_helper_default_security_level_set(cur, SEC_NONE); 00149 } 00150 cur->interface_mode = INTERFACE_UP; 00151 ret_val = 0; 00152 } 00153 return ret_val; 00154 } 00155 00156 int8_t nwk_6lowpan_up(protocol_interface_info_entry_t *cur) 00157 { 00158 int8_t ret_val; 00159 00160 ret_val = set_6lowpan_nwk_up(cur); 00161 if (ret_val == 0) { 00162 protocol_6lowpan_interface_common_init(cur); 00163 00164 cur->nwk_mode = ARM_NWK_GP_IP_MODE; 00165 nwk_filter_params_s *filter = &(cur->mac_parameters->nwk_filter_params); 00166 filter->nwk_active_scan_level = 2; 00167 } 00168 00169 return ret_val; 00170 } 00171 00172 int8_t nwk_6lowpan_down(protocol_interface_info_entry_t *cur) 00173 { 00174 int8_t ret_val; 00175 neighbor_cache_flush(&cur->neigh_cache); 00176 ret_val = set_6lowpan_nwk_down(cur); 00177 protocol_core_interface_info_reset(cur); 00178 return ret_val; 00179 }
Generated on Tue Jul 12 2022 13:54:44 by
