From ef27f87dbe1c48970d3cc40e738e2f6c7a81da6f Mon Sep 17 00:00:00 2001 From: James Prestwood Date: Fri, 20 Oct 2023 06:55:55 -0700 Subject: [PATCH] station: reload settings in 'netconfig_after_roam' case If netconfig is canceled before completion (when roaming) the settings are freed and never loaded again once netconfig is started post-roam. Now after a roam make sure to re-load the settings and start netconfig. --- src/station.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) 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)); } /*