hostapd: Update patches
[openwrt/staging/hauke.git] / package / network / services / hostapd / patches / 002-mesh-fix-channel-init-order-disable-pri-sec-channel-.patch
index c7101b1dbcfa9218fb2aa9d2995e1fda02d0cf4b..9d2cc36696f6c5c08ac5acfd9227e10455e5dbd9 100644 (file)
-From d869c753b79a1423c2bd9b0afdfa0d89d55a930c Mon Sep 17 00:00:00 2001
+From 93da12fd9ff7596f057ddd3f0e67210960fe6a90 Mon Sep 17 00:00:00 2001
 From: Markus Theil <markus.theil@tu-ilmenau.de>
 Date: Tue, 30 Jun 2020 13:53:18 +0200
-Subject: [PATCH 02/19] mesh: fix channel init order, disable pri/sec channel
- switch
+Subject: 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.
+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.
 
-In consequence, remove mesh coex test, which contradicts this change.
-
 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.
+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>
 ---
- tests/hwsim/test_wpas_mesh.py | 50 -----------------------------------
- wpa_supplicant/mesh.c         | 25 ++++++++++++++++--
- 2 files changed, 23 insertions(+), 52 deletions(-)
+ wpa_supplicant/mesh.c | 27 +++++++++++++++++++++++++--
+ 1 file changed, 25 insertions(+), 2 deletions(-)
 
---- a/tests/hwsim/test_wpas_mesh.py
-+++ b/tests/hwsim/test_wpas_mesh.py
-@@ -933,56 +933,6 @@ def _test_wpas_mesh_open_5ghz(dev, apdev
-     dev[0].dump_monitor()
-     dev[1].dump_monitor()
--def test_wpas_mesh_open_5ghz_coex(dev, apdev):
--    """Mesh network on 5 GHz band and 20/40 coex change"""
--    try:
--        _test_wpas_mesh_open_5ghz_coex(dev, apdev)
--    finally:
--        dev[0].request("MESH_GROUP_REMOVE " + dev[0].ifname)
--        dev[1].request("MESH_GROUP_REMOVE " + dev[1].ifname)
--        set_world_reg(apdev0=apdev[0], dev0=dev[0])
--        dev[0].flush_scan_cache()
--        dev[1].flush_scan_cache()
--
--def _test_wpas_mesh_open_5ghz_coex(dev, apdev):
--    check_mesh_support(dev[0])
--    subprocess.call(['iw', 'reg', 'set', 'US'])
--
--    # Start a 20 MHz BSS on channel 40 that would be the secondary channel of
--    # HT40+ mesh on channel 36.
--    params = {"ssid": "test-ht40",
--              "hw_mode": "a",
--              "channel": "40",
--              "country_code": "US"}
--    hapd = hostapd.add_ap(apdev[0], params)
--    bssid = hapd.own_addr()
--
--    for i in range(2):
--        for j in range(5):
--            ev = dev[i].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=5)
--            if ev is None:
--                raise Exception("No regdom change event")
--            if "alpha2=US" in ev:
--                break
--        dev[i].scan_for_bss(bssid, freq=5200)
--        add_open_mesh_network(dev[i], freq="5180")
--
--    check_mesh_joined_connected(dev)
--
--    freq = dev[0].get_status_field("freq")
--    if freq != "5200":
--        raise Exception("Unexpected STATUS freq=" + freq)
--    sig = dev[0].request("SIGNAL_POLL").splitlines()
--    if "FREQUENCY=5200" not in sig:
--        raise Exception("Unexpected SIGNAL_POLL output: " + str(sig))
--
--    hapd.disable()
--    dev[0].mesh_group_remove()
--    dev[1].mesh_group_remove()
--    check_mesh_group_removed(dev[0])
--    check_mesh_group_removed(dev[1])
--    dev[0].dump_monitor()
--    dev[1].dump_monitor()
- def test_wpas_mesh_open_ht40(dev, apdev):
-     """Mesh and HT40 support difference"""
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
-@@ -363,6 +363,29 @@ static int wpa_supplicant_mesh_init(stru
+@@ -363,6 +363,31 @@ static int wpa_supplicant_mesh_init(stru
                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.
++       * 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.
++       * 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.`*/
++       * 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 +397,6 @@ static int wpa_supplicant_mesh_init(stru
+@@ -374,8 +399,6 @@ static int wpa_supplicant_mesh_init(stru
                return -1;
        }