wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_handle_bss_lost.cpp
branchRCL_3
changeset 42 a828660c511c
parent 0 c40eb8fe8501
child 43 d3d7683d16f5
equal deleted inserted replaced
40:5fb7af913dfd 42:a828660c511c
    14 * Description:  Statemachine for handling BSS lost notification from drivers.
    14 * Description:  Statemachine for handling BSS lost notification from drivers.
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 /*
    18 /*
    19 * %version: 33 %
    19 * %version: 34 %
    20 */
    20 */
    21 
    21 
    22 #include "core_operation_handle_bss_lost.h"
    22 #include "core_operation_handle_bss_lost.h"
    23 #include "core_operation_roam.h"
    23 #include "core_operation_roam.h"
    24 #include "core_operation_release.h"
    24 #include "core_operation_release.h"
   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 );