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.
protocol_6lowpan_interface.c
00001 /* 00002 * Copyright (c) 2015-2017, 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 "mac_api.h" 00041 00042 #ifdef HAVE_RPL 00043 #include "RPL/rpl_control.h" 00044 #endif 00045 #include "6LoWPAN/IPHC_Decode/cipv6.h" 00046 #ifndef NO_MLE 00047 #include "MLE/mle.h" 00048 #endif 00049 #include "6LoWPAN/Mesh/mesh.h" 00050 #include "6LoWPAN/Thread/thread_common.h" 00051 00052 #ifdef ECC 00053 #include "libX509_V3.h" 00054 #include "ecc.h" 00055 #endif 00056 #include "ccmLIB.h" 00057 #include "shalib.h" 00058 #include "Security/TLS/tls_lib.h" 00059 #include "Security/Common/sec_lib.h" 00060 #include "net_nvm_api.h" 00061 #include "Security/PANA/pana.h" 00062 #include "Security/PANA/pana_internal_api.h" 00063 #include "Common_Protocols/tcp.h" 00064 00065 #include "6LoWPAN/ND/nd_router_object.h" 00066 #include "platform/arm_hal_interrupt.h" 00067 #include "common_functions.h" 00068 #include "mac_api.h" 00069 #include "6LoWPAN/lowpan_adaptation_interface.h" 00070 #include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" 00071 #include "libNET/src/net_load_balance_internal.h" 00072 00073 00074 00075 static int8_t set_6lowpan_nwk_down(protocol_interface_info_entry_t *cur) 00076 { 00077 int8_t ret_val = -1; 00078 // Check first current state 00079 if (cur->lowpan_info & INTERFACE_NWK_ACTIVE) { 00080 /* Change Active -> Idle */ 00081 /* Disable Protocols Timers */ 00082 if (!thread_info(cur)) { 00083 if (cur->lowpan_info & INTERFACE_NWK_BOOTSRAP_MLE) { 00084 #ifndef NO_MLE 00085 mle_class_list_clean(cur->id); 00086 blacklist_clear(); 00087 #endif 00088 } 00089 } 00090 if (cur->lowpan_info & INTERFACE_NWK_BOOTSRAP_PANA_AUTHENTICATION) { 00091 pana_reset_values(cur->mac_parameters->pan_id); 00092 } 00093 00094 if (cur->interface_mode == INTERFACE_UP) { 00095 if (cur->mac_api) { 00096 mlme_reset_t reset; 00097 reset.SetDefaultPIB = true; 00098 cur->mac_parameters->pan_id = 0xffff; 00099 cur->mac_parameters->SecurityEnabled = false; 00100 cur->mac_parameters->security_frame_counter = 0; 00101 cur->mac_parameters->mac_security_level = 0; 00102 cur->mac_api->mlme_req(cur->mac_api, MLME_RESET, &reset); 00103 } 00104 cur->interface_mode = INTERFACE_IDLE; 00105 net_load_balance_internal_state_activate(cur, false); 00106 } 00107 lowpan_adaptation_interface_reset(cur->id); 00108 reassembly_interface_reset(cur->id); 00109 00110 icmp_nd_routers_init(); 00111 00112 if (cur->pana_sec_info_temp) { 00113 ns_dyn_mem_free(cur->pana_sec_info_temp); 00114 cur->pana_sec_info_temp = 0; 00115 } 00116 /* Init RPL Timers */ 00117 cur->bootsrap_state_machine_cnt = 0; 00118 mac_helper_free_scan_confirm(&cur->mac_parameters->nwk_scan_params); 00119 00120 cur->lowpan_info &= ~INTERFACE_NWK_ROUTER_DEVICE; 00121 cur->lowpan_info &= ~(INTERFACE_NWK_BOOTSRAP_ACTIVE | INTERFACE_NWK_ACTIVE); 00122 cur->interface_mode = INTERFACE_IDLE; 00123 ret_val = 0; 00124 } 00125 return ret_val; 00126 } 00127 00128 static int8_t set_6lowpan_nwk_up(protocol_interface_info_entry_t *cur) 00129 { 00130 int8_t ret_val = 1; 00131 00132 if ((cur->lowpan_info & INTERFACE_NWK_ACTIVE) == 0) { 00133 /* Change Idle-> Active */ 00134 icmp_nd_routers_init(); 00135 cur->nwk_bootstrap_state = ER_ACTIVE_SCAN; 00136 cur->lowpan_info |= INTERFACE_NWK_BOOTSRAP_ACTIVE | INTERFACE_NWK_ACTIVE; //Set Active Bootsrap 00137 cur->lowpan_info &= ~INTERFACE_NWK_BOOTSRAP_ADDRESS_REGISTER_READY; //Clear Bind 00138 cur->bootsrap_state_machine_cnt = 2; 00139 //Possible mac_mlme_start_req(call) 00140 mac_helper_panid_set(cur, 0xffff); 00141 mac_helper_mac16_address_set(cur, 0xffff); 00142 00143 if (cur->lowpan_info & INTERFACE_NWK_BOOTSRAP_PANA_AUTHENTICATION) { 00144 mac_helper_default_security_level_set(cur, SEC_NONE); 00145 } 00146 cur->interface_mode = INTERFACE_UP; 00147 ret_val = 0; 00148 } 00149 return ret_val; 00150 } 00151 00152 int8_t nwk_6lowpan_up(protocol_interface_info_entry_t *cur) 00153 { 00154 int8_t ret_val; 00155 00156 ret_val = set_6lowpan_nwk_up(cur); 00157 if (ret_val == 0) { 00158 protocol_6lowpan_interface_common_init(cur); 00159 00160 cur->nwk_mode = ARM_NWK_GP_IP_MODE; 00161 nwk_filter_params_s *filter = &(cur->mac_parameters->nwk_filter_params); 00162 filter->nwk_active_scan_level = 2; 00163 } 00164 00165 return ret_val; 00166 } 00167 00168 int8_t nwk_6lowpan_down(protocol_interface_info_entry_t *cur) 00169 { 00170 int8_t ret_val; 00171 neighbor_cache_flush(&cur->neigh_cache); 00172 ret_val = set_6lowpan_nwk_down(cur); 00173 protocol_core_interface_info_reset(cur); 00174 return ret_val; 00175 }
Generated on Tue Jul 12 2022 12:45:42 by
