diff mbox series

station: reload settings in 'netconfig_after_roam' case

Message ID 20231020135555.139910-1-prestwoj@gmail.com (mailing list archive)
State Accepted, archived
Headers show
Series station: reload settings in 'netconfig_after_roam' case | expand

Commit Message

James Prestwood Oct. 20, 2023, 1:55 p.m. UTC
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(-)

Comments

Denis Kenzior Oct. 20, 2023, 3:35 p.m. UTC | #1
Hi James,

On 10/20/23 08:55, James Prestwood wrote:
> 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(-)

Applied, thanks.

Regards,
-Denis
diff mbox series

Patch

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));
 	}
 
 	/*