mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-28 18:28:23 -05:00
mesh: Fix channel init order, disable pri/sec channel switch
wpa_supplicant_conf_ap_ht() has to happen before hostapd_setup_interface() in order for its configuration settings to have effect on interface configuration. Disable primary and secondary channel switch because of missing tie breaking rule/frames in mesh networks. A rather long comment about this issue is placed in mesh.c in the corresponding place. I was not able to reproduce the memory corruption during mesh_secure_ocv_mix_legacy, which lead to a revert of a similar patch in the past. Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
This commit is contained in:
parent
0be9c232a3
commit
93da12fd9f
@ -363,6 +363,31 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
|
||||
conf->basic_rates[rate_len] = -1;
|
||||
}
|
||||
|
||||
/* While it can enhance performance to switch the primary channel, which
|
||||
* is also the secondary channel of another network at the same time),
|
||||
* to the other primary channel, problems exist with this in mesh
|
||||
* networks.
|
||||
*
|
||||
* Example with problems:
|
||||
* - 3 mesh nodes M1-M3, freq (5200, 5180)
|
||||
* - other node O1, e.g. AP mode, freq (5180, 5200),
|
||||
* Locations: O1 M1 M2 M3
|
||||
*
|
||||
* M3 can only send frames to M1 over M2, no direct connection is
|
||||
* possible
|
||||
* Start O1, M1 and M3 first, M1 or O1 will switch channels to align
|
||||
* with* each other. M3 does not swap, because M1 or O1 cannot be
|
||||
* reached. M2 is started afterwards and can either connect to M3 or M1
|
||||
* because of this primary secondary channel switch.
|
||||
*
|
||||
* Solutions: (1) central coordination -> not always possible
|
||||
* (2) disable pri/sec channel switch in mesh networks
|
||||
*
|
||||
* In AP mode, when all nodes can work independently, this poses of
|
||||
* course no problem, therefore disable it only in mesh mode. */
|
||||
conf->no_pri_sec_switch = 1;
|
||||
wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf);
|
||||
|
||||
if (wpa_drv_init_mesh(wpa_s)) {
|
||||
wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh in driver");
|
||||
return -1;
|
||||
@ -374,8 +399,6 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
|
||||
return -1;
|
||||
}
|
||||
|
||||
wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf);
|
||||
|
||||
return 0;
|
||||
out_free:
|
||||
wpa_supplicant_mesh_deinit(wpa_s);
|
||||
|
Loading…
Reference in New Issue
Block a user