aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2020-06-30 12:27:56 -0500
committerDenis Kenzior <denkenz@gmail.com>2020-06-30 12:29:22 -0500
commitb026e6740be480fc8d2012c0aedbf36758f8e4f3 (patch)
tree15740bd37c0a051be93ff1e7180355658d416dda
parent10e83aa3475308fdffd2f23c562268a35df3aa62 (diff)
downloadiwd-b026e6740be480fc8d2012c0aedbf36758f8e4f3.tar.gz
station: Return errno from station_roam_scan
-rw-r--r--src/station.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/station.c b/src/station.c
index 93facdd99..de1c05cec 100644
--- a/src/station.c
+++ b/src/station.c
@@ -1773,7 +1773,7 @@ static void station_roam_scan_destroy(void *userdata)
station->roam_scan_id = 0;
}
-static void station_roam_scan(struct station *station,
+static int station_roam_scan(struct station *station,
struct scan_freq_set *freq_set)
{
struct scan_parameters params = { .freqs = freq_set, .flush = true };
@@ -1791,7 +1791,9 @@ static void station_roam_scan(struct station *station,
station_roam_scan_destroy);
if (!station->roam_scan_id)
- station_roam_failed(station);
+ return -EIO;
+
+ return 0;
}
static int station_roam_scan_known_freqs(struct station *station)
@@ -1800,15 +1802,14 @@ static int station_roam_scan_known_freqs(struct station *station)
station->connected_network);
struct scan_freq_set *freqs = network_info_get_roam_frequencies(info,
station->connected_bss->frequency, 5);
+ int r;
if (!freqs)
return -ENODATA;
- station_roam_scan(station, freqs);
-
+ r = station_roam_scan(station, freqs);
scan_freq_set_free(freqs);
-
- return 0;
+ return r;
}
static uint32_t station_freq_from_neighbor_report(const uint8_t *country,
@@ -1979,16 +1980,19 @@ static void station_neighbor_report_cb(struct netdev *netdev, int err,
if (count_md) {
scan_freq_set_add(freq_set_md, current_freq);
- station_roam_scan(station, freq_set_md);
+ r = station_roam_scan(station, freq_set_md);
} else if (count_no_md) {
scan_freq_set_add(freq_set_no_md, current_freq);
- station_roam_scan(station, freq_set_no_md);
+ r = station_roam_scan(station, freq_set_no_md);
} else
- station_roam_scan(station, NULL);
+ r = station_roam_scan(station, NULL);
scan_freq_set_free(freq_set_md);
scan_freq_set_free(freq_set_no_md);
+
+ if (r < 0)
+ station_roam_failed(station);
}
static void station_roam_trigger_cb(struct l_timeout *timeout, void *user_data)
@@ -2163,7 +2167,8 @@ void station_ap_directed_roam(struct station *station,
body_len - pos,station);
} else {
l_debug("roam: AP did not include a preferred candidate list");
- station_roam_scan(station, NULL);
+ if (station_roam_scan(station, NULL) < 0)
+ station_roam_failed(station);
}
return;