[PATCH v2 10/15] mesh: consider mesh interface on dfs event handler
peter.oh at bowerswilkins.com
peter.oh at bowerswilkins.com
Thu Apr 12 02:49:07 PDT 2018
From: Peter Oh <peter.oh at bowerswilkins.com>
Once mesh starts supporting DFS channels, it has to handle DFS related events
from drivers, hence add mesh interface to the check list.
Signed-off-by: Peter Oh <peter.oh at bowerswilkins.com>
---
wpa_supplicant/ap.c | 55 ++++++++++++++++++++++++++++++++++++++-----------
wpa_supplicant/events.c | 1 +
2 files changed, 44 insertions(+), 12 deletions(-)
diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
index 679b34600..17b32fb34 100644
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -1328,13 +1328,18 @@ int ap_ctrl_iface_chanswitch(struct wpa_supplicant *wpa_s, const char *pos)
void wpas_ap_ch_switch(struct wpa_supplicant *wpa_s, int freq, int ht,
int offset, int width, int cf1, int cf2)
{
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
if (!wpa_s->ap_iface)
- return;
+ if (!wpa_s->ifmsh)
+ return;
+ else
+ iface = wpa_s->ifmsh;
wpa_s->assoc_freq = freq;
if (wpa_s->current_ssid)
wpa_s->current_ssid->frequency = freq;
- hostapd_event_ch_switch(wpa_s->ap_iface->bss[0], freq, ht,
+ hostapd_event_ch_switch(iface->bss[0], freq, ht,
offset, width, cf1, cf2);
}
@@ -1531,10 +1536,15 @@ int wpas_ap_pmksa_cache_add_external(struct wpa_supplicant *wpa_s, char *cmd)
void wpas_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
- return;
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
wpa_printf(MSG_DEBUG, "DFS radar detected on %d MHz", radar->freq);
- hostapd_dfs_radar_detected(wpa_s->ap_iface, radar->freq,
+ hostapd_dfs_radar_detected(iface, radar->freq,
radar->ht_enabled, radar->chan_offset,
radar->chan_width,
radar->cf1, radar->cf2);
@@ -1544,10 +1554,15 @@ void wpas_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
- return;
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
wpa_printf(MSG_DEBUG, "DFS CAC started on %d MHz", radar->freq);
- hostapd_dfs_start_cac(wpa_s->ap_iface, radar->freq,
+ hostapd_dfs_start_cac(iface, radar->freq,
radar->ht_enabled, radar->chan_offset,
radar->chan_width, radar->cf1, radar->cf2);
}
@@ -1556,10 +1571,16 @@ void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
- return;
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
+
wpa_printf(MSG_DEBUG, "DFS CAC finished on %d MHz", radar->freq);
- hostapd_dfs_complete_cac(wpa_s->ap_iface, 1, radar->freq,
+ hostapd_dfs_complete_cac(iface, 1, radar->freq,
radar->ht_enabled, radar->chan_offset,
radar->chan_width, radar->cf1, radar->cf2);
}
@@ -1568,10 +1589,15 @@ void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
- return;
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
wpa_printf(MSG_DEBUG, "DFS CAC aborted on %d MHz", radar->freq);
- hostapd_dfs_complete_cac(wpa_s->ap_iface, 0, radar->freq,
+ hostapd_dfs_complete_cac(iface, 0, radar->freq,
radar->ht_enabled, radar->chan_offset,
radar->chan_width, radar->cf1, radar->cf2);
}
@@ -1580,10 +1606,15 @@ void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
void wpas_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
- return;
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
wpa_printf(MSG_DEBUG, "DFS NOP finished on %d MHz", radar->freq);
- hostapd_dfs_nop_finished(wpa_s->ap_iface, radar->freq,
+ hostapd_dfs_nop_finished(iface, radar->freq,
radar->ht_enabled, radar->chan_offset,
radar->chan_width, radar->cf1, radar->cf2);
}
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 7c5452802..e569093b4 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -4168,6 +4168,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
if (wpa_s->current_ssid->mode == WPAS_MODE_AP ||
wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO ||
+ wpa_s->current_ssid->mode == WPAS_MODE_MESH ||
wpa_s->current_ssid->mode ==
WPAS_MODE_P2P_GROUP_FORMATION) {
wpas_ap_ch_switch(wpa_s, data->ch_switch.freq,
--
2.11.0 (Apple Git-81)
More information about the Hostap
mailing list