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
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 uint16_t pan_id = cur->mac_parameters->pan_id; 00091 if (cur->interface_mode == INTERFACE_UP) { 00092 if (cur->mac_api) { 00093 mlme_reset_t reset; 00094 reset.SetDefaultPIB = true; 00095 cur->mac_parameters->pan_id = 0xffff; 00096 cur->mac_parameters->SecurityEnabled = false; 00097 cur->mac_parameters->security_frame_counter = 0; 00098 cur->mac_parameters->mac_security_level = 0; 00099 cur->mac_api->mlme_req(cur->mac_api, MLME_RESET, &reset); 00100 } 00101 cur->interface_mode = INTERFACE_IDLE; 00102 net_load_balance_internal_state_activate(cur, false); 00103 } 00104 lowpan_adaptation_interface_reset(cur->id); 00105 reassembly_interface_reset(cur->id); 00106 00107 icmp_nd_routers_init(); 00108 if (cur->lowpan_info & INTERFACE_NWK_BOOTSRAP_PANA_AUTHENTICATION) { 00109 pana_reset_values(pan_id); 00110 } 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 Fri Jul 22 2022 04:53:59 by
1.7.2
