mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-06 11:10:24 +00:00
pc_wifi_drv: handle reauth silently
In case we are instructed to reauthenticate and were already authenticated we ignore the request in the management layer and let 'wpa_supplicant' deal with that. Fixes #4488.
This commit is contained in:
parent
a8402ae782
commit
74b5a4ae7a
@ -1352,6 +1352,10 @@ struct Wifi::Frontend
|
|||||||
bool _connected_event { false };
|
bool _connected_event { false };
|
||||||
bool _disconnected_event { false };
|
bool _disconnected_event { false };
|
||||||
bool _disconnected_fail { false };
|
bool _disconnected_fail { false };
|
||||||
|
bool _was_connected { false };
|
||||||
|
|
||||||
|
enum { MAX_REAUTH_ATTEMPTS = 1 };
|
||||||
|
unsigned _reauth_attempts { 0 };
|
||||||
|
|
||||||
enum { MAX_ATTEMPTS = 3, };
|
enum { MAX_ATTEMPTS = 3, };
|
||||||
unsigned _scan_attempts { 0 };
|
unsigned _scan_attempts { 0 };
|
||||||
@ -1360,6 +1364,10 @@ struct Wifi::Frontend
|
|||||||
|
|
||||||
void _handle_connection_events(char const *msg)
|
void _handle_connection_events(char const *msg)
|
||||||
{
|
{
|
||||||
|
_connected_event = false;
|
||||||
|
_disconnected_event = false;
|
||||||
|
_disconnected_fail = false;
|
||||||
|
|
||||||
bool const connected = check_recv_msg(msg, recv_table[Rmi::CONNECTED]);
|
bool const connected = check_recv_msg(msg, recv_table[Rmi::CONNECTED]);
|
||||||
bool const disconnected = check_recv_msg(msg, recv_table[Rmi::DISCONNECTED]);
|
bool const disconnected = check_recv_msg(msg, recv_table[Rmi::DISCONNECTED]);
|
||||||
bool const auth_failed = disconnected && _auth_failure(msg);
|
bool const auth_failed = disconnected && _auth_failure(msg);
|
||||||
@ -1367,6 +1375,16 @@ struct Wifi::Frontend
|
|||||||
State state = connected ? State::CONNECTED : State::DISCONNECTED;
|
State state = connected ? State::CONNECTED : State::DISCONNECTED;
|
||||||
Accesspoint::Bssid const &bssid = _extract_bssid(msg, state);
|
Accesspoint::Bssid const &bssid = _extract_bssid(msg, state);
|
||||||
|
|
||||||
|
/* simplistic heuristic to ignore re-authentication requests */
|
||||||
|
if (_connected_ap.bssid.valid() && auth_failed) {
|
||||||
|
if (_reauth_attempts < MAX_ATTEMPTS) {
|
||||||
|
Genode::log("ignore deauth from: ", _connected_ap.bssid);
|
||||||
|
_reauth_attempts++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_reauth_attempts = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Always reset the "global" connection state first
|
* Always reset the "global" connection state first
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user