Message ID | fcbe607446de39124d8196059fe788ae3d68917e.1535403927.git.peter.oh@bowerswilkins.com |
---|---|
State | Changes Requested |
Headers | show |
Series | mesh: enable DFS channels in mesh mode | expand |
On Mon, Aug 27, 2018 at 02:28:47PM -0700, peter.oh@bowerswilkins.com wrote: > Mesh interface has used its channel parameters that configured > during its initialization even after channel switched due to > DFS radar detection during CAC which caused channel switch error. > This change fixes the error by updating its channel parameters > when channel's been changed from initial one. > diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c > @@ -199,10 +200,35 @@ static int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s) > static void wpas_mesh_complete_cb(void *ctx) > { > struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)ctx; > + struct hostapd_iface *ifmsh = wpa_s->ifmsh; > struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params; > struct wpa_ssid *ssid = wpa_s->current_ssid; > int ret = 0; > > + /* > + * inspect if channel's been changed since initialized. > + * i.e. DFS radar detection > + */ > + if (ifmsh->freq != params->freq.freq) { > + wpa_s->assoc_freq = ifmsh->freq; > + ssid->frequency = ifmsh->freq; This changing of ssid->frequency does not feel like the correct thing to do here. wpa_supplicant should not be changing the network profile parameters on its own.
On 01/03/2019 05:35 AM, Jouni Malinen wrote: > On Mon, Aug 27, 2018 at 02:28:47PM -0700, peter.oh@bowerswilkins.com wrote: >> Mesh interface has used its channel parameters that configured >> during its initialization even after channel switched due to >> DFS radar detection during CAC which caused channel switch error. >> This change fixes the error by updating its channel parameters >> when channel's been changed from initial one. >> diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c >> @@ -199,10 +200,35 @@ static int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s) >> static void wpas_mesh_complete_cb(void *ctx) >> { >> struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)ctx; >> + struct hostapd_iface *ifmsh = wpa_s->ifmsh; >> struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params; >> struct wpa_ssid *ssid = wpa_s->current_ssid; >> int ret = 0; >> >> + /* >> + * inspect if channel's been changed since initialized. >> + * i.e. DFS radar detection >> + */ >> + if (ifmsh->freq != params->freq.freq) { >> + wpa_s->assoc_freq = ifmsh->freq; >> + ssid->frequency = ifmsh->freq; > This changing of ssid->frequency does not feel like the correct thing to > do here. wpa_supplicant should not be changing the network profile > parameters on its own. Agree and I'll drop this patch from the next series since it's an optional change. I may come back with right change once initial DFS check-in is done. Thanks, Peter
diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c index cdaafd7..a714c15 100644 --- a/wpa_supplicant/mesh.c +++ b/wpa_supplicant/mesh.c @@ -13,6 +13,7 @@ #include "utils/uuid.h" #include "common/ieee802_11_defs.h" #include "common/wpa_ctrl.h" +#include "common/hw_features_common.h" #include "ap/sta_info.h" #include "ap/hostapd.h" #include "ap/ieee802_11.h" @@ -199,10 +200,35 @@ static int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s) static void wpas_mesh_complete_cb(void *ctx) { struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)ctx; + struct hostapd_iface *ifmsh = wpa_s->ifmsh; struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params; struct wpa_ssid *ssid = wpa_s->current_ssid; int ret = 0; + /* + * inspect if channel's been changed since initialized. + * i.e. DFS radar detection + */ + if (ifmsh->freq != params->freq.freq) { + wpa_s->assoc_freq = ifmsh->freq; + ssid->frequency = ifmsh->freq; + if (hostapd_set_freq_params(¶ms->freq, + ifmsh->conf->hw_mode, + ifmsh->freq, + ifmsh->conf->channel, + ifmsh->conf->ieee80211n, + ifmsh->conf->ieee80211ac, + ifmsh->conf->secondary_channel, + ifmsh->conf->vht_oper_chwidth, + ifmsh->conf->vht_oper_centr_freq_seg0_idx, + ifmsh->conf->vht_oper_centr_freq_seg1_idx, + ifmsh->conf->vht_capab)) { + wpa_printf(MSG_ERROR, "Error updating mesh frequency params."); + wpa_supplicant_mesh_deinit(wpa_s); + return; + } + } + if (wpas_mesh_init_rsn(wpa_s)) { wpa_printf(MSG_ERROR, "Init RSN failed. Deinit mesh..."); wpa_supplicant_mesh_deinit(wpa_s);