diff --git a/src/station.c b/src/station.c index e18847bc..9b224e5a 100644 --- a/src/station.c +++ b/src/station.c @@ -2055,6 +2055,20 @@ static void station_netconfig_event_handler(enum netconfig_event event, } } +static bool netconfig_after_roam(struct station *station) +{ + const struct network *network = station_get_connected_network(station); + + /* Netconfig was reset which frees all settings, reload now */ + if (!netconfig_load_settings(station->netconfig, + network_get_settings(network))) + return false; + + return netconfig_configure(station->netconfig, + station_netconfig_event_handler, + station); +} + static void station_roamed(struct station *station) { station->roam_scan_full = false; @@ -2086,9 +2100,7 @@ static void station_roamed(struct station *station) /* Re-enable netconfig if it never finished on the last BSS */ if (station->netconfig_after_roam) { station->netconfig_after_roam = false; - L_WARN_ON(!netconfig_configure(station->netconfig, - station_netconfig_event_handler, - station)); + L_WARN_ON(!netconfig_after_roam(station)); } else station_enter_state(station, STATION_STATE_CONNECTED); } @@ -2126,9 +2138,7 @@ static void station_roam_failed(struct station *station) /* Re-enable netconfig if needed, even on a failed roam */ if (station->netconfig_after_roam) { station->netconfig_after_roam = false; - L_WARN_ON(!netconfig_configure(station->netconfig, - station_netconfig_event_handler, - station)); + L_WARN_ON(!netconfig_after_roam(station)); } /*