431 |
431 |
432 DEBUG6( "core_operation_roam_c::next_state() - EAPOL disassociation from BSSID %02X:%02X:%02X:%02X:%02X:%02X", |
432 DEBUG6( "core_operation_roam_c::next_state() - EAPOL disassociation from BSSID %02X:%02X:%02X:%02X:%02X:%02X", |
433 bssid.addr[0], bssid.addr[1], bssid.addr[2], |
433 bssid.addr[0], bssid.addr[1], bssid.addr[2], |
434 bssid.addr[3], bssid.addr[4], bssid.addr[5] ); |
434 bssid.addr[3], bssid.addr[4], bssid.addr[5] ); |
435 |
435 |
|
436 /** |
|
437 * is_eapol_disconnecting is not updated here because this disassociation |
|
438 * is for the previous AP and thus we don't really care when this |
|
439 * request gets completed. |
|
440 */ |
|
441 |
436 server_m->get_eapol_instance().disassociation( &network ); |
442 server_m->get_eapol_instance().disassociation( &network ); |
437 } |
443 } |
438 } |
444 } |
439 |
445 |
440 server_m->get_connection_data()->set_current_ap_data( |
446 server_m->get_connection_data()->set_current_ap_data( |
794 core_connect_status_e core_operation_roam_c::connect_status( |
800 core_connect_status_e core_operation_roam_c::connect_status( |
795 core_error_e request_status, |
801 core_error_e request_status, |
796 core_management_status_e management_status ) |
802 core_management_status_e management_status ) |
797 { |
803 { |
798 DEBUG( "core_operation_roam_c::connect_status()" ); |
804 DEBUG( "core_operation_roam_c::connect_status()" ); |
799 |
805 |
800 core_iap_data_c& iap_data( server_m->get_connection_data()->iap_data() ); |
806 core_iap_data_c& iap_data( server_m->get_connection_data()->iap_data() ); |
801 |
|
802 if ( management_status == core_management_status_assoc_denied_full_ap ) |
|
803 { |
|
804 DEBUG( "core_operation_roam_c::connect_status() - AP full" ); |
|
805 return core_connect_ap_full; |
|
806 } |
|
807 |
807 |
808 if ( request_status == core_error_eapol_auth_start_timeout ) |
808 if ( request_status == core_error_eapol_auth_start_timeout ) |
809 { |
809 { |
810 DEBUG( "core_operation_roam_c::connect_status() - EAPOL authentication timeout before authentication was started" ); |
810 DEBUG( "core_operation_roam_c::connect_status() - EAPOL authentication timeout before authentication was started" ); |
811 return core_connect_eapol_auth_start_timeout; |
811 return core_connect_eapol_auth_start_timeout; |
|
812 } |
|
813 |
|
814 if ( request_status == core_error_unsupported_config ) |
|
815 { |
|
816 DEBUG( "core_operation_roam_c::connect_status() - AP has an unsupported configuration" ); |
|
817 return core_connect_ap_unsupported_configuration; |
812 } |
818 } |
813 |
819 |
814 switch( iap_data.security_mode() ) |
820 switch( iap_data.security_mode() ) |
815 { |
821 { |
816 case core_security_mode_wep: |
822 case core_security_mode_wep: |
915 |
921 |
916 default: |
922 default: |
917 { |
923 { |
918 ASSERT( false_t ); |
924 ASSERT( false_t ); |
919 } |
925 } |
|
926 } |
|
927 |
|
928 if ( management_status == core_management_status_assoc_denied_full_ap ) |
|
929 { |
|
930 DEBUG( "core_operation_roam_c::connect_status() - AP full" ); |
|
931 return core_connect_ap_full; |
|
932 } |
|
933 |
|
934 if ( management_status == core_management_status_unsupported_capabilities || |
|
935 management_status == core_management_status_assoc_unsup_basic_rates || |
|
936 management_status == core_management_status_assoc_unsup_ht_features ) |
|
937 { |
|
938 DEBUG( "core_operation_roam_c::connect_status() - AP has an unsupported configuration" ); |
|
939 return core_connect_ap_unsupported_configuration; |
920 } |
940 } |
921 |
941 |
922 return core_connect_undefined; |
942 return core_connect_undefined; |
923 } |
943 } |
924 |
944 |
943 DEBUG( "core_operation_roam_c::is_fatal_failure() - fatal, EAP failure" ); |
963 DEBUG( "core_operation_roam_c::is_fatal_failure() - fatal, EAP failure" ); |
944 return core_ap_blacklist_reason_eapol_failure; |
964 return core_ap_blacklist_reason_eapol_failure; |
945 } |
965 } |
946 |
966 |
947 /** |
967 /** |
|
968 * Unsupported configuration is always fatal. |
|
969 */ |
|
970 if( request_status == core_error_unsupported_config ) |
|
971 { |
|
972 DEBUG( "core_operation_roam_c::is_fatal_failure() - fatal, unsupported configuration" ); |
|
973 return core_ap_blacklist_reason_association_status; |
|
974 } |
|
975 |
|
976 /** |
948 * Don't consider a failed (re-)association attempt as fatal since it's |
977 * Don't consider a failed (re-)association attempt as fatal since it's |
949 * possible AP just doesn't have our authentication cached any more. |
978 * possible AP just doesn't have our authentication cached any more. |
950 */ |
979 */ |
951 if ( is_cached_sa_used ) |
980 if ( is_cached_sa_used ) |
952 { |
981 { |