149 } |
149 } |
150 } |
150 } |
151 } |
151 } |
152 |
152 |
153 /** |
153 /** |
|
154 * Check the channels that were previously reported to be active. |
|
155 */ |
|
156 server_m->get_scan_list().get_channels_by_ssid( |
|
157 scan_channels_m, |
|
158 server_m->get_connection_data()->ssid() ); |
|
159 |
|
160 scan_channels_m.add( |
|
161 server_m->get_connection_data()->current_ap_data()->band(), |
|
162 server_m->get_connection_data()->current_ap_data()->channel() ); |
|
163 |
|
164 scan_channels_m.merge( |
|
165 server_m->get_connection_data()->adjacent_ap_channels() ); |
|
166 |
|
167 scan_channels_m.merge( |
|
168 server_m->get_connection_data()->current_ap_data()->ap_channel_report() ); |
|
169 |
|
170 server_m->cancel_roam_timer(); |
|
171 |
|
172 DEBUG( "core_operation_handle_bss_lost_c::next_state() - removing current AP entries from scan list" ); |
|
173 server_m->get_scan_list().remove_entries_by_bssid( |
|
174 bssid ); |
|
175 |
|
176 /** |
154 * If the connection is lost when EAPOL is doing (re-)authentication, |
177 * If the connection is lost when EAPOL is doing (re-)authentication, |
155 * EAPOL must be notified. |
178 * EAPOL must be notified. |
156 */ |
179 */ |
157 if ( server_m->get_connection_data()->is_eapol_authenticating() && |
180 if ( ( server_m->get_connection_data()->is_eapol_authenticating() || |
|
181 reason_m == core_bss_lost_reason_failed_reauthentication ) && |
158 ( server_m->get_connection_data()->iap_data().is_eap_used() || |
182 ( server_m->get_connection_data()->iap_data().is_eap_used() || |
159 server_m->get_connection_data()->iap_data().is_wapi_used() ) ) |
183 server_m->get_connection_data()->iap_data().is_wapi_used() ) ) |
160 { |
184 { |
161 network_id_c network_id( |
185 network_id_c network_id( |
162 &bssid.addr[0], |
186 &bssid.addr[0], |
170 false_t ); |
194 false_t ); |
171 |
195 |
172 DEBUG6( "core_operation_handle_bss_lost_c::next_state() - EAPOL disassociation from BSSID %02X:%02X:%02X:%02X:%02X:%02X", |
196 DEBUG6( "core_operation_handle_bss_lost_c::next_state() - EAPOL disassociation from BSSID %02X:%02X:%02X:%02X:%02X:%02X", |
173 bssid.addr[0], bssid.addr[1], bssid.addr[2], |
197 bssid.addr[0], bssid.addr[1], bssid.addr[2], |
174 bssid.addr[3], bssid.addr[4], bssid.addr[5] ); |
198 bssid.addr[3], bssid.addr[4], bssid.addr[5] ); |
|
199 DEBUG( "core_operation_handle_bss_lost_c::next_state() - marking is_eapol_disconnecting as true" ); |
|
200 server_m->get_connection_data()->set_eapol_disconnecting( |
|
201 true ); |
|
202 server_m->get_connection_data()->set_eapol_auth_failure( |
|
203 core_error_eapol_failure ); |
175 |
204 |
176 server_m->get_eapol_instance().disassociation( &network_id ); |
205 server_m->get_eapol_instance().disassociation( &network_id ); |
177 } |
206 operation_state_m = core_state_eapol_disassociated; |
178 |
207 |
|
208 return core_error_request_pending; |
|
209 } |
|
210 |
|
211 return goto_state( core_state_eapol_disassociated ); |
|
212 } |
|
213 case core_state_eapol_disassociated: |
|
214 { |
179 operation_state_m = core_state_set_tx_level; |
215 operation_state_m = core_state_set_tx_level; |
180 |
|
181 /** |
|
182 * Check the channels that were previously reported to be active. |
|
183 */ |
|
184 server_m->get_scan_list().get_channels_by_ssid( |
|
185 scan_channels_m, |
|
186 server_m->get_connection_data()->ssid() ); |
|
187 |
|
188 scan_channels_m.add( |
|
189 server_m->get_connection_data()->current_ap_data()->band(), |
|
190 server_m->get_connection_data()->current_ap_data()->channel() ); |
|
191 |
|
192 scan_channels_m.merge( |
|
193 server_m->get_connection_data()->adjacent_ap_channels() ); |
|
194 |
|
195 scan_channels_m.merge( |
|
196 server_m->get_connection_data()->current_ap_data()->ap_channel_report() ); |
|
197 |
|
198 server_m->cancel_roam_timer(); |
|
199 |
|
200 DEBUG( "core_operation_handle_bss_lost_c::next_state() - removing current AP entries from scan list" ); |
|
201 server_m->get_scan_list().remove_entries_by_bssid( |
|
202 bssid ); |
|
203 |
216 |
204 server_m->get_core_settings().roam_metrics().set_roam_ts_userdata_disabled(); |
217 server_m->get_core_settings().roam_metrics().set_roam_ts_userdata_disabled(); |
205 |
218 |
206 drivers_m->disable_user_data( |
219 drivers_m->disable_user_data( |
207 request_id_m ); |
220 request_id_m ); |