]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
hostapd: update to 2026-02-27 20912/head
authorNick Hainke <vincent@systemli.org>
Wed, 19 Nov 2025 20:49:37 +0000 (21:49 +0100)
committerNick Hainke <vincent@systemli.org>
Mon, 2 Mar 2026 10:58:26 +0000 (11:58 +0100)
Add patch:
- 001-PASN-Fix-the-compilation-errors-without-CONFIG_PASN.patch

Manually edit patches:
- 110-mbedtls-TLS-crypto-option-initial-port.patch
- 190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch
- 191-hostapd-add-support-for-specifying-the-link-id-in-th.patch
- 220-indicate-features.patch
- 360-acs_retry.patch
  -> Remove the extra check for -EBUSY (see below) because the code we
     want to skip is now already guarded by:
     https://git.w1.fi/cgit/hostap/commit/?id=af6473761f07ae4f13ef228dec618ca62faf6ef4
      ```
      + if (ret == -EBUSY)
      +         goto fail;
      ```
- 341-mesh-ctrl-iface-channel-switch.patch
- 600-ubus_support.patch
- 601-ucode_support.patch
  -> The patch had this and similar changes:
     ```
      - if (os_strcmp(drv->first_bss->ifname, ifname) != 0) {
      + if (drv->first_bss->ifindex != ifi->ifi_index) {
     ```
     Those changes should be unnecessary due to the commit:
     https://git.w1.fi/cgit/hostap/commit/?id=2bf6d85963b9857b411b57cc7949e30ee2cb1216
- 780-Implement-APuP-Access-Point-Micro-Peering.patch
  -> Needs adjustement because of Enhanced Privacy Protection (EPP):
     https://git.w1.fi/cgit/hostap/commit/?id=1e13ee9c382a5d88c4bb0ffdfaf434fbb31123f3

Remove patch:
- 030-Revert-nl80211-Accept-a-global-nl80211-event-to-a-br.patch
- 060-nl80211-fix-reporting-spurious-frame-events.patch
  -> https://git.w1.fi/cgit/hostap/commit/?id=ca266cc24d8705eb1a2a0857ad326e48b1408b20
- 190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch
  -> https://git.w1.fi/cgit/hostap/commit/?id=e275c3dc70e1c2947e02e43aeee6c4f9975c3dc7
- 192-nl80211-cancel-scans-whenever-the-first-bss-is-remov.patch
  -> https://git.w1.fi/cgit/hostap/commit/?id=5ce1d41803866782bbd96d575f53d43358a20a2e
- 350-nl80211_del_beacon_bss.patch
  -> https://git.w1.fi/cgit/hostap/commit/?id=b777ecb16274235974edb5c1dfcea6abab25f6c4

Tested-By: Daniel Pawlik <pawlik.dan@gmail.com>
Co-developed-by: Agustin Lorenzo <agustin.lorenzo@thinco.es>
Link: https://github.com/openwrt/openwrt/pull/20912
Signed-off-by: Nick Hainke <vincent@systemli.org>
57 files changed:
package/network/services/hostapd/Makefile
package/network/services/hostapd/patches/001-PASN-Fix-the-compilation-errors-without-CONFIG_PASN.patch [new file with mode: 0644]
package/network/services/hostapd/patches/010-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch
package/network/services/hostapd/patches/011-mesh-use-deterministic-channel-on-channel-switch.patch
package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch
package/network/services/hostapd/patches/030-Revert-nl80211-Accept-a-global-nl80211-event-to-a-br.patch [deleted file]
package/network/services/hostapd/patches/050-Fix-OpenWrt-13156.patch
package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch
package/network/services/hostapd/patches/052-AP-add-missing-null-pointer-check-in-hostapd_free_ha.patch
package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch [deleted file]
package/network/services/hostapd/patches/110-mbedtls-TLS-crypto-option-initial-port.patch
package/network/services/hostapd/patches/120-mbedtls-fips186_2_prf.patch
package/network/services/hostapd/patches/140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch
package/network/services/hostapd/patches/150-add-NULL-checks-encountered-during-tests-hwsim.patch
package/network/services/hostapd/patches/161-wpa_supplicant-avoid-stopping-DPP-chirp-when-offchan.patch
package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch
package/network/services/hostapd/patches/180-fix_owe_ssid_update.patch
package/network/services/hostapd/patches/190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch [deleted file]
package/network/services/hostapd/patches/191-hostapd-add-support-for-specifying-the-link-id-in-th.patch
package/network/services/hostapd/patches/192-nl80211-cancel-scans-whenever-the-first-bss-is-remov.patch [deleted file]
package/network/services/hostapd/patches/200-multicall.patch
package/network/services/hostapd/patches/201-lto-jobserver-support.patch
package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch
package/network/services/hostapd/patches/212-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch
package/network/services/hostapd/patches/220-indicate-features.patch
package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch
package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch
package/network/services/hostapd/patches/300-noscan.patch
package/network/services/hostapd/patches/301-mesh-noscan.patch
package/network/services/hostapd/patches/310-rescan_immediately.patch
package/network/services/hostapd/patches/320-optional_rfkill.patch
package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch
package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch [deleted file]
package/network/services/hostapd/patches/360-acs_retry.patch
package/network/services/hostapd/patches/370-preserve_radio_mask.patch
package/network/services/hostapd/patches/410-limit_debug_messages.patch
package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch
package/network/services/hostapd/patches/465-hostapd-config-support-random-BSS-color.patch
package/network/services/hostapd/patches/470-survey_data_fallback.patch
package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch
package/network/services/hostapd/patches/600-ubus_support.patch
package/network/services/hostapd/patches/601-ucode_support.patch
package/network/services/hostapd/patches/701-reload_config_inline.patch
package/network/services/hostapd/patches/710-vlan_no_bridge.patch
package/network/services/hostapd/patches/711-wds_bridge_force.patch
package/network/services/hostapd/patches/720-iface_max_num_sta.patch
package/network/services/hostapd/patches/730-ft_iface.patch
package/network/services/hostapd/patches/740-snoop_iface.patch
package/network/services/hostapd/patches/760-dynamic_own_ip.patch
package/network/services/hostapd/patches/761-shared_das_port.patch
package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch
package/network/services/hostapd/patches/763-radius-wispr.patch
package/network/services/hostapd/patches/770-radius_server.patch
package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch
package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch

index d46be1c6cbff29440db429d4d11fbec627afaf58..f3a4dafd85038fd21b444d77a911f0c3357b6b87 100644 (file)
@@ -9,9 +9,9 @@ PKG_RELEASE:=1
 
 PKG_SOURCE_URL:=https://w1.fi/hostap.git
 PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2025-08-26
-PKG_SOURCE_VERSION:=ca266cc24d8705eb1a2a0857ad326e48b1408b20
-PKG_MIRROR_HASH:=59ac677093f524ff98588abd9f33805a336a6e929d6814222f0d784c854f2343
+PKG_SOURCE_DATE:=2026-02-27
+PKG_SOURCE_VERSION:=8dbef087e65833dc173a9cfd7e9f980f84a1adf2
+PKG_MIRROR_HASH:=e3ac2746e603af3dd2e5f733270d889c5bdc1fd09f290e33c6c2b79443ba0f61
 
 PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
 PKG_LICENSE:=BSD-3-Clause
diff --git a/package/network/services/hostapd/patches/001-PASN-Fix-the-compilation-errors-without-CONFIG_PASN.patch b/package/network/services/hostapd/patches/001-PASN-Fix-the-compilation-errors-without-CONFIG_PASN.patch
new file mode 100644 (file)
index 0000000..09d39d6
--- /dev/null
@@ -0,0 +1,26 @@
+From ede0dd6448fc9e58d913cc4e57d2d5f531af899f Mon Sep 17 00:00:00 2001
+From: Nick Hainke <vincent@systemli.org>
+Date: Sun, 1 Mar 2026 17:31:14 +0100
+Subject: [PATCH] PASN: Fix the compilation errors without CONFIG_PASN
+
+Fix the compilation errors by protecting the access to pasn in
+wpas_request_connection for the CONFIG_PASN disabled case.
+
+Fixes: 5f3a47346be5 ("EPPKE: EPPKE authentication for SME-in-wpa_supplicant case")
+Signed-off-by: Nick Hainke <vincent@systemli.org>
+---
+ wpa_supplicant/wpa_supplicant.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/wpa_supplicant/wpa_supplicant.c
++++ b/wpa_supplicant/wpa_supplicant.c
+@@ -9516,7 +9516,9 @@ void wpas_request_connection(struct wpa_
+       wpa_s->disconnected = 0;
+       wpa_s->reassociate = 1;
+       wpa_s->last_owe_group = 0;
++#ifdef CONFIG_PASN
+       wpa_pasn_reset(&wpa_s->pasn);
++#endif /* CONFIG_PASN */
+       if (wpa_supplicant_fast_associate(wpa_s) != 1)
+               wpa_supplicant_req_scan(wpa_s, 0, 0);
index 1b43b1df2b337fb9db26fd00610c74ebfa56a897..599dc7a15afa7d788ea2f439ec40e18417133999 100644 (file)
@@ -14,7 +14,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -2976,7 +2976,7 @@ static int drv_supports_vht(struct wpa_s
+@@ -3045,7 +3045,7 @@ static int drv_supports_vht(struct wpa_s
  }
  
  
@@ -23,7 +23,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  {
        int i;
  
-@@ -2985,7 +2985,10 @@ static bool ibss_mesh_is_80mhz_avail(int
+@@ -3054,7 +3054,10 @@ static bool ibss_mesh_is_80mhz_avail(int
  
                chan = hw_get_channel_chan(mode, i, NULL);
                if (!chan ||
@@ -35,7 +35,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
                        return false;
        }
  
-@@ -3112,7 +3115,7 @@ static void ibss_mesh_select_40mhz(struc
+@@ -3181,7 +3184,7 @@ static void ibss_mesh_select_40mhz(struc
                                   const struct wpa_ssid *ssid,
                                   struct hostapd_hw_modes *mode,
                                   struct hostapd_freq_params *freq,
@@ -44,7 +44,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  {
        int chan_idx;
        struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL;
-@@ -3143,8 +3146,11 @@ static void ibss_mesh_select_40mhz(struc
+@@ -3212,8 +3215,11 @@ static void ibss_mesh_select_40mhz(struc
                return;
  
        /* Check primary channel flags */
@@ -58,7 +58,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  
  #ifdef CONFIG_HT_OVERRIDES
        if (ssid->disable_ht40)
-@@ -3179,8 +3185,11 @@ static void ibss_mesh_select_40mhz(struc
+@@ -3248,8 +3254,11 @@ static void ibss_mesh_select_40mhz(struc
                return;
  
        /* Check secondary channel flags */
@@ -72,7 +72,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  
        if (freq->ht_enabled) {
                if (ht40 == -1) {
-@@ -3258,7 +3267,7 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3327,7 +3336,7 @@ static bool ibss_mesh_select_80_160mhz(s
                                       const struct wpa_ssid *ssid,
                                       struct hostapd_hw_modes *mode,
                                       struct hostapd_freq_params *freq,
@@ -81,7 +81,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
        static const int bw80[] = {
                5180, 5260, 5500, 5580, 5660, 5745, 5825,
                5955, 6035, 6115, 6195, 6275, 6355, 6435,
-@@ -3311,7 +3320,7 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3380,7 +3389,7 @@ static bool ibss_mesh_select_80_160mhz(s
                goto skip_80mhz;
  
        /* Use 40 MHz if channel not usable */
@@ -90,7 +90,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
                goto skip_80mhz;
  
        chwidth = CONF_OPER_CHWIDTH_80MHZ;
-@@ -3353,7 +3362,7 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3422,7 +3431,7 @@ static bool ibss_mesh_select_80_160mhz(s
             HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G) &&
            (ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_160MHZ ||
             ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ) &&
@@ -99,7 +99,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
                for (j = 0; j < ARRAY_SIZE(bw160); j++) {
                        u8 start_chan;
  
-@@ -3376,11 +3385,11 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3445,11 +3454,11 @@ static bool ibss_mesh_select_80_160mhz(s
             EHT_PHYCAP_320MHZ_IN_6GHZ_SUPPORT_MASK) && is_6ghz &&
            ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ &&
            ibss_mesh_is_80mhz_avail(channel + 16 -
@@ -114,7 +114,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
                for (j = 0; j < ARRAY_SIZE(bw320); j += 2) {
                        if (freq->freq >= bw320[j] &&
                            freq->freq <= bw320[j + 1]) {
-@@ -3409,10 +3418,12 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3478,10 +3487,12 @@ static bool ibss_mesh_select_80_160mhz(s
                                if (!chan)
                                        continue;
  
@@ -131,7 +131,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  
                                /* Found a suitable second segment for 80+80 */
                                chwidth = CONF_OPER_CHWIDTH_80P80MHZ;
-@@ -3467,6 +3478,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3536,6 +3547,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
        int obss_scan = 1;
        u8 channel;
        bool is_6ghz, is_24ghz;
@@ -139,7 +139,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  
        freq->freq = ssid->frequency;
  
-@@ -3510,9 +3522,9 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3579,9 +3591,9 @@ void ibss_mesh_setup_freq(struct wpa_sup
        /* Setup higher BW only for 5 and 6 GHz */
        if (mode->mode == HOSTAPD_MODE_IEEE80211A) {
                ibss_mesh_select_40mhz(wpa_s, ssid, mode, freq, obss_scan,
index f1cf715b69908833d66bc04b25ce50f3f2c81f40..751bca8b8e9846c8e433f4bcf89e306702a1cbd4 100644 (file)
@@ -21,7 +21,7 @@ Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
 
 --- a/src/ap/dfs.c
 +++ b/src/ap/dfs.c
-@@ -18,6 +18,7 @@
+@@ -19,6 +19,7 @@
  #include "ap_drv_ops.h"
  #include "drivers/driver.h"
  #include "dfs.h"
@@ -29,7 +29,7 @@ Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
  
  
  enum dfs_channel_type {
-@@ -534,9 +535,14 @@ dfs_get_valid_channel(struct hostapd_ifa
+@@ -535,9 +536,14 @@ dfs_get_valid_channel(struct hostapd_ifa
        int num_available_chandefs;
        int chan_idx, chan_idx2;
        int sec_chan_idx_80p80 = -1;
@@ -44,7 +44,7 @@ Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
        wpa_printf(MSG_DEBUG, "DFS: Selecting random channel");
        *secondary_channel = 0;
        *oper_centr_freq_seg0_idx = 0;
-@@ -556,8 +562,20 @@ dfs_get_valid_channel(struct hostapd_ifa
+@@ -557,8 +563,20 @@ dfs_get_valid_channel(struct hostapd_ifa
        if (num_available_chandefs == 0)
                return NULL;
  
@@ -68,7 +68,7 @@ Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
                   chan_idx, num_available_chandefs);
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -11668,6 +11668,10 @@ static int nl80211_switch_channel(void *
+@@ -12007,6 +12007,10 @@ static int nl80211_switch_channel(void *
        if (ret)
                goto error;
  
index b23e6a4ca2d7944aab43097982eee539940053a0..0698f03ebcc9cb56ce3eebbb41bca220d32a24cd 100644 (file)
@@ -4,7 +4,7 @@ Subject: [PATCH] fix adding back stations after a missed deauth/disassoc
 
 --- a/src/ap/ieee802_11.c
 +++ b/src/ap/ieee802_11.c
-@@ -5136,6 +5136,13 @@ static int add_associated_sta(struct hos
+@@ -5429,6 +5429,13 @@ static int add_associated_sta(struct hos
         * drivers to accept the STA parameter configuration. Since this is
         * after a new FT-over-DS exchange, a new TK has been derived, so key
         * reinstallation is not a concern for this case.
@@ -18,7 +18,7 @@ Subject: [PATCH] fix adding back stations after a missed deauth/disassoc
         */
        wpa_printf(MSG_DEBUG, "Add associated STA " MACSTR
                   " (added_unassoc=%d auth_alg=%u ft_over_ds=%u reassoc=%d authorized=%d ft_tk=%d fils_tk=%d)",
-@@ -5149,7 +5156,8 @@ static int add_associated_sta(struct hos
+@@ -5442,7 +5449,8 @@ static int add_associated_sta(struct hos
            (!(sta->flags & WLAN_STA_AUTHORIZED) ||
             (reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) ||
             (!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) &&
diff --git a/package/network/services/hostapd/patches/030-Revert-nl80211-Accept-a-global-nl80211-event-to-a-br.patch b/package/network/services/hostapd/patches/030-Revert-nl80211-Accept-a-global-nl80211-event-to-a-br.patch
deleted file mode 100644 (file)
index 24647a5..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-From: Felix Fietkau <nbd@nbd.name>
-Date: Sun, 6 Jul 2025 18:41:52 +0200
-Subject: [PATCH] Revert "nl80211: Accept a global nl80211 event to a bridged
- interface"
-
-This reverts commit 1c994da117ad795766270cf04bc923971e27412f.
----
-
---- a/src/drivers/driver_nl80211_event.c
-+++ b/src/drivers/driver_nl80211_event.c
-@@ -4482,8 +4482,6 @@ int process_global_event(struct nl_msg *
-                               wiphy_idx = nl80211_get_wiphy_index(bss);
-                       if ((ifidx == -1 && !wiphy_idx_set && !wdev_id_set) ||
-                           ifidx == bss->ifindex ||
--                          (bss->br_ifindex > 0 &&
--                           nl80211_has_ifidx(drv, bss->br_ifindex, ifidx)) ||
-                           (wiphy_idx_set && wiphy_idx == wiphy_idx_rx) ||
-                           (wdev_id_set && bss->wdev_id_set &&
-                            wdev_id == bss->wdev_id)) {
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -182,6 +182,8 @@ static void add_ifidx(struct wpa_driver_
-                     int ifidx_reason);
- static void del_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx,
-                     int ifidx_reason);
-+static int have_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx,
-+                    int ifidx_reason);
- static int nl80211_set_channel(struct i802_bss *bss,
-                              struct hostapd_freq_params *freq, int set_chan);
-@@ -1270,7 +1272,7 @@ nl80211_find_drv(struct nl80211_global *
-                               *init_failed = 1;
-                       return drv;
-               }
--              if (res > 0 || nl80211_has_ifidx(drv, idx, IFIDX_ANY))
-+              if (res > 0 || have_ifidx(drv, idx, IFIDX_ANY))
-                       return drv;
-       }
-       return NULL;
-@@ -8586,7 +8588,7 @@ static void add_ifidx(struct wpa_driver_
-       wpa_printf(MSG_DEBUG,
-                  "nl80211: Add own interface ifindex %d (ifidx_reason %d)",
-                  ifidx, ifidx_reason);
--      if (nl80211_has_ifidx(drv, ifidx, ifidx_reason)) {
-+      if (have_ifidx(drv, ifidx, ifidx_reason)) {
-               wpa_printf(MSG_DEBUG, "nl80211: ifindex %d already in the list",
-                          ifidx);
-               return;
-@@ -8646,7 +8648,7 @@ static void del_ifidx(struct wpa_driver_
- }
--int nl80211_has_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx,
-+static int have_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx,
-                     int ifidx_reason)
- {
-       int i;
-@@ -8753,7 +8755,7 @@ static void handle_eapol(int sock, void
-               return;
-       }
--      if (nl80211_has_ifidx(drv, lladdr.sll_ifindex, IFIDX_ANY)) {
-+      if (have_ifidx(drv, lladdr.sll_ifindex, IFIDX_ANY)) {
-               for (bss = drv->first_bss; bss; bss = bss->next)
-                       drv_event_eapol_rx(bss->ctx, lladdr.sll_addr, buf, len);
-       }
---- a/src/drivers/driver_nl80211.h
-+++ b/src/drivers/driver_nl80211.h
-@@ -371,8 +371,6 @@ struct i802_link * nl80211_get_link(stru
- u8 nl80211_get_link_id_from_link(struct i802_bss *bss, struct i802_link *link);
- int nl80211_remove_link(struct i802_bss *bss, int link_id);
- void nl80211_update_active_links(struct i802_bss *bss, int link_id);
--int nl80211_has_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx,
--                    int ifidx_reason);
- static inline bool nl80211_link_valid(u16 links, s8 link_id)
- {
index d06558256aadce9d298e5c204dc07f7aff1f5831..b6ba10f33303ee61be1428711bdcb156ab15b464 100644 (file)
@@ -20,7 +20,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
 
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -4110,6 +4110,8 @@ int hostapd_remove_iface(struct hapd_int
+@@ -4127,6 +4127,8 @@ int hostapd_remove_iface(struct hapd_int
  void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
                           int reassoc)
  {
@@ -29,7 +29,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
        if (hapd->tkip_countermeasures) {
                hostapd_drv_sta_deauth(hapd, sta->addr,
                                       WLAN_REASON_MICHAEL_MIC_FAILURE);
-@@ -4117,10 +4119,16 @@ void hostapd_new_assoc_sta(struct hostap
+@@ -4134,10 +4136,16 @@ void hostapd_new_assoc_sta(struct hostap
        }
  
  #ifdef CONFIG_IEEE80211BE
@@ -51,7 +51,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
        ap_sta_clear_assoc_timeout(hapd, sta);
 --- a/src/ap/sta_info.c
 +++ b/src/ap/sta_info.c
-@@ -1554,9 +1554,6 @@ bool ap_sta_set_authorized_flag(struct h
+@@ -1736,9 +1736,6 @@ bool ap_sta_set_authorized_flag(struct h
                                mld_assoc_link_id = -2;
                }
  #endif /* CONFIG_IEEE80211BE */
index 1b6c71c7201ddf203d6f456830fa1e611eb78352..471a36aaa9e373c6437eb7bc5381ae6886a2f762 100644 (file)
@@ -26,7 +26,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
 
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -2447,6 +2447,9 @@ struct wpa_driver_capa {
+@@ -2466,6 +2466,9 @@ struct wpa_driver_capa {
        /** Maximum number of iterations in a single scan plan */
        u32 max_sched_scan_plan_iterations;
  
@@ -38,7 +38,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
  
 --- a/src/drivers/driver_nl80211_capa.c
 +++ b/src/drivers/driver_nl80211_capa.c
-@@ -981,6 +981,10 @@ static int wiphy_info_handler(struct nl_
+@@ -1000,6 +1000,10 @@ static int wiphy_info_handler(struct nl_
                        nla_get_u32(tb[NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS]);
        }
  
index 350411be5428a61fa6875c88df5279008bcb3210..85d5127f600d2de3fbbf1ef9c4d68cb4a8ae1eb0 100644 (file)
@@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -489,7 +489,7 @@ void hostapd_free_hapd_data(struct hosta
+@@ -502,7 +502,7 @@ void hostapd_free_hapd_data(struct hosta
                struct hapd_interfaces *ifaces = hapd->iface->interfaces;
                size_t i;
  
diff --git a/package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch b/package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch
deleted file mode 100644 (file)
index 902fd47..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-From: Felix Fietkau <nbd@nbd.name>
-Date: Tue, 26 Aug 2025 22:04:57 +0200
-Subject: [PATCH] nl80211: fix reporting spurious frame events
-
-When the nl80211 driver is shared across multiple interfaces (on the same
-wiphy), nl80211_spurious_frame can send the event to the wrong interface by
-using drv->ctx. Fix this by using bss->ctx instead.
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
-
---- a/src/drivers/driver_nl80211_event.c
-+++ b/src/drivers/driver_nl80211_event.c
-@@ -2789,7 +2789,7 @@ static void nl80211_spurious_frame(struc
-       event.rx_from_unknown.addr = nla_data(tb[NL80211_ATTR_MAC]);
-       event.rx_from_unknown.wds = wds;
--      wpa_supplicant_event(drv->ctx, EVENT_RX_FROM_UNKNOWN, &event);
-+      wpa_supplicant_event(bss->ctx, EVENT_RX_FROM_UNKNOWN, &event);
- }
index d90298c97d97882c62f3fc8bde51c1623064d65a..320090f9daddd0b4da9f40d032508229887300a0 100644 (file)
@@ -21,7 +21,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
 
 --- a/hostapd/Makefile
 +++ b/hostapd/Makefile
-@@ -759,6 +759,40 @@ endif
+@@ -764,6 +764,40 @@ endif
  CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONFIG_TLS_DEFAULT_CIPHERS)\"
  endif
  
@@ -62,7 +62,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifeq ($(CONFIG_TLS), gnutls)
  ifndef CONFIG_CRYPTO
  # default to libgcrypt
-@@ -938,9 +972,11 @@ endif
+@@ -943,9 +977,11 @@ endif
  
  ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -74,7 +74,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef NEED_AES_EAX
  AESOBJS += ../src/crypto/aes-eax.o
  NEED_AES_CTR=y
-@@ -950,38 +986,48 @@ AESOBJS += ../src/crypto/aes-siv.o
+@@ -955,38 +991,48 @@ AESOBJS += ../src/crypto/aes-siv.o
  NEED_AES_CTR=y
  endif
  ifdef NEED_AES_CTR
@@ -123,7 +123,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef NEED_AES_DEC
  ifdef CONFIG_INTERNAL_AES
  AESOBJS += ../src/crypto/aes-internal-dec.o
-@@ -996,12 +1042,16 @@ ifneq ($(CONFIG_TLS), openssl)
+@@ -1001,12 +1047,16 @@ ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), linux)
  ifneq ($(CONFIG_TLS), gnutls)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -140,7 +140,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef CONFIG_INTERNAL_SHA1
  SHA1OBJS += ../src/crypto/sha1-internal.o
  ifdef NEED_FIPS186_2_PRF
-@@ -1010,16 +1060,22 @@ endif
+@@ -1015,16 +1065,22 @@ endif
  endif
  ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -163,7 +163,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  
  ifdef NEED_SHA1
  OBJS += $(SHA1OBJS)
-@@ -1029,11 +1085,13 @@ ifneq ($(CONFIG_TLS), openssl)
+@@ -1034,11 +1090,13 @@ ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), linux)
  ifneq ($(CONFIG_TLS), gnutls)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -177,7 +177,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  
  ifdef NEED_MD5
  ifdef CONFIG_INTERNAL_MD5
-@@ -1083,56 +1141,81 @@ ifneq ($(CONFIG_TLS), openssl)
+@@ -1088,56 +1146,81 @@ ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), linux)
  ifneq ($(CONFIG_TLS), gnutls)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -259,7 +259,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  
  ifdef CONFIG_INTERNAL_SHA384
  CFLAGS += -DCONFIG_INTERNAL_SHA384
-@@ -1177,11 +1260,13 @@ HOBJS += $(SHA1OBJS)
+@@ -1182,11 +1265,13 @@ HOBJS += $(SHA1OBJS)
  ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), linux)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -273,7 +273,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  
  ifdef CONFIG_RADIUS_SERVER
  CFLAGS += -DRADIUS_SERVER
-@@ -1355,7 +1440,9 @@ NOBJS += ../src/utils/trace.o
+@@ -1365,7 +1450,9 @@ NOBJS += ../src/utils/trace.o
  endif
  
  HOBJS += hlr_auc_gw.o ../src/utils/common.o ../src/utils/wpa_debug.o ../src/utils/os_$(CONFIG_OS).o ../src/utils/wpabuf.o ../src/crypto/milenage.o
@@ -283,7 +283,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef CONFIG_INTERNAL_AES
  HOBJS += ../src/crypto/aes-internal.o
  HOBJS += ../src/crypto/aes-internal-enc.o
-@@ -1378,18 +1465,24 @@ SOBJS += ../src/common/sae.o
+@@ -1388,18 +1475,24 @@ SOBJS += ../src/common/sae.o
  SOBJS += ../src/common/sae_pk.o
  SOBJS += ../src/common/dragonfly.o
  SOBJS += $(AESOBJS)
@@ -310,7 +310,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  _OBJS_VAR := NOBJS
 --- a/hostapd/defconfig
 +++ b/hostapd/defconfig
-@@ -6,9 +6,21 @@
+@@ -6,9 +6,19 @@
  # just setting VARIABLE=n is not disabling that variable.
  #
  # This file is included in Makefile, so variables like CFLAGS and LIBS can also
@@ -318,7 +318,6 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
 +# be modified from here. In most cases, these lines should use += in order not
  # to override previous values of the variables.
  
-+
 +# Uncomment following two lines and fix the paths if you have installed TLS
 +# libraries in a non-default location
 +#CFLAGS += -I/usr/local/openssl/include
@@ -329,11 +328,10 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
 +# used to fix build issues on such systems (krb5.h not found).
 +#CFLAGS += -I/usr/include/kerberos
 +
-+
- # Driver interface for Host AP driver
- CONFIG_DRIVER_HOSTAP=y
+ # Driver interface for wired authenticator
+ #CONFIG_DRIVER_WIRED=y
  
-@@ -281,6 +293,7 @@ CONFIG_IPV6=y
+@@ -274,6 +284,7 @@ CONFIG_IPV6=y
  # openssl = OpenSSL (default)
  # gnutls = GnuTLS
  # internal = Internal TLSv1 implementation (experimental)
@@ -7772,7 +7770,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  CONFIG_SIM_SIMULATOR=y
 --- a/wpa_supplicant/Makefile
 +++ b/wpa_supplicant/Makefile
-@@ -1234,6 +1234,29 @@ endif
+@@ -1256,6 +1256,29 @@ endif
  CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONFIG_TLS_DEFAULT_CIPHERS)\"
  endif
  
@@ -7802,7 +7800,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifeq ($(CONFIG_TLS), gnutls)
  ifndef CONFIG_CRYPTO
  # default to libgcrypt
-@@ -1426,9 +1449,11 @@ endif
+@@ -1448,9 +1471,11 @@ endif
  
  ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -7814,7 +7812,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef CONFIG_OPENSSL_INTERNAL_AES_WRAP
  # Seems to be needed at least with BoringSSL
  NEED_INTERNAL_AES_WRAP=y
-@@ -1442,9 +1467,11 @@ endif
+@@ -1464,9 +1489,11 @@ endif
  
  ifdef NEED_INTERNAL_AES_WRAP
  ifneq ($(CONFIG_TLS), linux)
@@ -7826,7 +7824,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef NEED_AES_EAX
  AESOBJS += ../src/crypto/aes-eax.o
  NEED_AES_CTR=y
-@@ -1454,35 +1481,45 @@ AESOBJS += ../src/crypto/aes-siv.o
+@@ -1476,35 +1503,45 @@ AESOBJS += ../src/crypto/aes-siv.o
  NEED_AES_CTR=y
  endif
  ifdef NEED_AES_CTR
@@ -7872,7 +7870,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef NEED_AES_ENC
  ifdef CONFIG_INTERNAL_AES
  AESOBJS += ../src/crypto/aes-internal-enc.o
-@@ -1497,12 +1534,16 @@ ifneq ($(CONFIG_TLS), openssl)
+@@ -1519,12 +1556,16 @@ ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), linux)
  ifneq ($(CONFIG_TLS), gnutls)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -7889,7 +7887,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef CONFIG_INTERNAL_SHA1
  SHA1OBJS += ../src/crypto/sha1-internal.o
  ifdef NEED_FIPS186_2_PRF
-@@ -1514,29 +1555,37 @@ CFLAGS += -DCONFIG_NO_PBKDF2
+@@ -1536,29 +1577,37 @@ CFLAGS += -DCONFIG_NO_PBKDF2
  else
  ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -7927,7 +7925,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef NEED_MD5
  ifdef CONFIG_INTERNAL_MD5
  MD5OBJS += ../src/crypto/md5-internal.o
-@@ -1591,12 +1640,17 @@ ifneq ($(CONFIG_TLS), openssl)
+@@ -1613,12 +1662,17 @@ ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), linux)
  ifneq ($(CONFIG_TLS), gnutls)
  ifneq ($(CONFIG_TLS), wolfssl)
@@ -7945,7 +7943,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifdef CONFIG_INTERNAL_SHA256
  SHA256OBJS += ../src/crypto/sha256-internal.o
  endif
-@@ -1609,50 +1663,68 @@ CFLAGS += -DCONFIG_INTERNAL_SHA512
+@@ -1631,50 +1685,68 @@ CFLAGS += -DCONFIG_INTERNAL_SHA512
  SHA256OBJS += ../src/crypto/sha512-internal.o
  endif
  ifdef NEED_TLS_PRF_SHA256
@@ -8014,7 +8012,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  
  ifdef NEED_ASN1
  OBJS += ../src/tls/asn1.o
-@@ -1827,10 +1899,12 @@ ifdef CONFIG_FIPS
+@@ -1849,10 +1921,12 @@ ifdef CONFIG_FIPS
  CFLAGS += -DCONFIG_FIPS
  ifneq ($(CONFIG_TLS), openssl)
  ifneq ($(CONFIG_TLS), wolfssl)
index 71b06401cd6cf8658395d8d5c9499ab5e84ae6b6..0661900f36cdd7fa24f39e52db58ec1ded6d2e9a 100644 (file)
@@ -12,7 +12,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
 
 --- a/hostapd/Makefile
 +++ b/hostapd/Makefile
-@@ -773,10 +773,6 @@ endif
+@@ -778,10 +778,6 @@ endif
  OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
  HOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
  SOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
@@ -101,7 +101,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  
 --- a/wpa_supplicant/Makefile
 +++ b/wpa_supplicant/Makefile
-@@ -1245,10 +1245,6 @@ endif
+@@ -1267,10 +1267,6 @@ endif
  OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
  OBJS_p += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
  OBJS_priv += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
index 733b2a74dbd544c5891548fa154970ffe6d84cfa..9e3d490ef81513a7e7760a6fb8fc451202987737 100644 (file)
@@ -61,7 +61,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
 
 --- a/hostapd/Makefile
 +++ b/hostapd/Makefile
-@@ -709,6 +709,7 @@ CFLAGS += -DCONFIG_TLSV12
+@@ -714,6 +714,7 @@ CFLAGS += -DCONFIG_TLSV12
  endif
  
  ifeq ($(CONFIG_TLS), wolfssl)
@@ -69,7 +69,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  CFLAGS += -DCRYPTO_RSA_OAEP_SHA256
  CONFIG_CRYPTO=wolfssl
  ifdef TLS_FUNCS
-@@ -730,6 +731,7 @@ endif
+@@ -735,6 +736,7 @@ endif
  endif
  
  ifeq ($(CONFIG_TLS), openssl)
@@ -77,7 +77,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  CFLAGS += -DCRYPTO_RSA_OAEP_SHA256
  CONFIG_CRYPTO=openssl
  ifdef TLS_FUNCS
-@@ -760,6 +762,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF
+@@ -765,6 +767,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF
  endif
  
  ifeq ($(CONFIG_TLS), mbedtls)
@@ -85,7 +85,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifndef CONFIG_CRYPTO
  CONFIG_CRYPTO=mbedtls
  endif
-@@ -790,6 +793,7 @@ endif
+@@ -795,6 +798,7 @@ endif
  endif
  
  ifeq ($(CONFIG_TLS), gnutls)
@@ -93,7 +93,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifndef CONFIG_CRYPTO
  # default to libgcrypt
  CONFIG_CRYPTO=gnutls
-@@ -820,6 +824,7 @@ endif
+@@ -825,6 +829,7 @@ endif
  endif
  
  ifeq ($(CONFIG_TLS), internal)
@@ -101,7 +101,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifndef CONFIG_CRYPTO
  CONFIG_CRYPTO=internal
  endif
-@@ -898,6 +903,7 @@ endif
+@@ -903,6 +908,7 @@ endif
  endif
  
  ifeq ($(CONFIG_TLS), linux)
@@ -979,7 +979,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
              raise HwsimSkip("Crypto library does not support Brainpool curves: " + tls)
      capa = dev.request("GET_CAPABILITY dpp")
      ver = 1
-@@ -3925,6 +3926,9 @@ def test_dpp_proto_auth_req_no_i_proto_k
+@@ -3940,6 +3941,9 @@ def test_dpp_proto_auth_req_no_i_proto_k
  
  def test_dpp_proto_auth_req_invalid_i_proto_key(dev, apdev):
      """DPP protocol testing - invalid I-proto key in Auth Req"""
@@ -989,7 +989,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
      run_dpp_proto_auth_req_missing(dev, 66, "Invalid Initiator Protocol Key")
  
  def test_dpp_proto_auth_req_no_i_nonce(dev, apdev):
-@@ -4020,7 +4024,12 @@ def test_dpp_proto_auth_resp_no_r_proto_
+@@ -4035,7 +4039,12 @@ def test_dpp_proto_auth_resp_no_r_proto_
  
  def test_dpp_proto_auth_resp_invalid_r_proto_key(dev, apdev):
      """DPP protocol testing - invalid R-Proto Key in Auth Resp"""
@@ -1003,7 +1003,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  
  def test_dpp_proto_auth_resp_no_r_nonce(dev, apdev):
      """DPP protocol testing - no R-nonce in Auth Resp"""
-@@ -4382,11 +4391,17 @@ def test_dpp_proto_pkex_exchange_resp_in
+@@ -4397,11 +4406,17 @@ def test_dpp_proto_pkex_exchange_resp_in
  
  def test_dpp_proto_pkex_cr_req_invalid_bootstrap_key(dev, apdev):
      """DPP protocol testing - invalid Bootstrap Key in PKEX Commit-Reveal Request"""
@@ -1124,7 +1124,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
      heavy_groups = [14, 15, 16]
      suitable_groups = [15, 16, 17, 18, 19, 20, 21]
      groups = [str(g) for g in sae_groups]
-@@ -2387,6 +2392,8 @@ def run_sae_pwe_group(dev, apdev, group)
+@@ -2561,6 +2566,8 @@ def run_sae_pwe_group(dev, apdev, group)
              logger.info("Add Brainpool EC groups since OpenSSL is new enough")
          elif tls.startswith("wolfSSL"):
              logger.info("Make sure Brainpool EC groups were enabled when compiling wolfSSL")
@@ -1289,7 +1289,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
                if (need_more_data) {
 --- a/wpa_supplicant/Makefile
 +++ b/wpa_supplicant/Makefile
-@@ -1192,6 +1192,7 @@ TLS_FUNCS=y
+@@ -1214,6 +1214,7 @@ TLS_FUNCS=y
  endif
  
  ifeq ($(CONFIG_TLS), wolfssl)
@@ -1297,7 +1297,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  CFLAGS += -DCRYPTO_RSA_OAEP_SHA256
  ifdef TLS_FUNCS
  CFLAGS += -DWOLFSSL_DER_LOAD
-@@ -1208,6 +1209,7 @@ LIBS_p += -lwolfssl -lm
+@@ -1230,6 +1231,7 @@ LIBS_p += -lwolfssl -lm
  endif
  
  ifeq ($(CONFIG_TLS), openssl)
@@ -1305,7 +1305,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  CFLAGS += -DCRYPTO_RSA_OAEP_SHA256
  ifdef TLS_FUNCS
  CFLAGS += -DEAP_TLS_OPENSSL
-@@ -1235,6 +1237,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF
+@@ -1257,6 +1259,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF
  endif
  
  ifeq ($(CONFIG_TLS), mbedtls)
@@ -1313,7 +1313,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifndef CONFIG_CRYPTO
  CONFIG_CRYPTO=mbedtls
  endif
-@@ -1254,6 +1257,7 @@ endif
+@@ -1276,6 +1279,7 @@ endif
  endif
  
  ifeq ($(CONFIG_TLS), gnutls)
@@ -1321,7 +1321,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifndef CONFIG_CRYPTO
  # default to libgcrypt
  CONFIG_CRYPTO=gnutls
-@@ -1284,6 +1288,7 @@ endif
+@@ -1306,6 +1310,7 @@ endif
  endif
  
  ifeq ($(CONFIG_TLS), internal)
@@ -1329,7 +1329,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
  ifndef CONFIG_CRYPTO
  CONFIG_CRYPTO=internal
  endif
-@@ -1364,6 +1369,7 @@ endif
+@@ -1386,6 +1391,7 @@ endif
  endif
  
  ifeq ($(CONFIG_TLS), linux)
index 0b0737e760e5d8ad2ef2e70009bd28b85ef4dcb4..6b80577a705c9c10b73ee5058b4d4e24cb7bc5e4 100644 (file)
@@ -29,7 +29,7 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
        wpa_printf(MSG_DEBUG, "DPP: Generating a keypair");
 --- a/src/common/sae.c
 +++ b/src/common/sae.c
-@@ -1287,6 +1287,13 @@ void sae_deinit_pt(struct sae_pt *pt)
+@@ -1298,6 +1298,13 @@ void sae_deinit_pt(struct sae_pt *pt)
  static int sae_derive_commit_element_ecc(struct sae_data *sae,
                                         struct crypto_bignum *mask)
  {
index 4b6ed646f5f73afa6f8d08929ac733ce6a6a4b76..45eaa0e59b0d8aab6d4302e60da2ff325b93da52 100644 (file)
@@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/wpa_supplicant/dpp_supplicant.c
 +++ b/wpa_supplicant/dpp_supplicant.c
-@@ -5131,7 +5131,10 @@ static void wpas_dpp_chirp_start(struct
+@@ -5132,7 +5132,10 @@ static void wpas_dpp_chirp_start(struct
                    wpa_s->own_addr, broadcast,
                    wpabuf_head(msg), wpabuf_len(msg),
                    2000, wpas_dpp_chirp_tx_status, 0) < 0)
index d344a006b1fb3c067e3a60d547e9a80ea594c1ba..81d36f47b5557d9bf9a5235a422b80c80c725f19 100644 (file)
@@ -29,7 +29,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org>
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -1225,6 +1225,8 @@ static int hostapd_config_vht_capab(stru
+@@ -1229,6 +1229,8 @@ static int hostapd_config_vht_capab(stru
                conf->vht_capab |= VHT_CAP_RX_ANTENNA_PATTERN;
        if (os_strstr(capab, "[TX-ANTENNA-PATTERN]"))
                conf->vht_capab |= VHT_CAP_TX_ANTENNA_PATTERN;
@@ -48,7 +48,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org>
        u8 *pos = eid;
 +      u8 chwidth;
  
-       if (!hapd->iconf->ieee80211n || hapd->conf->disable_11n ||
+       if (!hostapd_is_ht_enabled(hapd) ||
            is_6ghz_op_class(hapd->iconf->op_class))
 @@ -143,6 +145,13 @@ u8 * hostapd_eid_ht_operation(struct hos
        oper->operation_mode = host_to_le16(hapd->iface->ht_op_mode);
@@ -66,7 +66,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org>
        return pos;
 --- a/src/ap/ieee802_11_vht.c
 +++ b/src/ap/ieee802_11_vht.c
-@@ -26,6 +26,7 @@ u8 * hostapd_eid_vht_capabilities(struct
+@@ -44,6 +44,7 @@ u8 * hostapd_eid_vht_capabilities(struct
        struct ieee80211_vht_capabilities *cap;
        struct hostapd_hw_modes *mode = hapd->iface->current_mode;
        u8 *pos = eid;
@@ -74,7 +74,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org>
  
        if (!mode || is_6ghz_op_class(hapd->iconf->op_class))
                return eid;
-@@ -63,6 +64,17 @@ u8 * hostapd_eid_vht_capabilities(struct
+@@ -70,6 +71,17 @@ u8 * hostapd_eid_vht_capabilities(struct
                        host_to_le32(nsts << VHT_CAP_BEAMFORMEE_STS_OFFSET);
        }
  
@@ -92,7 +92,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org>
        /* Supported MCS set comes from hw */
        os_memcpy(&cap->vht_supported_mcs_set, mode->vht_mcs_set, 8);
  
-@@ -75,6 +87,7 @@ u8 * hostapd_eid_vht_capabilities(struct
+@@ -82,6 +94,7 @@ u8 * hostapd_eid_vht_capabilities(struct
  u8 * hostapd_eid_vht_operation(struct hostapd_data *hapd, u8 *eid)
  {
        struct ieee80211_vht_operation *oper;
@@ -100,7 +100,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org>
        u8 *pos = eid;
        enum oper_chan_width oper_chwidth =
                hostapd_get_oper_chwidth(hapd->iconf);
-@@ -113,6 +126,7 @@ u8 * hostapd_eid_vht_operation(struct ho
+@@ -120,6 +133,7 @@ u8 * hostapd_eid_vht_operation(struct ho
        oper->vht_op_info_chan_center_freq_seg1_idx = seg1;
  
        oper->vht_op_info_chwidth = oper_chwidth;
@@ -108,7 +108,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org>
        if (oper_chwidth == CONF_OPER_CHWIDTH_160MHZ) {
                /*
                 * Convert 160 MHz channel width to new style as interop
-@@ -126,6 +140,9 @@ u8 * hostapd_eid_vht_operation(struct ho
+@@ -133,6 +147,9 @@ u8 * hostapd_eid_vht_operation(struct ho
                        oper->vht_op_info_chan_center_freq_seg0_idx -= 8;
                else
                        oper->vht_op_info_chan_center_freq_seg0_idx += 8;
@@ -120,7 +120,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org>
                 * Convert 80+80 MHz channel width to new style as interop
 --- a/src/common/hw_features_common.c
 +++ b/src/common/hw_features_common.c
-@@ -924,6 +924,7 @@ int ieee80211ac_cap_check(u32 hw, u32 co
+@@ -925,6 +925,7 @@ int ieee80211ac_cap_check(u32 hw, u32 co
        VHT_CAP_CHECK(VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB);
        VHT_CAP_CHECK(VHT_CAP_RX_ANTENNA_PATTERN);
        VHT_CAP_CHECK(VHT_CAP_TX_ANTENNA_PATTERN);
@@ -130,7 +130,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org>
  #undef VHT_CAP_CHECK_MAX
 --- a/src/common/ieee802_11_defs.h
 +++ b/src/common/ieee802_11_defs.h
-@@ -1438,6 +1438,8 @@ struct ieee80211_ampe_ie {
+@@ -1467,6 +1467,8 @@ struct ieee80211_ampe_ie {
  #define VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB     ((u32) BIT(26) | BIT(27))
  #define VHT_CAP_RX_ANTENNA_PATTERN                  ((u32) BIT(28))
  #define VHT_CAP_TX_ANTENNA_PATTERN                  ((u32) BIT(29))
index 02ed2dedf110ff86478e00cd63db6475c064c03e..c2cf98bef466b0144da78c345885507eb3ba305f 100644 (file)
@@ -1,6 +1,6 @@
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -2449,7 +2449,11 @@ static int hostapd_owe_iface_iter(struct
+@@ -2477,7 +2477,11 @@ static int hostapd_owe_iface_iter(struct
                if (!bss->conf->ssid.ssid_set || !bss->conf->ssid.ssid_len ||
                    is_zero_ether_addr(bss->own_addr))
                        continue;
@@ -13,7 +13,7 @@
                os_memcpy(hapd->conf->owe_transition_bssid, bss->own_addr,
                          ETH_ALEN);
                os_memcpy(hapd->conf->owe_transition_ssid,
-@@ -2466,10 +2470,6 @@ static int hostapd_owe_iface_iter(struct
+@@ -2494,10 +2498,6 @@ static int hostapd_owe_iface_iter(struct
  
  int hostapd_owe_trans_get_info(struct hostapd_data *hapd)
  {
diff --git a/package/network/services/hostapd/patches/190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch b/package/network/services/hostapd/patches/190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch
deleted file mode 100644 (file)
index d05f272..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-From c14e53ea013415a29e9c493e9dacafb6dc5b31ee Mon Sep 17 00:00:00 2001
-From: Michael-CY Lee <michael-cy.lee@mediatek.com>
-Date: Fri, 8 Nov 2024 10:20:03 +0800
-Subject: [PATCH] hostapd: Fix hostapd crash if setup a iface with a link bss failed
-
-The crash occurs while some link bsses is traversing all the links by using
-for_each_mld_link(), and hostapd access to the link bss which is already
-been freed.
-
-If hostapd setup a link bss failed, the link should be removed from
-its hostapd_mld. However, the function hostapd_bss_link_deinit
-doesn't remove the link bss correctly if it is the first bss and
-hapd->drv_priv is null. Therefore we should refator the remove iface flow
-as hostapd_remove_iface (used in wifi down cmd).
-
-There are some cases that setup a bss may fail (e.g. afc query failed) or
-trigger channel switch while hostapd is setting up other links.
-The failed link would be add into hostapd_mld while driver_init().
-
-Signed-off-by: Allen Ye <allen.ye@mediatek.com>
-Signed-off-by: Michael-CY Lee <michael-cy.lee@mediatek.com>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
- src/ap/hostapd.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
---- a/src/ap/hostapd.c
-+++ b/src/ap/hostapd.c
-@@ -3878,6 +3878,7 @@ int hostapd_add_iface(struct hapd_interf
-                       }
-                       if (hostapd_setup_interface(hapd_iface)) {
-+                              hostapd_bss_link_deinit(hapd_iface->bss[0]);
-                               hostapd_deinit_driver(
-                                       hapd_iface->bss[0]->driver,
-                                       hapd_iface->bss[0]->drv_priv,
-@@ -5135,6 +5136,9 @@ int hostapd_mld_remove_link(struct hosta
-       if (!mld)
-               return -1;
-+      if (!hapd->link.next)
-+              return 0;
-+
-       dl_list_del(&hapd->link);
-       mld->num_links--;
index fa44875aa64d3c90c48e1688e54605246bb6dcd0..e60206bc94696c283fd11c3ba876a80478cb1ba2 100644 (file)
@@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -4934,6 +4934,8 @@ static int hostapd_config_fill(struct ho
+@@ -4957,6 +4957,8 @@ static int hostapd_config_fill(struct ho
                conf->punct_acs_threshold = val;
        } else if (os_strcmp(buf, "mld_ap") == 0) {
                bss->mld_ap = !!atoi(pos);
@@ -20,20 +20,19 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                        wpa_printf(MSG_ERROR, "Line %d: Invalid mld_addr",
 --- a/src/ap/ap_config.c
 +++ b/src/ap/ap_config.c
-@@ -177,6 +177,10 @@ void hostapd_config_defaults_bss(struct
-       bss->pasn_comeback_after = 10;
-       bss->pasn_noauth = 1;
+@@ -179,6 +179,9 @@ void hostapd_config_defaults_bss(struct
  #endif /* CONFIG_PASN */
-+
+       bss->urnm_mfpr_x20 = -1;
+       bss->urnm_mfpr = -1;
 +#ifdef CONFIG_IEEE80211BE
 +      bss->mld_link_id = -1;
 +#endif
- }
+ #ifdef CONFIG_ENC_ASSOC
+       bss->assoc_frame_encryption = 0;
+       bss->pmksa_caching_privacy = 0;
 --- a/src/ap/ap_config.h
 +++ b/src/ap/ap_config.h
-@@ -967,6 +967,8 @@ struct hostapd_bss_config {
+@@ -979,6 +979,8 @@ struct hostapd_bss_config {
        /* The AP's MLD MAC address within the AP MLD */
        u8 mld_addr[ETH_ALEN];
  
@@ -44,7 +43,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
         * If set indicate the AP as disabled in the RNR element included in the
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -3105,7 +3105,10 @@ struct hostapd_iface * hostapd_alloc_ifa
+@@ -3120,7 +3120,10 @@ struct hostapd_iface * hostapd_alloc_ifa
  #ifdef CONFIG_IEEE80211BE
  static void hostapd_bss_alloc_link_id(struct hostapd_data *hapd)
  {
diff --git a/package/network/services/hostapd/patches/192-nl80211-cancel-scans-whenever-the-first-bss-is-remov.patch b/package/network/services/hostapd/patches/192-nl80211-cancel-scans-whenever-the-first-bss-is-remov.patch
deleted file mode 100644 (file)
index 24ddf5b..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-From: Felix Fietkau <nbd@nbd.name>
-Date: Tue, 21 Oct 2025 10:19:41 +0200
-Subject: [PATCH] nl80211: cancel scans whenever the first bss is removed
-
-Whenever the first bss is removed, any pending scan still keeps a reference
-to it. Cancel it in order to prevent use-after-free bugs.
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
-
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -9261,6 +9261,9 @@ static int wpa_driver_nl80211_if_remove(
-                       wpa_printf(MSG_INFO, "nl80211: %s - could not find "
-                                  "BSS %p in the list", __func__, bss);
-       } else {
-+              if (eloop_cancel_timeout(wpa_driver_nl80211_scan_timeout, drv, bss->ctx))
-+                      wpa_driver_nl80211_scan_timeout(drv, bss->ctx);
-+
-               wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
-               nl80211_teardown_ap(bss);
-               nl80211_remove_links(bss);
index 53d89ef89b5051f527d506697b621fdce1867b9c..299f029af95a9414ab3036751474e6a4e927b215 100644 (file)
@@ -43,7 +43,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  LIBS += $(DRV_AP_LIBS)
  
  ifdef CONFIG_L2_PACKET
-@@ -1406,6 +1412,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
+@@ -1416,6 +1422,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
  _OBJS_VAR := OBJS
  include ../src/objs.mk
  
@@ -56,7 +56,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  hostapd: $(OBJS)
        $(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
        @$(E) "  LD " $@
-@@ -1494,6 +1506,12 @@ include ../src/objs.mk
+@@ -1504,6 +1516,12 @@ include ../src/objs.mk
  _OBJS_VAR := SOBJS
  include ../src/objs.mk
  
@@ -71,7 +71,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
        @$(E) "  LD " $@
 --- a/hostapd/main.c
 +++ b/hostapd/main.c
-@@ -737,6 +737,11 @@ fail:
+@@ -744,6 +744,11 @@ fail:
        return -1;
  }
  
@@ -83,18 +83,18 @@ This allows building both hostapd and wpa_supplicant as a single binary
  
  #ifdef CONFIG_WPS
  static int gen_uuid(const char *txt_addr)
-@@ -858,6 +863,8 @@ int main(int argc, char *argv[])
+@@ -868,6 +873,8 @@ int main(int argc, char *argv[])
                return -1;
  #endif /* CONFIG_DPP */
  
 +      wpa_supplicant_event = hostapd_wpa_event;
 +      wpa_supplicant_event_global = hostapd_wpa_event_global;
        for (;;) {
-               c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q");
+               c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:qz:");
                if (c < 0)
 --- a/src/ap/drv_callbacks.c
 +++ b/src/ap/drv_callbacks.c
-@@ -2561,8 +2561,8 @@ static void hostapd_mld_iface_disable(st
+@@ -2580,8 +2580,8 @@ static void hostapd_mld_iface_disable(st
  #endif /* CONFIG_IEEE80211BE */
  
  
@@ -105,7 +105,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  {
        struct hostapd_data *hapd = ctx;
        struct sta_info *sta;
-@@ -2920,7 +2920,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -2943,7 +2943,7 @@ void wpa_supplicant_event(void *ctx, enu
  }
  
  
@@ -116,7 +116,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
        struct hapd_interfaces *interfaces = ctx;
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -7166,8 +7166,8 @@ union wpa_event_data {
+@@ -7290,8 +7290,8 @@ union wpa_event_data {
   * Driver wrapper code should call this function whenever an event is received
   * from the driver.
   */
@@ -127,7 +127,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  
  /**
   * wpa_supplicant_event_global - Report a driver event for wpa_supplicant
-@@ -7179,7 +7179,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -7303,7 +7303,7 @@ void wpa_supplicant_event(void *ctx, enu
   * Same as wpa_supplicant_event(), but we search for the interface in
   * wpa_global.
   */
@@ -159,7 +159,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  include ../src/build.rules
  
  ifdef CONFIG_BUILD_PASN_SO
-@@ -390,7 +391,9 @@ endif
+@@ -407,7 +408,9 @@ endif
  ifdef CONFIG_IBSS_RSN
  NEED_RSN_AUTHENTICATOR=y
  CFLAGS += -DCONFIG_IBSS_RSN
@@ -169,7 +169,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  OBJS += ibss_rsn.o
  endif
  
-@@ -984,6 +987,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
+@@ -1006,6 +1009,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS
  CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
  LIBS += -ldl -rdynamic
  endif
@@ -180,7 +180,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  endif
  
  ifdef CONFIG_AP
-@@ -991,9 +998,11 @@ NEED_EAP_COMMON=y
+@@ -1013,9 +1020,11 @@ NEED_EAP_COMMON=y
  NEED_RSN_AUTHENTICATOR=y
  CFLAGS += -DCONFIG_AP
  OBJS += ap.o
@@ -192,7 +192,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  OBJS += ../src/ap/hostapd.o
  OBJS += ../src/ap/wpa_auth_glue.o
  OBJS += ../src/ap/utils.o
-@@ -1084,6 +1093,12 @@ endif
+@@ -1106,6 +1115,12 @@ endif
  ifdef CONFIG_HS20
  OBJS += ../src/ap/hs20.o
  endif
@@ -205,7 +205,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  endif
  
  ifdef CONFIG_MBO
-@@ -1093,7 +1108,9 @@ NEED_GAS=y
+@@ -1115,7 +1130,9 @@ NEED_GAS=y
  endif
  
  ifdef NEED_RSN_AUTHENTICATOR
@@ -215,7 +215,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  NEED_AES_WRAP=y
  OBJS += ../src/ap/wpa_auth.o
  OBJS += ../src/ap/wpa_auth_ie.o
-@@ -2084,6 +2101,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
+@@ -2111,6 +2128,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
  
  _OBJS_VAR := OBJS
  include ../src/objs.mk
@@ -228,7 +228,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
        $(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
        @$(E) "  LD " $@
-@@ -2216,6 +2239,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK)
+@@ -2243,6 +2266,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK)
        $(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
        @$(E) "  sed" $<
  
@@ -278,7 +278,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
        os_memset(&eapol_test, 0, sizeof(eapol_test));
 --- a/wpa_supplicant/events.c
 +++ b/wpa_supplicant/events.c
-@@ -6257,8 +6257,8 @@ static int wpas_pasn_auth(struct wpa_sup
+@@ -6519,8 +6519,8 @@ static int wpas_pasn_auth(struct wpa_sup
  #endif /* CONFIG_PASN */
  
  
@@ -289,7 +289,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  {
        struct wpa_supplicant *wpa_s = ctx;
        int resched;
-@@ -7232,7 +7232,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -7514,7 +7514,7 @@ void wpa_supplicant_event(void *ctx, enu
  }
  
  
@@ -331,7 +331,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
        os_memset(&global, 0, sizeof(global));
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -8156,7 +8156,6 @@ struct wpa_interface * wpa_supplicant_ma
+@@ -8262,7 +8262,6 @@ struct wpa_interface * wpa_supplicant_ma
        return NULL;
  }
  
@@ -339,7 +339,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  /**
   * wpa_supplicant_match_existing - Match existing interfaces
   * @global: Pointer to global data from wpa_supplicant_init()
-@@ -8191,6 +8190,11 @@ static int wpa_supplicant_match_existing
+@@ -8297,6 +8296,11 @@ static int wpa_supplicant_match_existing
  
  #endif /* CONFIG_MATCH_IFACE */
  
@@ -351,7 +351,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
  
  /**
   * wpa_supplicant_add_iface - Add a new network interface
-@@ -8447,6 +8451,8 @@ struct wpa_global * wpa_supplicant_init(
+@@ -8553,6 +8557,8 @@ struct wpa_global * wpa_supplicant_init(
  #ifndef CONFIG_NO_WPA_MSG
        wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
  #endif /* CONFIG_NO_WPA_MSG */
index 531852cf210e0f8798c8cfb3b48943da0f86d15f..4de7e7a590f39b132ad723ed130676d767f9fc98 100644 (file)
@@ -5,7 +5,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel
 
 --- a/hostapd/Makefile
 +++ b/hostapd/Makefile
-@@ -1419,7 +1419,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS)
+@@ -1429,7 +1429,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS)
        @$(AR) cr $@ hostapd_multi.o $(OBJS)
  
  hostapd: $(OBJS)
@@ -14,7 +14,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel
        @$(E) "  LD " $@
  
  ifdef CONFIG_WPA_TRACE
-@@ -1430,7 +1430,7 @@ _OBJS_VAR := OBJS_c
+@@ -1440,7 +1440,7 @@ _OBJS_VAR := OBJS_c
  include ../src/objs.mk
  
  hostapd_cli: $(OBJS_c)
@@ -25,7 +25,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel
  NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS)
 --- a/wpa_supplicant/Makefile
 +++ b/wpa_supplicant/Makefile
-@@ -2108,31 +2108,31 @@ wpa_supplicant_multi.a: .config $(BCHECK
+@@ -2135,31 +2135,31 @@ wpa_supplicant_multi.a: .config $(BCHECK
        @$(AR) cr $@ wpa_supplicant_multi.o $(OBJS)
  
  wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
index b3ac512e4cffff408869350721260b80429b65ac..5dcd22160cd02dcf9d66b8f48c3c5cc584a6d2c4 100644 (file)
@@ -13,7 +13,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
 
 --- a/wpa_supplicant/ctrl_iface.c
 +++ b/wpa_supplicant/ctrl_iface.c
-@@ -13676,7 +13676,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13989,7 +13989,7 @@ char * wpa_supplicant_ctrl_iface_process
                if (wpas_ctrl_iface_coloc_intf_report(wpa_s, buf + 18))
                        reply_len = -1;
  #endif /* CONFIG_WNM */
@@ -22,7 +22,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
        } else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) {
                if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18))
                        reply_len = -1;
-@@ -13686,7 +13686,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13999,7 +13999,7 @@ char * wpa_supplicant_ctrl_iface_process
        } else if (os_strncmp(buf, "BSS_TM_REQ ", 11) == 0) {
                if (ap_ctrl_iface_bss_tm_req(wpa_s, buf + 11))
                        reply_len = -1;
index cb3bea7771ee168d4a471a98c7a601fba9943f6e..2961749c39e6e6e38550904c55f6c964c8bcdbf7 100644 (file)
@@ -43,7 +43,7 @@ Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
  struct mbo_non_pref_chan_info {
 --- a/src/common/defs.h
 +++ b/src/common/defs.h
-@@ -62,6 +62,10 @@
+@@ -63,6 +63,10 @@
                         WPA_KEY_MGMT_FT_FILS_SHA256 | \
                         WPA_KEY_MGMT_FT_FILS_SHA384)
  
index e6456c6338f8b3afb0e6be09f2d702dee48d1c32..a3a1786402a263b816bf1cfc2d75de35002276df 100644 (file)
@@ -6,7 +6,7 @@ Subject: [PATCH] hostapd: support optional argument for the -v switch of
 
 --- a/hostapd/main.c
 +++ b/hostapd/main.c
-@@ -31,7 +31,7 @@
+@@ -32,7 +32,7 @@
  #include "config_file.h"
  #include "eap_register.h"
  #include "ctrl_iface.h"
@@ -15,16 +15,16 @@ Subject: [PATCH] hostapd: support optional argument for the -v switch of
  
  struct hapd_global {
        void **drv_priv;
-@@ -866,7 +866,7 @@ int main(int argc, char *argv[])
+@@ -876,7 +876,7 @@ int main(int argc, char *argv[])
        wpa_supplicant_event = hostapd_wpa_event;
        wpa_supplicant_event_global = hostapd_wpa_event_global;
        for (;;) {
--              c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q");
-+              c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:g:G:qv::");
+-              c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:qz:");
++              c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:v::g:G:qz:");
                if (c < 0)
                        break;
                switch (c) {
-@@ -903,6 +903,8 @@ int main(int argc, char *argv[])
+@@ -913,6 +913,8 @@ int main(int argc, char *argv[])
                        break;
  #endif /* CONFIG_DEBUG_LINUX_TRACING */
                case 'v':
@@ -43,16 +43,16 @@ Subject: [PATCH] hostapd: support optional argument for the -v switch of
  #include "crypto/crypto.h"
  #include "fst/fst.h"
  #include "wpa_supplicant_i.h"
-@@ -202,7 +203,7 @@ int main(int argc, char *argv[])
+@@ -213,7 +214,7 @@ int main(int argc, char *argv[])
  
        for (;;) {
                c = getopt(argc, argv,
--                         "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvW");
-+                         "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuv::W");
+-                         "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvWyz:");
++                         "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuv::Wyz:");
                if (c < 0)
                        break;
                switch (c) {
-@@ -302,8 +303,12 @@ int main(int argc, char *argv[])
+@@ -313,8 +314,12 @@ int main(int argc, char *argv[])
                        break;
  #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
                case 'v':
index 90737b2ac0e9b6daaedc0463172834e19c6fbebc..8cb7ef601b82c272217d2f7692a67c08da4eb0fa 100644 (file)
@@ -37,7 +37,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the
  
  
  static int hostapd_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc,
-@@ -1694,13 +1690,10 @@ static const struct hostapd_cli_cmd host
+@@ -1715,13 +1711,10 @@ static const struct hostapd_cli_cmd host
        { "disassociate", hostapd_cli_cmd_disassociate,
          hostapd_complete_stations,
          "<addr> = disassociate a station" },
@@ -51,7 +51,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the
        { "wps_pin", hostapd_cli_cmd_wps_pin, NULL,
          "<uuid> <pin> [timeout] [addr] = add WPS Enrollee PIN" },
        { "wps_check_pin", hostapd_cli_cmd_wps_check_pin, NULL,
-@@ -1725,7 +1718,6 @@ static const struct hostapd_cli_cmd host
+@@ -1746,7 +1739,6 @@ static const struct hostapd_cli_cmd host
          "<SSID> <auth> <encr> <key> = configure AP" },
        { "wps_get_status", hostapd_cli_cmd_wps_get_status, NULL,
          "= show current WPS status" },
index 387a19b2bf09cfb53b4e4d9fc2c438b5a66e8992..5dbad411ca3cfaab7f53b670636b53e195f4ed60 100644 (file)
@@ -16,7 +16,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  else
 --- a/hostapd/ctrl_iface.c
 +++ b/hostapd/ctrl_iface.c
-@@ -4115,6 +4115,7 @@ static int hostapd_ctrl_iface_receive_pr
+@@ -3977,6 +3977,7 @@ static int hostapd_ctrl_iface_receive_pr
                                                      reply_size);
        } else if (os_strcmp(buf, "STATUS-DRIVER") == 0) {
                reply_len = hostapd_drv_status(hapd, reply, reply_size);
@@ -24,7 +24,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
        } else if (os_strcmp(buf, "MIB") == 0) {
                reply_len = ieee802_11_get_mib(hapd, reply, reply_size);
                if (reply_len >= 0) {
-@@ -4156,6 +4157,7 @@ static int hostapd_ctrl_iface_receive_pr
+@@ -4018,6 +4019,7 @@ static int hostapd_ctrl_iface_receive_pr
        } else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
                reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply,
                                                        reply_size);
@@ -34,7 +34,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
                        reply_len = -1;
 --- a/src/ap/ctrl_iface_ap.c
 +++ b/src/ap/ctrl_iface_ap.c
-@@ -26,6 +26,26 @@
+@@ -27,6 +27,26 @@
  #include "taxonomy.h"
  #include "wnm_ap.h"
  
@@ -61,7 +61,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  
  static size_t hostapd_write_ht_mcs_bitmask(char *buf, size_t buflen,
                                           size_t curr_len, const u8 *mcs_set)
-@@ -212,26 +232,6 @@ static const char * timeout_next_str(int
+@@ -213,26 +233,6 @@ static const char * timeout_next_str(int
  }
  
  
@@ -88,7 +88,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  static int hostapd_ctrl_iface_sta_mib(struct hostapd_data *hapd,
                                      struct sta_info *sta,
                                      char *buf, size_t buflen)
-@@ -571,6 +571,7 @@ int hostapd_ctrl_iface_sta_next(struct h
+@@ -572,6 +572,7 @@ int hostapd_ctrl_iface_sta_next(struct h
        return hostapd_ctrl_iface_sta_mib(hapd, sta->next, buf, buflen);
  }
  
@@ -96,19 +96,19 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  
  #ifdef CONFIG_P2P_MANAGER
  static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
-@@ -1043,12 +1044,12 @@ int hostapd_ctrl_iface_status(struct hos
+@@ -1041,12 +1042,12 @@ int hostapd_ctrl_iface_status(struct hos
                        return len;
                len += ret;
        }
 -
 +#ifdef CONFIG_CTRL_IFACE_MIB
-       if (iface->conf->ieee80211n && !hapd->conf->disable_11n && mode) {
+       if (hostapd_is_ht_enabled(hapd) && mode) {
                len = hostapd_write_ht_mcs_bitmask(buf, buflen, len,
                                                   mode->mcs_set);
        }
 -
 +#endif /* CONFIG_CTRL_IFACE_MIB */
-       if (iface->current_rates && iface->num_rates) {
+       if (hapd->current_rates && hapd->num_rates) {
                ret = os_snprintf(buf + len, buflen - len, "supported_rates=");
                if (os_snprintf_error(buflen - len, ret))
 --- a/src/ap/ieee802_1x.c
@@ -131,7 +131,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  static void ieee802_1x_wnm_notif_send(void *eloop_ctx, void *timeout_ctx)
 --- a/src/ap/wpa_auth.c
 +++ b/src/ap/wpa_auth.c
-@@ -6238,6 +6238,7 @@ static const char * wpa_bool_txt(int val
+@@ -6483,6 +6483,7 @@ static const char * wpa_bool_txt(int val
        return val ? "TRUE" : "FALSE";
  }
  
@@ -139,7 +139,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  
  #define RSN_SUITE "%02x-%02x-%02x-%d"
  #define RSN_SUITE_ARG(s) \
-@@ -6390,7 +6391,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
+@@ -6635,7 +6636,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
  
        return len;
  }
@@ -150,7 +150,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  {
 --- a/src/rsn_supp/wpa.c
 +++ b/src/rsn_supp/wpa.c
-@@ -4189,6 +4189,8 @@ static u32 wpa_key_mgmt_suite(struct wpa
+@@ -4251,6 +4251,8 @@ static u32 wpa_key_mgmt_suite(struct wpa
  }
  
  
@@ -159,7 +159,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  #define RSN_SUITE "%02x-%02x-%02x-%d"
  #define RSN_SUITE_ARG(s) \
  ((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff
-@@ -4270,6 +4272,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch
+@@ -4332,6 +4334,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch
  
        return (int) len;
  }
@@ -169,7 +169,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  
 --- a/wpa_supplicant/Makefile
 +++ b/wpa_supplicant/Makefile
-@@ -1042,6 +1042,9 @@ ifdef CONFIG_FILS
+@@ -1064,6 +1064,9 @@ ifdef CONFIG_FILS
  OBJS += ../src/ap/fils_hlp.o
  endif
  ifdef CONFIG_CTRL_IFACE
@@ -181,7 +181,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  
 --- a/wpa_supplicant/ap.c
 +++ b/wpa_supplicant/ap.c
-@@ -1525,7 +1525,7 @@ int wpas_ap_wps_nfc_report_handover(stru
+@@ -1527,7 +1527,7 @@ int wpas_ap_wps_nfc_report_handover(stru
  #endif /* CONFIG_WPS */
  
  
@@ -192,7 +192,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
                            char *buf, size_t buflen)
 --- a/wpa_supplicant/ctrl_iface.c
 +++ b/wpa_supplicant/ctrl_iface.c
-@@ -2375,7 +2375,7 @@ static int wpa_supplicant_ctrl_iface_sta
+@@ -2404,7 +2404,7 @@ static int wpa_supplicant_ctrl_iface_sta
                        pos += ret;
                }
  
@@ -201,15 +201,15 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
                if (wpa_s->ap_iface) {
                        pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos,
                                                            end - pos,
-@@ -13005,6 +13005,7 @@ char * wpa_supplicant_ctrl_iface_process
-                       reply_len = -1;
+@@ -13318,6 +13318,7 @@ char * wpa_supplicant_ctrl_iface_process
        } else if (os_strncmp(buf, "NOTE ", 5) == 0) {
                wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
+               wpa_trace_set_context(buf + 5);
 +#ifdef CONFIG_CTRL_IFACE_MIB
        } else if (os_strcmp(buf, "MIB") == 0) {
                reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);
                if (reply_len >= 0) {
-@@ -13017,6 +13018,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13330,6 +13331,7 @@ char * wpa_supplicant_ctrl_iface_process
                                reply_size - reply_len);
  #endif /* CONFIG_MACSEC */
                }
@@ -217,7 +217,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
        } else if (os_strncmp(buf, "STATUS", 6) == 0) {
                reply_len = wpa_supplicant_ctrl_iface_status(
                        wpa_s, buf + 6, reply, reply_size);
-@@ -13504,6 +13506,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13817,6 +13819,7 @@ char * wpa_supplicant_ctrl_iface_process
                reply_len = wpa_supplicant_ctrl_iface_bss(
                        wpa_s, buf + 4, reply, reply_size);
  #ifdef CONFIG_AP
@@ -225,7 +225,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
        } else if (os_strcmp(buf, "STA-FIRST") == 0) {
                reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size);
        } else if (os_strncmp(buf, "STA ", 4) == 0) {
-@@ -13512,12 +13515,15 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13825,12 +13828,15 @@ char * wpa_supplicant_ctrl_iface_process
        } else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) {
                reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply,
                                                   reply_size);
index 314f0eff1b3168ca9f68eed7fac2dbf734728d34..ab3df7c1b44265c985408a5536998addd70d6fc7 100644 (file)
@@ -5,7 +5,7 @@ Subject: [PATCH] Add noscan, no_ht_coex config options
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -3518,6 +3518,10 @@ static int hostapd_config_fill(struct ho
+@@ -3530,6 +3530,10 @@ static int hostapd_config_fill(struct ho
                if (bss->ocv && !bss->ieee80211w)
                        bss->ieee80211w = 1;
  #endif /* CONFIG_OCV */
@@ -18,7 +18,7 @@ Subject: [PATCH] Add noscan, no_ht_coex config options
        } else if (os_strcmp(buf, "ht_capab") == 0) {
 --- a/src/ap/ap_config.h
 +++ b/src/ap/ap_config.h
-@@ -1107,6 +1107,8 @@ struct hostapd_config {
+@@ -1119,6 +1119,8 @@ struct hostapd_config {
  
        int ht_op_mode_fixed;
        u16 ht_capab;
@@ -29,7 +29,7 @@ Subject: [PATCH] Add noscan, no_ht_coex config options
        int no_pri_sec_switch;
 --- a/src/ap/hw_features.c
 +++ b/src/ap/hw_features.c
-@@ -567,7 +567,8 @@ static int ieee80211n_check_40mhz(struct
+@@ -619,7 +619,8 @@ static int ieee80211n_check_40mhz(struct
        int ret;
  
        /* Check that HT40 is used and PRI / SEC switch is allowed */
index 7e4aed800d27614e7fcd13c7aa42ac2990a8764b..44af6f450277eaae1e416c76ca711e26e8fc48ed 100644 (file)
@@ -5,7 +5,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also
 
 --- a/wpa_supplicant/config.c
 +++ b/wpa_supplicant/config.c
-@@ -2642,6 +2642,7 @@ static const struct parse_data ssid_fiel
+@@ -2718,6 +2718,7 @@ static const struct parse_data ssid_fiel
  #else /* CONFIG_MESH */
        { INT_RANGE(mode, 0, 4) },
  #endif /* CONFIG_MESH */
@@ -15,7 +15,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also
        { STR(id_str) },
 --- a/wpa_supplicant/config_file.c
 +++ b/wpa_supplicant/config_file.c
-@@ -869,6 +869,7 @@ static void wpa_config_write_network(FIL
+@@ -885,6 +885,7 @@ static void wpa_config_write_network(FIL
        INT(mode);
  #ifdef CONFIG_MESH
        INT(no_auto_peer);
@@ -25,7 +25,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also
        INT(frequency);
 --- a/wpa_supplicant/config_ssid.h
 +++ b/wpa_supplicant/config_ssid.h
-@@ -1071,6 +1071,8 @@ struct wpa_ssid {
+@@ -1075,6 +1075,8 @@ struct wpa_ssid {
         */
        int no_auto_peer;
  
@@ -36,7 +36,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also
         *
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
-@@ -538,6 +538,8 @@ static int wpa_supplicant_mesh_init(stru
+@@ -517,6 +517,8 @@ static int wpa_supplicant_mesh_init(stru
                           frequency);
                goto out_free;
        }
@@ -47,7 +47,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also
                /*
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -3048,7 +3048,7 @@ static bool ibss_mesh_can_use_vht(struct
+@@ -3117,7 +3117,7 @@ static bool ibss_mesh_can_use_vht(struct
                                  const struct wpa_ssid *ssid,
                                  struct hostapd_hw_modes *mode)
  {
@@ -56,7 +56,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also
                return false;
  
        if (!drv_supports_vht(wpa_s, ssid))
-@@ -3122,7 +3122,7 @@ static void ibss_mesh_select_40mhz(struc
+@@ -3191,7 +3191,7 @@ static void ibss_mesh_select_40mhz(struc
        int i, res;
        unsigned int j;
        static const int ht40plus_5ghz[] = {
@@ -65,7 +65,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also
                149, 157, 165, 173, 184, 192
        };
        static const int ht40plus_6ghz[] = {
-@@ -3475,7 +3475,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3544,7 +3544,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
        int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode);
        enum hostapd_hw_mode hw_mode;
        struct hostapd_hw_modes *mode = NULL;
@@ -74,7 +74,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also
        u8 channel;
        bool is_6ghz, is_24ghz;
        bool dfs_enabled = wpa_s->conf->country[0] && (wpa_s->drv_flags & WPA_DRIVER_FLAGS_RADAR);
-@@ -3519,6 +3519,8 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3588,6 +3588,8 @@ void ibss_mesh_setup_freq(struct wpa_sup
                freq->he_enabled = ibss_mesh_can_use_he(wpa_s, ssid, mode,
                                                        ieee80211_mode);
        freq->channel = channel;
index c64b2afd32fdae63b7f0f37c1f53d4cab9784b6d..275db9dd6bd80c2df1a236c0a9b648417b7151c3 100644 (file)
@@ -5,7 +5,7 @@ Subject: [PATCH] rescan_immediately.patch
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -6404,7 +6404,7 @@ wpa_supplicant_alloc(struct wpa_supplica
+@@ -6480,7 +6480,7 @@ wpa_supplicant_alloc(struct wpa_supplica
        if (wpa_s == NULL)
                return NULL;
        wpa_s->scan_req = INITIAL_SCAN_REQ;
index dd6fa1d05302b8bf8543947f90eaf04205760b32..aeeaeb4331d6bce88117466076034e243a6731b7 100644 (file)
@@ -12,7 +12,7 @@ Subject: [PATCH] hostapd: make rfkill support optional
  NEED_RADIOTAP=y
  NEED_LIBNL=y
  endif
-@@ -111,7 +110,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
+@@ -91,7 +90,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT
  CONFIG_WIRELESS_EXTENSION=y
  NEED_NETLINK=y
  NEED_LINUX_IOCTL=y
@@ -20,7 +20,7 @@ Subject: [PATCH] hostapd: make rfkill support optional
  endif
  
  ifdef CONFIG_DRIVER_NDIS
-@@ -137,7 +135,6 @@ endif
+@@ -117,7 +115,6 @@ endif
  ifdef CONFIG_WIRELESS_EXTENSION
  DRV_WPA_CFLAGS += -DCONFIG_WIRELESS_EXTENSION
  DRV_WPA_OBJS += ../src/drivers/driver_wext.o
@@ -28,7 +28,7 @@ Subject: [PATCH] hostapd: make rfkill support optional
  endif
  
  ifdef NEED_NETLINK
-@@ -146,6 +143,7 @@ endif
+@@ -126,6 +123,7 @@ endif
  
  ifdef NEED_RFKILL
  DRV_OBJS += ../src/drivers/rfkill.o
index cd96dcac74b9b64a48b48e2c846ccdb9f64ccc44..cbb78fb5c21f79e445bbd5c0732184c48e5b7859 100644 (file)
@@ -5,7 +5,7 @@ Subject: [PATCH] wpa_supplicant: fix calling channel switch via wpa_cli on
 
 --- a/wpa_supplicant/ap.c
 +++ b/wpa_supplicant/ap.c
-@@ -1851,17 +1851,37 @@ int ap_switch_channel(struct wpa_supplic
+@@ -1855,6 +1855,21 @@ int ap_switch_channel(struct wpa_supplic
  
  
  #ifdef CONFIG_CTRL_IFACE
@@ -27,10 +27,13 @@ Subject: [PATCH] wpa_supplicant: fix calling channel switch via wpa_cli on
  int ap_ctrl_iface_chanswitch(struct wpa_supplicant *wpa_s, const char *pos)
  {
        struct csa_settings settings;
-       int ret = hostapd_parse_csa_settings(pos, &settings);
+@@ -1874,12 +1889,18 @@ int ap_ctrl_iface_chanswitch(struct wpa_
+               return -1;
  
+       ret = hostapd_parse_csa_settings(iface, pos, &settings);
 -      if (ret)
 -              return ret;
++
 +      if (!(wpa_s->ap_iface && wpa_s->ap_iface->bss[0]) &&
 +          !(wpa_s->ifmsh && wpa_s->ifmsh->bss[0]))
 +              return -1;
diff --git a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch b/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
deleted file mode 100644 (file)
index d91aac2..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-From: Felix Fietkau <nbd@openwrt.org>
-Date: Sat, 23 Oct 2010 23:39:54 +0000
-Subject: [PATCH] nl80211_del_beacon_bss.patch
-
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -6405,8 +6405,7 @@ static void nl80211_teardown_ap(struct i
-       }
-       nl80211_put_wiphy_data_ap(bss);
--      if (bss->flink)
--              bss->flink->beacon_set = 0;
-+      wpa_driver_nl80211_del_beacon_all(bss);
- }
index e858ac24e7be4cea3a9499d68b2cd7b8138cd4eb..3f93de342fc2eb3459f7dfada9c041af7cb8e609 100644 (file)
@@ -9,15 +9,3 @@
  #define ACS_SCAN_RETRY_INTERVAL               5
  
  #else /* CONFIG_ACS */
---- a/src/drivers/driver_nl80211_scan.c
-+++ b/src/drivers/driver_nl80211_scan.c
-@@ -455,6 +455,9 @@ int wpa_driver_nl80211_scan(struct i802_
-                       }
- #endif /* CONFIG_IEEE80211BE */
-+                      if (ret == -EBUSY)
-+                              goto fail;
-+
-                       /*
-                        * mac80211 does not allow scan requests in AP mode, so
-                        * try to do this in station mode.
index bb5e7508f00da7f550eaf3b2fb8c5913327a9022..7582fe1abe201090c83564854d34e8634453a506 100644 (file)
@@ -1,6 +1,6 @@
 --- a/src/drivers/driver_nl80211.h
 +++ b/src/drivers/driver_nl80211.h
-@@ -77,6 +77,7 @@ struct i802_bss {
+@@ -95,6 +95,7 @@ struct i802_bss {
        u64 wdev_id;
        char ifname[IFNAMSIZ + 1];
        char brname[IFNAMSIZ];
@@ -8,7 +8,7 @@
        unsigned int added_if_into_bridge:1;
        unsigned int already_in_bridge:1;
        unsigned int added_bridge:1;
-@@ -325,7 +326,7 @@ send_and_recv_resp(struct wpa_driver_nl8
+@@ -346,7 +347,7 @@ send_and_recv_resp(struct wpa_driver_nl8
  
  int nl80211_create_iface(struct wpa_driver_nl80211_data *drv,
                         const char *ifname, enum nl80211_iftype iftype,
@@ -19,7 +19,7 @@
  void nl80211_remove_iface(struct wpa_driver_nl80211_data *drv, int ifidx);
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -755,6 +755,7 @@ struct wiphy_idx_data {
+@@ -887,6 +887,7 @@ struct wiphy_idx_data {
        enum nl80211_iftype nlmode;
        u8 *macaddr;
        u8 use_4addr;
@@ -27,7 +27,7 @@
  };
  
  
-@@ -780,6 +781,9 @@ static int netdev_info_handler(struct nl
+@@ -912,6 +913,9 @@ static int netdev_info_handler(struct nl
        if (tb[NL80211_ATTR_4ADDR])
                info->use_4addr = nla_get_u8(tb[NL80211_ATTR_4ADDR]);
  
@@ -37,7 +37,7 @@
        return NL_SKIP;
  }
  
-@@ -846,6 +850,20 @@ static int nl80211_get_4addr(struct i802
+@@ -978,6 +982,20 @@ static int nl80211_get_4addr(struct i802
  }
  
  
@@ -58,7 +58,7 @@
  static int nl80211_register_beacons(struct wpa_driver_nl80211_data *drv,
                                    struct nl80211_wiphy_data *w)
  {
-@@ -2427,6 +2445,8 @@ static void * wpa_driver_nl80211_drv_ini
+@@ -2584,6 +2602,8 @@ static void * wpa_driver_nl80211_drv_ini
                                               p2p_mode))
                goto failed;
  
@@ -67,7 +67,7 @@
        if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_TX_STATUS) {
                drv->control_port_ap = 1;
                goto skip_wifi_status;
-@@ -6236,7 +6256,7 @@ const char * nl80211_iftype_str(enum nl8
+@@ -6529,7 +6549,7 @@ const char * nl80211_iftype_str(enum nl8
  static int nl80211_create_iface_once(struct wpa_driver_nl80211_data *drv,
                                     const char *ifname,
                                     enum nl80211_iftype iftype,
@@ -76,7 +76,7 @@
                                     int (*handler)(struct nl_msg *, void *),
                                     void *arg)
  {
-@@ -6256,6 +6276,10 @@ static int nl80211_create_iface_once(str
+@@ -6549,6 +6569,10 @@ static int nl80211_create_iface_once(str
        if (wds && nla_put_u8(msg, NL80211_ATTR_4ADDR, wds))
                goto fail;
  
@@ -87,7 +87,7 @@
        /*
         * Tell cfg80211 that the interface belongs to the socket that created
         * it, and the interface should be deleted when the socket is closed.
-@@ -6311,14 +6335,14 @@ static int nl80211_create_iface_once(str
+@@ -6641,14 +6665,14 @@ static int nl80211_create_iface_once(str
  
  int nl80211_create_iface(struct wpa_driver_nl80211_data *drv,
                         const char *ifname, enum nl80211_iftype iftype,
  
        /* if error occurred and interface exists already */
        if (ret < 0 && if_nametoindex(ifname)) {
-@@ -6344,7 +6368,7 @@ int nl80211_create_iface(struct wpa_driv
+@@ -6674,7 +6698,7 @@ int nl80211_create_iface(struct wpa_driv
  
                /* Try to create the interface again */
                ret = nl80211_create_iface_once(drv, ifname, iftype, addr,
        }
  
        if (ret >= 0 && is_p2p_net_interface(iftype)) {
-@@ -8688,8 +8712,8 @@ static int i802_set_wds_sta(void *priv,
+@@ -9010,8 +9034,8 @@ static int i802_set_wds_sta(void *priv,
                if (!if_nametoindex(name)) {
                        if (nl80211_create_iface(drv, name,
                                                 NL80211_IFTYPE_AP_VLAN,
                                return -1;
  
                        if (bridge_ifname)
-@@ -9060,7 +9084,8 @@ static int wpa_driver_nl80211_if_add(voi
+@@ -9384,7 +9408,8 @@ static int wpa_driver_nl80211_if_add(voi
  
-               os_memset(&p2pdev_info, 0, sizeof(p2pdev_info));
+               os_memset(&nonnetdev_info, 0, sizeof(nonnetdev_info));
                ifidx = nl80211_create_iface(drv, ifname, nlmode, addr,
 -                                           0, nl80211_wdev_handler,
-+                                           0, bss->radio_mask,
-+                                           nl80211_wdev_handler,
-                                            &p2pdev_info, use_existing);
-               if (!p2pdev_info.wdev_id_set || ifidx != 0) {
-                       wpa_printf(MSG_ERROR, "nl80211: Failed to create a P2P Device interface %s",
-@@ -9077,7 +9102,8 @@ static int wpa_driver_nl80211_if_add(voi
-                          (long long unsigned int) p2pdev_info.wdev_id);
++               0, bss->radio_mask,
++               nl80211_wdev_handler,
+                                            &nonnetdev_info, use_existing);
+               if (!nonnetdev_info.wdev_id_set || ifidx != 0) {
+                       wpa_printf(MSG_ERROR,
+@@ -9403,7 +9428,8 @@ static int wpa_driver_nl80211_if_add(voi
+                          (long long unsigned int) nonnetdev_info.wdev_id);
        } else {
                ifidx = nl80211_create_iface(drv, ifname, nlmode, addr,
 -                                           0, NULL, NULL, use_existing);
                if (use_existing && ifidx == -ENFILE) {
                        added = 0;
                        ifidx = if_nametoindex(ifname);
-@@ -9147,6 +9173,8 @@ static int wpa_driver_nl80211_if_add(voi
+@@ -9473,6 +9499,8 @@ static int wpa_driver_nl80211_if_add(voi
                new_bss->ctx = bss_ctx;
                new_bss->added_if = added;
  
index 8f136763ed402997e9e54de3ff8a945807e6aa77..4762b6a9a5f12e1e426947fd4dd0934e354fb255 100644 (file)
@@ -5,7 +5,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
 
 --- a/src/utils/wpa_debug.c
 +++ b/src/utils/wpa_debug.c
-@@ -206,7 +206,7 @@ void wpa_debug_close_linux_tracing(void)
+@@ -220,7 +220,7 @@ void wpa_debug_close_linux_tracing(void)
   *
   * Note: New line '\n' is added to the end of the text when printing to stdout.
   */
@@ -14,7 +14,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  {
        va_list ap;
  
-@@ -255,7 +255,7 @@ void wpa_printf(int level, const char *f
+@@ -269,7 +269,7 @@ void wpa_printf(int level, const char *f
  }
  
  
@@ -23,7 +23,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
                         size_t len, int show, int only_syslog)
  {
        size_t i;
-@@ -382,19 +382,7 @@ static void _wpa_hexdump(int level, cons
+@@ -396,19 +396,7 @@ static void _wpa_hexdump(int level, cons
  #endif /* CONFIG_ANDROID_LOG */
  }
  
@@ -44,7 +44,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
                               size_t len, int show)
  {
        size_t i, llen;
-@@ -507,20 +495,6 @@ file_done:
+@@ -521,20 +509,6 @@ file_done:
  }
  
  
@@ -65,7 +65,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  #ifdef CONFIG_DEBUG_FILE
  static char *last_path = NULL;
  #endif /* CONFIG_DEBUG_FILE */
-@@ -644,7 +618,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_
+@@ -658,7 +632,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_
  }
  
  
@@ -74,7 +74,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  {
        va_list ap;
        char *buf;
-@@ -682,7 +656,7 @@ void wpa_msg(void *ctx, int level, const
+@@ -696,7 +670,7 @@ void wpa_msg(void *ctx, int level, const
  }
  
  
@@ -85,7 +85,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
        char *buf;
 --- a/src/utils/wpa_debug.h
 +++ b/src/utils/wpa_debug.h
-@@ -52,6 +52,17 @@ void wpa_debug_close_file(void);
+@@ -76,6 +76,17 @@ void wpa_debug_close_file(void);
  void wpa_debug_setup_stdout(void);
  void wpa_debug_stop_log(void);
  
@@ -103,7 +103,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  /**
   * wpa_debug_printf_timestamp - Print timestamp for debug output
   *
-@@ -72,9 +83,15 @@ void wpa_debug_print_timestamp(void);
+@@ -96,9 +107,15 @@ void wpa_debug_print_timestamp(void);
   *
   * Note: New line '\n' is added to the end of the text when printing to stdout.
   */
@@ -120,7 +120,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  /**
   * wpa_hexdump - conditional hex dump
   * @level: priority level (MSG_*) of the message
-@@ -86,7 +103,13 @@ PRINTF_FORMAT(2, 3);
+@@ -110,7 +127,13 @@ PRINTF_FORMAT(2, 3);
   * output may be directed to stdout, stderr, and/or syslog based on
   * configuration. The contents of buf is printed out has hex dump.
   */
@@ -135,7 +135,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  
  static inline void wpa_hexdump_buf(int level, const char *title,
                                   const struct wpabuf *buf)
-@@ -108,7 +131,13 @@ static inline void wpa_hexdump_buf(int l
+@@ -132,7 +155,13 @@ static inline void wpa_hexdump_buf(int l
   * like wpa_hexdump(), but by default, does not include secret keys (passwords,
   * etc.) in debug output.
   */
@@ -150,7 +150,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  
  static inline void wpa_hexdump_buf_key(int level, const char *title,
                                       const struct wpabuf *buf)
-@@ -130,8 +159,14 @@ static inline void wpa_hexdump_buf_key(i
+@@ -154,8 +183,14 @@ static inline void wpa_hexdump_buf_key(i
   * the hex numbers and ASCII characters (for printable range) are shown. 16
   * bytes per line will be shown.
   */
@@ -167,7 +167,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  
  /**
   * wpa_hexdump_ascii_key - conditional hex dump, hide keys
-@@ -147,8 +182,14 @@ void wpa_hexdump_ascii(int level, const
+@@ -171,8 +206,14 @@ void wpa_hexdump_ascii(int level, const
   * bytes per line will be shown. This works like wpa_hexdump_ascii(), but by
   * default, does not include secret keys (passwords, etc.) in debug output.
   */
@@ -184,7 +184,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  
  /*
   * wpa_dbg() behaves like wpa_msg(), but it can be removed from build to reduce
-@@ -185,7 +226,12 @@ void wpa_hexdump_ascii_key(int level, co
+@@ -209,7 +250,12 @@ void wpa_hexdump_ascii_key(int level, co
   *
   * Note: New line '\n' is added to the end of the text when printing to stdout.
   */
@@ -198,7 +198,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to
  
  /**
   * wpa_msg_ctrl - Conditional printf for ctrl_iface monitors
-@@ -199,8 +245,13 @@ void wpa_msg(void *ctx, int level, const
+@@ -223,8 +269,13 @@ void wpa_msg(void *ctx, int level, const
   * attached ctrl_iface monitors. In other words, it can be used for frequent
   * events that do not need to be sent to syslog.
   */
index 11941e3b4e55453dfc06cef05ac8bc1775963a21..091698596f46d2245c692fd7211480d484968489 100644 (file)
@@ -14,7 +14,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
 
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -1019,6 +1019,9 @@ struct wpa_driver_associate_params {
+@@ -1022,6 +1022,9 @@ struct wpa_driver_associate_params {
         * responsible for selecting with which BSS to associate. */
        const u8 *bssid;
  
@@ -34,7 +34,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
  #include "config.h"
  
  
-@@ -2423,6 +2424,97 @@ static char * wpa_config_write_mac_value
+@@ -2498,6 +2499,97 @@ static char * wpa_config_write_mac_value
  #endif /* NO_CONFIG_WRITE */
  
  
@@ -132,7 +132,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
  /* Helper macros for network block parser */
  
  #ifdef OFFSET
-@@ -2718,6 +2810,8 @@ static const struct parse_data ssid_fiel
+@@ -2794,6 +2886,8 @@ static const struct parse_data ssid_fiel
        { INT(ap_max_inactivity) },
        { INT(dtim_period) },
        { INT(beacon_int) },
@@ -143,7 +143,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
        { INT_RANGE(macsec_integ_only, 0, 1) },
 --- a/wpa_supplicant/config_ssid.h
 +++ b/wpa_supplicant/config_ssid.h
-@@ -907,6 +907,9 @@ struct wpa_ssid {
+@@ -911,6 +911,9 @@ struct wpa_ssid {
         */
        void *parent_cred;
  
@@ -155,7 +155,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
         * macsec_policy - Determines the policy for MACsec secure session
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -4687,6 +4687,12 @@ static void wpas_start_assoc_cb(struct w
+@@ -4756,6 +4756,12 @@ static void wpas_start_assoc_cb(struct w
                        params.beacon_int = ssid->beacon_int;
                else
                        params.beacon_int = wpa_s->conf->beacon_int;
index 1811ce30c9350975e525c11b8ecbbc3b293a0567..4175c431d094433c5397869b83e3f742d6d7b485 100644 (file)
@@ -19,7 +19,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
 
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -1965,6 +1965,7 @@ struct wpa_driver_mesh_join_params {
+@@ -1968,6 +1968,7 @@ struct wpa_driver_mesh_join_params {
  #define WPA_DRIVER_MESH_FLAG_AMPE     0x00000008
        unsigned int flags;
        bool handle_dfs;
@@ -29,7 +29,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
  struct wpa_driver_set_key_params {
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -12378,6 +12378,18 @@ static int nl80211_put_mesh_id(struct nl
+@@ -12713,6 +12713,18 @@ static int nl80211_put_mesh_id(struct nl
  }
  
  
@@ -48,7 +48,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
  static int nl80211_put_mesh_config(struct nl_msg *msg,
                                   struct wpa_driver_mesh_bss_params *params)
  {
-@@ -12439,6 +12451,7 @@ static int nl80211_join_mesh(struct i802
+@@ -12774,6 +12786,7 @@ static int nl80211_join_mesh(struct i802
            nl80211_put_basic_rates(msg, params->basic_rates) ||
            nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
            nl80211_put_beacon_int(msg, params->beacon_int) ||
@@ -58,7 +58,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
  
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
-@@ -665,6 +665,7 @@ int wpa_supplicant_join_mesh(struct wpa_
+@@ -636,6 +636,7 @@ int wpa_supplicant_join_mesh(struct wpa_
  
        params->meshid = ssid->ssid;
        params->meshid_len = ssid->ssid_len;
index 225b6ab296a90990c235e8bd62e2ef1b5816df0b..78c10f811e98b2c830a7a4d4cf3c7dbb6abb4d87 100644 (file)
@@ -5,7 +5,7 @@ Subject: [PATCH] Fix issues with disabling obss scan when using fixed_freq on
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -3482,6 +3482,10 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3551,6 +3551,10 @@ void ibss_mesh_setup_freq(struct wpa_sup
  
        freq->freq = ssid->frequency;
  
index d14a4c63f74ad7ec04731f0b92628741d84548a8..fbaed04418a8af1ea5de3987226d1b545f5f1a7e 100644 (file)
@@ -13,7 +13,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -3572,6 +3572,8 @@ static int hostapd_config_fill(struct ho
+@@ -3584,6 +3584,8 @@ static int hostapd_config_fill(struct ho
        } else if (os_strcmp(buf, "he_bss_color") == 0) {
                conf->he_op.he_bss_color = atoi(pos) & 0x3f;
                conf->he_op.he_bss_color_disabled = 0;
index 43e30b14e9338c10ba9b3bdae3b567561445603c..394731842dad5c7f11807f3d127a9dafea537850 100644 (file)
@@ -4,7 +4,7 @@ Subject: [PATCH] hostapd: implement fallback for incomplete survey data
 
 --- a/src/ap/acs.c
 +++ b/src/ap/acs.c
-@@ -471,17 +471,17 @@ static int acs_get_bw_center_chan(int fr
+@@ -472,17 +472,17 @@ static int acs_get_bw_center_chan(int fr
  static int acs_survey_is_sufficient(struct freq_survey *survey)
  {
        if (!(survey->filled & SURVEY_HAS_NF)) {
@@ -24,7 +24,7 @@ Subject: [PATCH] hostapd: implement fallback for incomplete survey data
        }
  
        if (!(survey->filled & SURVEY_HAS_CHAN_TIME_BUSY) &&
-@@ -489,7 +489,6 @@ static int acs_survey_is_sufficient(stru
+@@ -490,7 +490,6 @@ static int acs_survey_is_sufficient(stru
                wpa_printf(MSG_INFO,
                           "ACS: Survey for freq %d is missing RX and busy time (at least one is required)",
                           survey->freq);
index 9b272dfd6dbaf3e097ad4df948b495b89b79390d..6c078bd938fa5a0db83ed8707edf9357a2e669cd 100644 (file)
@@ -10,7 +10,7 @@ method.
 
 --- a/src/ap/hostapd.h
 +++ b/src/ap/hostapd.h
-@@ -185,6 +185,21 @@ struct mld_link_info {
+@@ -189,6 +189,21 @@ struct mld_link_info {
  };
  
  /**
@@ -32,7 +32,7 @@ method.
   * struct hostapd_data - hostapd per-BSS data structure
   */
  struct hostapd_data {
-@@ -198,6 +213,9 @@ struct hostapd_data {
+@@ -202,6 +217,9 @@ struct hostapd_data {
  
        u8 own_addr[ETH_ALEN];
  
index 25f0a504b2494149cae9afb0624d0dd621c47771..fcfea12dbd3f7a90efe6ba4df9176b9a28e4262d 100644 (file)
@@ -53,7 +53,7 @@ probe/assoc/auth requests via object subscribe.
        }
 --- a/src/ap/beacon.c
 +++ b/src/ap/beacon.c
-@@ -1439,6 +1439,12 @@ void handle_probe_req(struct hostapd_dat
+@@ -1464,6 +1464,12 @@ void handle_probe_req(struct hostapd_dat
        int mld_id;
        u16 links;
  #endif /* CONFIG_IEEE80211BE */
@@ -66,7 +66,7 @@ probe/assoc/auth requests via object subscribe.
  
        if (hapd->iconf->rssi_ignore_probe_request && ssi_signal &&
            ssi_signal < hapd->iconf->rssi_ignore_probe_request)
-@@ -1625,6 +1631,12 @@ void handle_probe_req(struct hostapd_dat
+@@ -1671,6 +1677,12 @@ void handle_probe_req(struct hostapd_dat
        }
  #endif /* CONFIG_P2P */
  
@@ -81,7 +81,7 @@ probe/assoc/auth requests via object subscribe.
  
 --- a/src/ap/dfs.c
 +++ b/src/ap/dfs.c
-@@ -1243,6 +1243,8 @@ int hostapd_dfs_pre_cac_expired(struct h
+@@ -1295,6 +1295,8 @@ int hostapd_dfs_pre_cac_expired(struct h
                "freq=%d ht_enabled=%d chan_offset=%d chan_width=%d cf1=%d cf2=%d",
                freq, ht_enabled, chan_offset, chan_width, cf1, cf2);
  
@@ -92,7 +92,7 @@ probe/assoc/auth requests via object subscribe.
                return 0;
 --- a/src/ap/drv_callbacks.c
 +++ b/src/ap/drv_callbacks.c
-@@ -331,6 +331,10 @@ int hostapd_notif_assoc(struct hostapd_d
+@@ -332,6 +332,10 @@ int hostapd_notif_assoc(struct hostapd_d
  #endif /* CONFIG_OWE */
        bool updated = false;
        bool driver_acl;
@@ -101,9 +101,9 @@ probe/assoc/auth requests via object subscribe.
 +              .addr = addr,
 +      };
  
-       if (addr == NULL) {
-               /*
-@@ -512,6 +516,12 @@ int hostapd_notif_assoc(struct hostapd_d
+ #ifdef CONFIG_P2P
+       if (hapd->p2p_group && (!hapd->started || hapd->disabled)) {
+@@ -527,6 +531,12 @@ int hostapd_notif_assoc(struct hostapd_d
        }
  #endif /* CONFIG_IEEE80211BE */
  
@@ -116,7 +116,7 @@ probe/assoc/auth requests via object subscribe.
  #ifdef CONFIG_P2P
        if (elems.p2p) {
                wpabuf_free(sta->p2p_ie);
-@@ -1409,6 +1419,7 @@ void hostapd_event_ch_switch(struct host
+@@ -1424,6 +1434,7 @@ void hostapd_event_ch_switch(struct host
  
                wpa_msg(hapd->msg_ctx, MSG_INFO, AP_CSA_FINISHED
                        "freq=%d dfs=%d", freq, is_dfs);
@@ -126,7 +126,7 @@ probe/assoc/auth requests via object subscribe.
                if (is_dfs0 > 0 &&
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -479,6 +479,7 @@ void hostapd_free_hapd_data(struct hosta
+@@ -492,6 +492,7 @@ void hostapd_free_hapd_data(struct hosta
        hapd->beacon_set_done = 0;
  
        wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface);
@@ -134,7 +134,7 @@ probe/assoc/auth requests via object subscribe.
        accounting_deinit(hapd);
        hostapd_deinit_wpa(hapd);
        vlan_deinit(hapd);
-@@ -1324,6 +1325,8 @@ static int hostapd_start_beacon(struct h
+@@ -1342,6 +1343,8 @@ static int hostapd_start_beacon(struct h
        if (hapd->driver && hapd->driver->set_operstate)
                hapd->driver->set_operstate(hapd->drv_priv, 1);
  
@@ -143,7 +143,7 @@ probe/assoc/auth requests via object subscribe.
        return 0;
  }
  
-@@ -2554,6 +2557,7 @@ static int hostapd_setup_interface_compl
+@@ -2582,6 +2585,7 @@ static int hostapd_setup_interface_compl
        if (err)
                goto fail;
  
@@ -151,7 +151,7 @@ probe/assoc/auth requests via object subscribe.
        wpa_printf(MSG_DEBUG, "Completing interface initialization");
        if (iface->freq) {
  #ifdef NEED_AP_MLME
-@@ -2781,6 +2785,7 @@ dfs_offload:
+@@ -2796,6 +2800,7 @@ dfs_offload:
  
  fail:
        wpa_printf(MSG_ERROR, "Interface initialization failed");
@@ -159,7 +159,7 @@ probe/assoc/auth requests via object subscribe.
  
        if (iface->is_no_ir) {
                hostapd_set_state(iface, HAPD_IFACE_NO_IR);
-@@ -3530,6 +3535,7 @@ void hostapd_interface_deinit_free(struc
+@@ -3545,6 +3550,7 @@ void hostapd_interface_deinit_free(struc
                   (unsigned int) iface->conf->num_bss);
        driver = iface->bss[0]->driver;
        drv_priv = iface->bss[0]->drv_priv;
@@ -177,7 +177,7 @@ probe/assoc/auth requests via object subscribe.
  
  #define OCE_STA_CFON_ENABLED(hapd) \
        ((hapd->conf->oce & OCE_STA_CFON) && \
-@@ -206,6 +207,7 @@ struct hostapd_data {
+@@ -210,6 +211,7 @@ struct hostapd_data {
        struct hostapd_iface *iface;
        struct hostapd_config *iconf;
        struct hostapd_bss_config *conf;
@@ -185,7 +185,7 @@ probe/assoc/auth requests via object subscribe.
        int interface_added; /* virtual interface added for this BSS */
        unsigned int started:1;
        unsigned int disabled:1;
-@@ -776,6 +778,7 @@ hostapd_alloc_bss_data(struct hostapd_if
+@@ -783,6 +785,7 @@ hostapd_alloc_bss_data(struct hostapd_if
                       struct hostapd_bss_config *bss);
  int hostapd_setup_interface(struct hostapd_iface *iface);
  int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err);
@@ -195,7 +195,7 @@ probe/assoc/auth requests via object subscribe.
  struct hostapd_iface * hostapd_alloc_iface(void);
 --- a/src/ap/ieee802_11.c
 +++ b/src/ap/ieee802_11.c
-@@ -3134,7 +3134,7 @@ static void handle_auth(struct hostapd_d
+@@ -3330,7 +3330,7 @@ static void handle_auth(struct hostapd_d
        u16 auth_alg, auth_transaction, status_code;
        u16 resp = WLAN_STATUS_SUCCESS;
        struct sta_info *sta = NULL;
@@ -204,9 +204,9 @@ probe/assoc/auth requests via object subscribe.
        u16 fc;
        const u8 *challenge = NULL;
        u8 resp_ies[2 + WLAN_AUTH_CHALLENGE_LEN];
-@@ -3145,6 +3145,11 @@ static void handle_auth(struct hostapd_d
- #ifdef CONFIG_IEEE80211BE
-       bool mld_sta = false;
+@@ -3369,6 +3369,11 @@ static void handle_auth(struct hostapd_d
+       else
+               sa = mgmt->sa;
  #endif /* CONFIG_IEEE80211BE */
 +      struct hostapd_ubus_request req = {
 +              .type = HOSTAPD_UBUS_AUTH_REQ,
@@ -214,9 +214,9 @@ probe/assoc/auth requests via object subscribe.
 +              .ssi_signal = rssi,
 +      };
  
-       if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.auth)) {
-               wpa_printf(MSG_INFO, "handle_auth - too short payload (len=%lu)",
-@@ -3341,6 +3346,13 @@ static void handle_auth(struct hostapd_d
+       auth_alg = le_to_host16(mgmt->u.auth.auth_alg);
+       auth_transaction = le_to_host16(mgmt->u.auth.auth_transaction);
+@@ -3538,6 +3543,13 @@ static void handle_auth(struct hostapd_d
                resp = WLAN_STATUS_UNSPECIFIED_FAILURE;
                goto fail;
        }
@@ -230,7 +230,7 @@ probe/assoc/auth requests via object subscribe.
        if (res == HOSTAPD_ACL_PENDING)
                return;
  
-@@ -5723,7 +5735,7 @@ static void handle_assoc(struct hostapd_
+@@ -6029,7 +6041,7 @@ static void handle_assoc(struct hostapd_
        int resp = WLAN_STATUS_SUCCESS;
        u16 reply_res = WLAN_STATUS_UNSPECIFIED_FAILURE;
        const u8 *pos;
@@ -239,7 +239,7 @@ probe/assoc/auth requests via object subscribe.
        struct sta_info *sta;
        u8 *tmp = NULL;
  #ifdef CONFIG_FILS
-@@ -5965,6 +5977,11 @@ static void handle_assoc(struct hostapd_
+@@ -6283,6 +6295,11 @@ static void handle_assoc(struct hostapd_
                left = res;
        }
  #endif /* CONFIG_FILS */
@@ -251,7 +251,7 @@ probe/assoc/auth requests via object subscribe.
  
        /* followed by SSID and Supported rates; and HT capabilities if 802.11n
         * is used */
-@@ -6057,6 +6074,7 @@ static void handle_assoc(struct hostapd_
+@@ -6375,6 +6392,7 @@ static void handle_assoc(struct hostapd_
  
  #ifdef CONFIG_TAXONOMY
        taxonomy_sta_info_assoc_req(hapd, sta, pos, left);
@@ -259,9 +259,9 @@ probe/assoc/auth requests via object subscribe.
  #endif /* CONFIG_TAXONOMY */
  
        sta->pending_wds_enable = 0;
-@@ -6073,6 +6091,13 @@ static void handle_assoc(struct hostapd_
-       if (set_beacon)
-               ieee802_11_update_beacons(hapd->iface);
+@@ -6388,6 +6406,13 @@ static void handle_assoc(struct hostapd_
+       }
+ #endif /* CONFIG_FILS */
  
 +      ubus_resp = hostapd_ubus_handle_event(hapd, &req);
 +      if (ubus_resp) {
@@ -273,7 +273,7 @@ probe/assoc/auth requests via object subscribe.
   fail:
  
        /*
-@@ -6302,6 +6327,7 @@ static void handle_disassoc(struct hosta
+@@ -6626,6 +6651,7 @@ static void handle_disassoc(struct hosta
                           (unsigned long) len);
                return;
        }
@@ -281,7 +281,7 @@ probe/assoc/auth requests via object subscribe.
  
        sta = ap_get_sta(hapd, mgmt->sa);
        if (!sta) {
-@@ -6333,6 +6359,8 @@ static void handle_deauth(struct hostapd
+@@ -6657,6 +6683,8 @@ static void handle_deauth(struct hostapd
        /* Clear the PTKSA cache entries for PASN */
        ptksa_cache_flush(hapd->ptksa, mgmt->sa, WPA_CIPHER_NONE);
  
@@ -313,7 +313,7 @@ probe/assoc/auth requests via object subscribe.
                wpa_printf(MSG_DEBUG, "RRM action %u is not supported",
 --- a/src/ap/sta_info.c
 +++ b/src/ap/sta_info.c
-@@ -545,6 +545,7 @@ void ap_handle_timer(void *eloop_ctx, vo
+@@ -603,6 +603,7 @@ void ap_handle_timer(void *eloop_ctx, vo
                hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,
                               HOSTAPD_LEVEL_INFO, "deauthenticated due to "
                               "local deauth request");
@@ -321,7 +321,7 @@ probe/assoc/auth requests via object subscribe.
                ap_free_sta(hapd, sta);
                return;
        }
-@@ -702,6 +703,7 @@ skip_poll:
+@@ -771,6 +772,7 @@ skip_poll:
                mlme_deauthenticate_indication(
                        hapd, sta,
                        WLAN_REASON_PREV_AUTH_NOT_VALID);
@@ -329,7 +329,7 @@ probe/assoc/auth requests via object subscribe.
                ap_free_sta(hapd, sta);
                break;
        }
-@@ -1590,17 +1592,30 @@ void ap_sta_set_authorized_event(struct
+@@ -1772,17 +1774,30 @@ void ap_sta_set_authorized_event(struct
                os_snprintf(buf, sizeof(buf), MACSTR, MAC2STR(sta->addr));
  
        if (authorized) {
@@ -360,7 +360,7 @@ probe/assoc/auth requests via object subscribe.
  
  #ifdef CONFIG_P2P
                if (wpa_auth_get_ip_addr(sta->wpa_sm, ip_addr_buf) == 0) {
-@@ -1612,6 +1627,13 @@ void ap_sta_set_authorized_event(struct
+@@ -1794,6 +1809,13 @@ void ap_sta_set_authorized_event(struct
                }
  #endif /* CONFIG_P2P */
  
@@ -374,7 +374,7 @@ probe/assoc/auth requests via object subscribe.
                keyid = ap_sta_wpa_get_keyid(hapd, sta);
                if (keyid) {
                        os_snprintf(keyid_buf, sizeof(keyid_buf),
-@@ -1636,17 +1658,19 @@ void ap_sta_set_authorized_event(struct
+@@ -1818,17 +1840,19 @@ void ap_sta_set_authorized_event(struct
                                    " vlanid=%u", sta->vlan_id);
  #endif /* CONFIG_NO_VLAN */
  
@@ -400,7 +400,7 @@ probe/assoc/auth requests via object subscribe.
                    hapd->msg_ctx_parent != hapd->msg_ctx)
 --- a/src/ap/sta_info.h
 +++ b/src/ap/sta_info.h
-@@ -255,6 +255,7 @@ struct sta_info {
+@@ -258,6 +258,7 @@ struct sta_info {
  #ifdef CONFIG_TAXONOMY
        struct wpabuf *probe_ie_taxonomy;
        struct wpabuf *assoc_ie_taxonomy;
@@ -408,7 +408,7 @@ probe/assoc/auth requests via object subscribe.
  #endif /* CONFIG_TAXONOMY */
  
  #ifdef CONFIG_FILS
-@@ -302,6 +303,7 @@ struct sta_info {
+@@ -305,6 +306,7 @@ struct sta_info {
  #endif /* CONFIG_TESTING_OPTIONS */
  #ifdef CONFIG_AIRTIME_POLICY
        unsigned int airtime_weight;
@@ -496,7 +496,7 @@ probe/assoc/auth requests via object subscribe.
  }
 --- a/src/ap/wpa_auth_glue.c
 +++ b/src/ap/wpa_auth_glue.c
-@@ -320,6 +320,7 @@ static void hostapd_wpa_auth_psk_failure
+@@ -412,6 +412,7 @@ static void hostapd_wpa_auth_psk_failure
        struct hostapd_data *hapd = ctx;
        wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_POSSIBLE_PSK_MISMATCH MACSTR,
                MAC2STR(addr));
@@ -516,7 +516,7 @@ probe/assoc/auth requests via object subscribe.
        size_t count; /* sum of all table counts */
  #ifdef CONFIG_ELOOP_POLL
        size_t max_pollfd_map; /* number of pollfds_map currently allocated */
-@@ -1121,6 +1124,12 @@ void eloop_run(void)
+@@ -1125,6 +1128,12 @@ void eloop_run(void)
                                os_reltime_sub(&timeout->time, &now, &tv);
                        else
                                tv.sec = tv.usec = 0;
@@ -529,7 +529,7 @@ probe/assoc/auth requests via object subscribe.
  #if defined(CONFIG_ELOOP_POLL) || defined(CONFIG_ELOOP_EPOLL)
                        timeout_ms = tv.sec * 1000 + tv.usec / 1000;
  #endif /* defined(CONFIG_ELOOP_POLL) || defined(CONFIG_ELOOP_EPOLL) */
-@@ -1190,7 +1199,8 @@ void eloop_run(void)
+@@ -1194,7 +1203,8 @@ void eloop_run(void)
                eloop.exceptions.changed = 0;
  
                eloop_process_pending_signals();
@@ -539,7 +539,7 @@ probe/assoc/auth requests via object subscribe.
  
                /* check if some registered timeouts have occurred */
                timeout = dl_list_first(&eloop.timeout, struct eloop_timeout,
-@@ -1252,6 +1262,14 @@ out:
+@@ -1256,6 +1266,14 @@ out:
        return;
  }
  
@@ -654,16 +654,16 @@ probe/assoc/auth requests via object subscribe.
 +}
 --- a/wpa_supplicant/main.c
 +++ b/wpa_supplicant/main.c
-@@ -203,7 +203,7 @@ int main(int argc, char *argv[])
+@@ -214,7 +214,7 @@ int main(int argc, char *argv[])
  
        for (;;) {
                c = getopt(argc, argv,
--                         "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuv::W");
-+                         "b:Bc:C:D:de:f:g:G:hi:I:KLMm:nNo:O:p:P:qsTtuv::W");
+-                         "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuv::Wyz:");
++                         "b:Bc:C:D:de:f:g:G:hi:I:KLMm:nNo:O:p:P:qsTtuv::Wyz:");
                if (c < 0)
                        break;
                switch (c) {
-@@ -268,6 +268,9 @@ int main(int argc, char *argv[])
+@@ -279,6 +279,9 @@ int main(int argc, char *argv[])
                        params.conf_p2p_dev = optarg;
                        break;
  #endif /* CONFIG_P2P */
index 10493825bfbb9ae179defac364958b896d169b9e..6b80e8ced8e7d1ab55345a2a6c6d6549aee65add 100644 (file)
@@ -8,7 +8,7 @@ as adding/removing interfaces.
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -1278,6 +1278,7 @@ void wpa_supplicant_set_state(struct wpa
+@@ -1268,6 +1268,7 @@ void wpa_supplicant_set_state(struct wpa
                sme_sched_obss_scan(wpa_s, 0);
        }
        wpa_s->wpa_state = state;
@@ -16,7 +16,7 @@ as adding/removing interfaces.
  
  #ifndef CONFIG_NO_ROBUST_AV
        if (state == WPA_COMPLETED && dl_list_len(&wpa_s->active_scs_ids) &&
-@@ -8289,6 +8290,8 @@ struct wpa_supplicant * wpa_supplicant_a
+@@ -8395,6 +8396,8 @@ struct wpa_supplicant * wpa_supplicant_a
        }
  #endif /* CONFIG_P2P */
  
@@ -25,7 +25,7 @@ as adding/removing interfaces.
        return wpa_s;
  }
  
-@@ -8315,6 +8318,8 @@ int wpa_supplicant_remove_iface(struct w
+@@ -8421,6 +8424,8 @@ int wpa_supplicant_remove_iface(struct w
        struct wpa_supplicant *parent = wpa_s->parent;
  #endif /* CONFIG_MESH */
  
@@ -34,7 +34,7 @@ as adding/removing interfaces.
        /* Remove interface from the global list of interfaces */
        prev = global->ifaces;
        if (prev == wpa_s) {
-@@ -8623,6 +8628,7 @@ struct wpa_global * wpa_supplicant_init(
+@@ -8740,6 +8745,7 @@ struct wpa_global * wpa_supplicant_init(
  
        eloop_register_timeout(WPA_SUPPLICANT_CLEANUP_INTERVAL, 0,
                               wpas_periodic, global, NULL);
@@ -42,7 +42,7 @@ as adding/removing interfaces.
  
        return global;
  }
-@@ -8695,6 +8701,8 @@ void wpa_supplicant_deinit(struct wpa_gl
+@@ -8812,6 +8818,8 @@ void wpa_supplicant_deinit(struct wpa_gl
  
        wpas_notify_supplicant_deinitialized(global);
  
@@ -68,15 +68,15 @@ as adding/removing interfaces.
  
  extern const char *const wpa_supplicant_version;
  extern const char *const wpa_supplicant_license;
-@@ -697,6 +699,7 @@ struct wpa_supplicant {
+@@ -718,6 +720,7 @@ struct wpa_supplicant {
        unsigned char own_addr[ETH_ALEN];
        unsigned char perm_addr[ETH_ALEN];
        char ifname[100];
-+      struct wpas_ucode_bss ucode;
++  struct wpas_ucode_bss ucode;
+       u8 hw_dfs_domain;
  #ifdef CONFIG_MATCH_IFACE
        int matched;
- #endif /* CONFIG_MATCH_IFACE */
-@@ -1564,6 +1567,8 @@ struct wpa_supplicant {
+@@ -1595,6 +1598,8 @@ struct wpa_supplicant {
        unsigned int enabled_4addr_mode:1;
        unsigned int multi_bss_support:1;
        unsigned int drv_authorized_port:1;
@@ -164,7 +164,7 @@ as adding/removing interfaces.
  ifdef CONFIG_CODE_COVERAGE
 --- a/hostapd/ctrl_iface.c
 +++ b/hostapd/ctrl_iface.c
-@@ -6061,6 +6061,7 @@ try_again:
+@@ -5950,6 +5950,7 @@ try_again:
                return -1;
        }
  
@@ -172,7 +172,7 @@ as adding/removing interfaces.
        wpa_msg_register_cb(hostapd_ctrl_iface_msg_cb);
  
        return 0;
-@@ -6162,6 +6163,7 @@ fail:
+@@ -6051,6 +6052,7 @@ fail:
        os_free(fname);
  
        interface->global_ctrl_sock = s;
@@ -182,7 +182,7 @@ as adding/removing interfaces.
  
 --- a/hostapd/main.c
 +++ b/hostapd/main.c
-@@ -1074,6 +1074,7 @@ int main(int argc, char *argv[])
+@@ -1097,6 +1097,7 @@ int main(int argc, char *argv[])
        }
  
        hostapd_global_ctrl_iface_init(&interfaces);
@@ -190,7 +190,7 @@ as adding/removing interfaces.
  
        if (hostapd_global_run(&interfaces, daemonize, pid_file)) {
                wpa_printf(MSG_ERROR, "Failed to start eloop");
-@@ -1083,6 +1084,7 @@ int main(int argc, char *argv[])
+@@ -1106,6 +1107,7 @@ int main(int argc, char *argv[])
        ret = 0;
  
   out:
@@ -200,8 +200,8 @@ as adding/removing interfaces.
        for (i = 0; i < interfaces.count; i++) {
 --- a/src/ap/ap_drv_ops.h
 +++ b/src/ap/ap_drv_ops.h
-@@ -410,6 +410,23 @@ static inline int hostapd_drv_stop_ap(st
-       return hapd->driver->stop_ap(hapd->drv_priv, link_id);
+@@ -405,6 +405,23 @@ static inline int hostapd_drv_stop_ap(st
+       return 0;
  }
  
 +static inline int hostapd_drv_if_rename(struct hostapd_data *hapd,
@@ -226,7 +226,7 @@ as adding/removing interfaces.
  {
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -259,6 +259,8 @@ int hostapd_reload_config(struct hostapd
+@@ -267,6 +267,8 @@ int hostapd_reload_config(struct hostapd
        struct hostapd_config *newconf, *oldconf;
        size_t j;
  
@@ -235,7 +235,7 @@ as adding/removing interfaces.
        if (iface->config_fname == NULL) {
                /* Only in-memory config in use - assume it has been updated */
                hostapd_clear_old(iface);
-@@ -479,6 +481,7 @@ void hostapd_free_hapd_data(struct hosta
+@@ -492,6 +494,7 @@ void hostapd_free_hapd_data(struct hosta
        hapd->beacon_set_done = 0;
  
        wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface);
@@ -243,7 +243,7 @@ as adding/removing interfaces.
        hostapd_ubus_free_bss(hapd);
        accounting_deinit(hapd);
        hostapd_deinit_wpa(hapd);
-@@ -625,7 +628,7 @@ void hostapd_free_hapd_data(struct hosta
+@@ -653,7 +656,7 @@ static void hostapd_mld_move_vlan_list(s
   * If the BSS being removed is the first link, the next link becomes the first
   * link.
   */
@@ -252,7 +252,7 @@ as adding/removing interfaces.
  {
  #ifdef CONFIG_IEEE80211BE
        int i;
-@@ -737,6 +740,7 @@ void hostapd_cleanup_iface_partial(struc
+@@ -761,6 +764,7 @@ void hostapd_cleanup_iface_partial(struc
  static void hostapd_cleanup_iface(struct hostapd_iface *iface)
  {
        wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface);
@@ -260,7 +260,7 @@ as adding/removing interfaces.
        eloop_cancel_timeout(hostapd_interface_setup_failure_handler, iface,
                             NULL);
  
-@@ -1326,6 +1330,7 @@ static int hostapd_start_beacon(struct h
+@@ -1344,6 +1348,7 @@ static int hostapd_start_beacon(struct h
                hapd->driver->set_operstate(hapd->drv_priv, 1);
  
        hostapd_ubus_add_bss(hapd);
@@ -268,7 +268,7 @@ as adding/removing interfaces.
  
        return 0;
  }
-@@ -1401,8 +1406,7 @@ static int hostapd_bss_radius_init(struc
+@@ -1419,8 +1424,7 @@ static int hostapd_bss_radius_init(struc
   * initialized. Most of the modules that are initialized here will be
   * deinitialized in hostapd_cleanup().
   */
@@ -278,7 +278,7 @@ as adding/removing interfaces.
  {
        struct hostapd_bss_config *conf = hapd->conf;
        u8 ssid[SSID_MAX_LEN + 1];
-@@ -1434,12 +1438,17 @@ static int hostapd_setup_bss(struct host
+@@ -1462,12 +1466,17 @@ static int hostapd_setup_bss(struct host
  
        if (!first || first == -1) {
                u8 *addr = hapd->own_addr;
@@ -297,7 +297,7 @@ as adding/removing interfaces.
                                             hapd->iface->bss[0]->own_addr) ==
                            0) {
                                wpa_printf(MSG_ERROR, "BSS '%s' may not have "
-@@ -1469,6 +1478,7 @@ static int hostapd_setup_bss(struct host
+@@ -1497,6 +1506,7 @@ static int hostapd_setup_bss(struct host
                                           hapd->mld_link_id, hapd->conf->iface);
                                goto setup_mld;
                        }
@@ -305,7 +305,7 @@ as adding/removing interfaces.
                }
  #endif /* CONFIG_IEEE80211BE */
  
-@@ -1477,7 +1487,7 @@ static int hostapd_setup_bss(struct host
+@@ -1505,7 +1515,7 @@ static int hostapd_setup_bss(struct host
                                   conf->iface, addr, hapd,
                                   &hapd->drv_priv, force_ifname, if_addr,
                                   conf->bridge[0] ? conf->bridge : NULL,
@@ -314,7 +314,7 @@ as adding/removing interfaces.
                        wpa_printf(MSG_ERROR, "Failed to add BSS (BSSID="
                                   MACSTR ")", MAC2STR(hapd->own_addr));
                        hapd->interface_added = 0;
-@@ -1500,7 +1510,7 @@ static int hostapd_setup_bss(struct host
+@@ -1528,7 +1538,7 @@ static int hostapd_setup_bss(struct host
  
  #ifdef CONFIG_IEEE80211BE
  setup_mld:
@@ -323,7 +323,7 @@ as adding/removing interfaces.
                wpa_printf(MSG_DEBUG,
                           "MLD: Set link_id=%u, mld_addr=" MACSTR
                           ", own_addr=" MACSTR,
-@@ -1518,6 +1528,8 @@ setup_mld:
+@@ -1546,6 +1556,8 @@ setup_mld:
        }
  #endif /* CONFIG_IEEE80211BE */
  
@@ -332,7 +332,7 @@ as adding/removing interfaces.
        if (conf->wmm_enabled < 0)
                conf->wmm_enabled = hapd->iconf->ieee80211n |
                        hapd->iconf->ieee80211ax;
-@@ -1843,7 +1855,7 @@ int hostapd_set_acl(struct hostapd_data
+@@ -1871,7 +1883,7 @@ int hostapd_set_acl(struct hostapd_data
  }
  
  
@@ -341,7 +341,7 @@ as adding/removing interfaces.
  {
  #ifdef CONFIG_IEEE80211BE
        int ret;
-@@ -2516,7 +2528,7 @@ static int hostapd_owe_iface_iter2(struc
+@@ -2544,7 +2556,7 @@ static int hostapd_owe_iface_iter2(struc
  #endif /* CONFIG_OWE */
  
  
@@ -350,7 +350,7 @@ as adding/removing interfaces.
  {
  #ifdef CONFIG_OWE
        /* Check whether the enabled BSS can complete OWE transition mode
-@@ -2986,7 +2998,7 @@ hostapd_alloc_bss_data(struct hostapd_if
+@@ -3001,7 +3013,7 @@ hostapd_alloc_bss_data(struct hostapd_if
  }
  
  
@@ -359,7 +359,7 @@ as adding/removing interfaces.
  {
        if (!hapd)
                return;
-@@ -3194,7 +3206,7 @@ fail:
+@@ -3209,7 +3221,7 @@ fail:
  }
  
  
@@ -368,7 +368,7 @@ as adding/removing interfaces.
  {
  #ifdef CONFIG_IEEE80211BE
        struct hostapd_mld *mld, **all_mld;
-@@ -4074,7 +4086,8 @@ int hostapd_remove_iface(struct hapd_int
+@@ -4090,7 +4102,8 @@ int hostapd_remove_iface(struct hapd_int
                hapd_iface = interfaces->iface[i];
                if (hapd_iface == NULL)
                        return -1;
@@ -399,7 +399,7 @@ as adding/removing interfaces.
        int (*for_each_interface)(struct hapd_interfaces *interfaces,
                                  int (*cb)(struct hostapd_iface *iface,
                                            void *ctx), void *ctx);
-@@ -208,6 +213,7 @@ struct hostapd_data {
+@@ -212,6 +217,7 @@ struct hostapd_data {
        struct hostapd_config *iconf;
        struct hostapd_bss_config *conf;
        struct hostapd_ubus_bss ubus;
@@ -407,7 +407,7 @@ as adding/removing interfaces.
        int interface_added; /* virtual interface added for this BSS */
        unsigned int started:1;
        unsigned int disabled:1;
-@@ -577,6 +583,7 @@ struct hostapd_mld {
+@@ -585,6 +591,7 @@ struct hostapd_mld {
   */
  struct hostapd_iface {
        struct hapd_interfaces *interfaces;
@@ -415,7 +415,7 @@ as adding/removing interfaces.
        void *owner;
        char *config_fname;
        struct hostapd_config *conf;
-@@ -787,11 +794,16 @@ struct hostapd_iface * hostapd_init(stru
+@@ -794,11 +801,16 @@ struct hostapd_iface * hostapd_init(stru
  struct hostapd_iface *
  hostapd_interface_init_bss(struct hapd_interfaces *interfaces, const char *phy,
                           const char *config_fname, int debug);
@@ -432,7 +432,7 @@ as adding/removing interfaces.
  int hostapd_enable_iface(struct hostapd_iface *hapd_iface);
  int hostapd_reload_iface(struct hostapd_iface *hapd_iface);
  int hostapd_reload_bss_only(struct hostapd_data *bss);
-@@ -817,6 +829,7 @@ hostapd_switch_channel_fallback(struct h
+@@ -824,6 +836,7 @@ hostapd_switch_channel_fallback(struct h
  void hostapd_cleanup_cs_params(struct hostapd_data *hapd);
  void hostapd_periodic_iface(struct hostapd_iface *iface);
  int hostapd_owe_trans_get_info(struct hostapd_data *hapd);
@@ -442,7 +442,7 @@ as adding/removing interfaces.
  void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap);
 --- a/src/ap/ieee802_11.c
 +++ b/src/ap/ieee802_11.c
-@@ -659,12 +659,17 @@ const char * sae_get_password(struct hos
+@@ -663,12 +663,17 @@ const char * sae_get_password(struct hos
                              struct sae_pt **s_pt,
                              const struct sae_pk **s_pk)
  {
@@ -461,7 +461,7 @@ as adding/removing interfaces.
        /* With sae_track_password functionality enabled, try to first find the
         * next viable wildcard-address password if a password identifier was
         * not used. Select an wildcard-addr entry if the STA is known to have
-@@ -725,12 +730,30 @@ const char * sae_get_password(struct hos
+@@ -730,12 +735,30 @@ const char * sae_get_password(struct hos
                pt = hapd->conf->ssid.pt;
        }
  
@@ -487,14 +487,14 @@ as adding/removing interfaces.
 +                                         ssid->ssid_len,
 +                                         (const u8 *) password,
 +                                         os_strlen(password),
-+                                         NULL);
++                                         NULL, 0);
 +                      sta->sae_pt = pt;
 +                      break;
 +#endif
                }
        }
  
-@@ -3489,6 +3512,12 @@ static void handle_auth(struct hostapd_d
+@@ -3698,6 +3721,12 @@ static void handle_auth(struct hostapd_d
                goto fail;
        }
  
@@ -509,9 +509,9 @@ as adding/removing interfaces.
  
 --- a/src/ap/sta_info.c
 +++ b/src/ap/sta_info.c
-@@ -477,6 +477,11 @@ void ap_free_sta(struct hostapd_data *ha
-       forced_memzero(sta->last_tk, WPA_TK_MAX_LEN);
- #endif /* CONFIG_TESTING_OPTIONS */
+@@ -535,6 +535,11 @@ void ap_free_sta(struct hostapd_data *ha
+       wpabuf_free(sta->sae_pw_id);
  
 +#ifdef CONFIG_SAE
 +      if (sta->sae_pt)
@@ -521,7 +521,7 @@ as adding/removing interfaces.
        os_free(sta);
  }
  
-@@ -1576,6 +1581,8 @@ void ap_sta_set_authorized_event(struct
+@@ -1758,6 +1763,8 @@ void ap_sta_set_authorized_event(struct
  #endif /* CONFIG_P2P */
        const u8 *ip_ptr = NULL;
  
@@ -532,7 +532,7 @@ as adding/removing interfaces.
                if (sta->p2p_ie != NULL &&
 --- a/src/ap/sta_info.h
 +++ b/src/ap/sta_info.h
-@@ -180,6 +180,9 @@ struct sta_info {
+@@ -183,6 +183,9 @@ struct sta_info {
        int vlan_id_bound; /* updated by ap_sta_bind_vlan() */
         /* PSKs from RADIUS authentication server */
        struct hostapd_sta_wpa_psk_short *psk;
@@ -544,7 +544,7 @@ as adding/removing interfaces.
        char *radius_cui; /* Chargeable-User-Identity from RADIUS */
 --- a/src/ap/wpa_auth_glue.c
 +++ b/src/ap/wpa_auth_glue.c
-@@ -392,6 +392,7 @@ static const u8 * hostapd_wpa_auth_get_p
+@@ -484,6 +484,7 @@ static const u8 * hostapd_wpa_auth_get_p
        struct sta_info *sta = ap_get_sta(hapd, addr);
        const u8 *psk;
  
@@ -552,7 +552,7 @@ as adding/removing interfaces.
        if (vlan_id)
                *vlan_id = 0;
        if (psk_len)
-@@ -442,13 +443,18 @@ static const u8 * hostapd_wpa_auth_get_p
+@@ -534,13 +535,18 @@ static const u8 * hostapd_wpa_auth_get_p
         * returned psk which should not be returned again.
         * logic list (all hostapd_get_psk; all sta->psk)
         */
@@ -572,7 +572,7 @@ as adding/removing interfaces.
                        if (pos->is_passphrase) {
                                if (pbkdf2_sha1(pos->passphrase,
                                                hapd->conf->ssid.ssid,
-@@ -462,9 +468,13 @@ static const u8 * hostapd_wpa_auth_get_p
+@@ -554,9 +560,13 @@ static const u8 * hostapd_wpa_auth_get_p
                        }
                        if (pos->psk == prev_psk) {
                                psk = pos->next ? pos->next->psk : NULL;
@@ -588,7 +588,7 @@ as adding/removing interfaces.
  }
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -4072,6 +4072,25 @@ struct wpa_driver_ops {
+@@ -4173,6 +4173,25 @@ struct wpa_driver_ops {
                         const char *ifname);
  
        /**
@@ -614,7 +614,7 @@ as adding/removing interfaces.
         * set_sta_vlan - Bind a station into a specific interface (AP only)
         * @priv: Private driver interface data
         * @ifname: Interface (main or virtual BSS or VLAN)
-@@ -6901,6 +6920,7 @@ union wpa_event_data {
+@@ -7016,6 +7035,7 @@ union wpa_event_data {
  
        /**
         * struct ch_switch
@@ -622,7 +622,7 @@ as adding/removing interfaces.
         * @freq: Frequency of new channel in MHz
         * @ht_enabled: Whether this is an HT channel
         * @ch_offset: Secondary channel offset
-@@ -6911,6 +6931,7 @@ union wpa_event_data {
+@@ -7026,6 +7046,7 @@ union wpa_event_data {
         * @punct_bitmap: Puncturing bitmap
         */
        struct ch_switch {
@@ -649,7 +649,7 @@ as adding/removing interfaces.
  
  static struct nl_sock * nl_create_handle(struct nl_cb *cb, const char *dbg)
  {
-@@ -437,6 +447,11 @@ static int no_seq_check(struct nl_msg *m
+@@ -449,6 +459,11 @@ static int no_seq_check(struct nl_msg *m
        return NL_OK;
  }
  
@@ -661,7 +661,7 @@ as adding/removing interfaces.
  
  static void nl80211_nlmsg_clear(struct nl_msg *msg)
  {
-@@ -511,6 +526,8 @@ int send_and_recv_glb(struct nl80211_glo
+@@ -633,6 +648,8 @@ int send_and_recv_glb(struct nl80211_glo
        if (!msg)
                return -ENOMEM;
  
@@ -670,7 +670,7 @@ as adding/removing interfaces.
        err.err = -ENOMEM;
  
        s_nl_cb = nl_socket_get_cb(nl_handle);
-@@ -552,6 +569,7 @@ int send_and_recv_glb(struct nl80211_glo
+@@ -677,6 +694,7 @@ int send_and_recv_glb(struct nl80211_glo
        err.err_info = err_info;
        err.drv = drv;
  
@@ -678,7 +678,7 @@ as adding/removing interfaces.
        nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err);
        nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err.err);
        if (ack_handler_custom) {
-@@ -973,6 +991,7 @@ nl80211_get_wiphy_data_ap(struct i802_bs
+@@ -1105,6 +1123,7 @@ nl80211_get_wiphy_data_ap(struct i802_bs
                        os_free(w);
                        return NULL;
                }
@@ -686,33 +686,15 @@ as adding/removing interfaces.
                nl_cb_set(w->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM,
                          no_seq_check, NULL);
                nl_cb_set(w->nl_cb, NL_CB_VALID, NL_CB_CUSTOM,
-@@ -1401,7 +1420,7 @@ static void wpa_driver_nl80211_event_rtm
-               }
-               wpa_printf(MSG_DEBUG, "nl80211: Interface down (%s/%s)",
-                          namebuf, ifname);
--              if (os_strcmp(drv->first_bss->ifname, ifname) != 0) {
-+              if (drv->first_bss->ifindex != ifi->ifi_index) {
-                       wpa_printf(MSG_DEBUG,
-                                  "nl80211: Not the main interface (%s) - do not indicate interface down",
-                                  drv->first_bss->ifname);
-@@ -1437,7 +1456,7 @@ static void wpa_driver_nl80211_event_rtm
-               }
-               wpa_printf(MSG_DEBUG, "nl80211: Interface up (%s/%s)",
-                          namebuf, ifname);
--              if (os_strcmp(drv->first_bss->ifname, ifname) != 0) {
-+              if (drv->first_bss->ifindex != ifi->ifi_index) {
-                       wpa_printf(MSG_DEBUG,
-                                  "nl80211: Not the main interface (%s) - do not indicate interface up",
-                                  drv->first_bss->ifname);
-@@ -2130,6 +2149,7 @@ static int wpa_driver_nl80211_init_nl_gl
-       genl_family_put(family);
-       nl_cache_free(cache);
+@@ -2212,6 +2231,7 @@ static int wpa_driver_nl80211_init_nl_gl
+       /* Needs to be registered early so that process_global_event() calls
+        * the sync reply handler hook.
+        */
 +      nl_cb_set(global->nl_cb, NL_CB_MSG_IN, NL_CB_CUSTOM, debug_handler, NULL);
        nl_cb_set(global->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM,
                  no_seq_check, NULL);
        nl_cb_set(global->nl_cb, NL_CB_VALID, NL_CB_CUSTOM,
-@@ -2300,6 +2320,7 @@ static int nl80211_init_bss(struct i802_
+@@ -2445,6 +2465,7 @@ static int nl80211_init_bss(struct i802_
        if (!bss->nl_cb)
                return -1;
  
@@ -720,7 +702,7 @@ as adding/removing interfaces.
        nl_cb_set(bss->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM,
                  no_seq_check, NULL);
        nl_cb_set(bss->nl_cb, NL_CB_VALID, NL_CB_CUSTOM,
-@@ -8856,6 +8877,7 @@ static void *i802_init(struct hostapd_da
+@@ -9178,6 +9199,7 @@ static void *i802_init(struct hostapd_da
        char master_ifname[IFNAMSIZ];
        int ifindex, br_ifindex = 0;
        int br_added = 0;
@@ -728,7 +710,7 @@ as adding/removing interfaces.
  
        bss = wpa_driver_nl80211_drv_init(hapd, params->ifname,
                                          params->global_priv, 1,
-@@ -8916,21 +8938,17 @@ static void *i802_init(struct hostapd_da
+@@ -9238,21 +9260,17 @@ static void *i802_init(struct hostapd_da
            (params->num_bridge == 0 || !params->bridge[0]))
                add_ifidx(drv, br_ifindex, drv->ifindex);
  
@@ -760,7 +742,7 @@ as adding/removing interfaces.
        }
  
        if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) {
-@@ -9312,6 +9330,50 @@ static int wpa_driver_nl80211_if_remove(
+@@ -9636,6 +9654,50 @@ static int wpa_driver_nl80211_if_remove(
        return 0;
  }
  
@@ -811,7 +793,7 @@ as adding/removing interfaces.
  
  static int cookie_handler(struct nl_msg *msg, void *arg)
  {
-@@ -11197,6 +11259,37 @@ static bool nl80211_is_drv_shared(void *
+@@ -11535,6 +11597,37 @@ static bool nl80211_is_drv_shared(void *
  #endif /* CONFIG_IEEE80211BE */
  
  
@@ -849,7 +831,7 @@ as adding/removing interfaces.
  static int driver_nl80211_send_mlme(void *priv, const u8 *data,
                                    size_t data_len, int noack,
                                    unsigned int freq,
-@@ -15016,6 +15109,8 @@ const struct wpa_driver_ops wpa_driver_n
+@@ -15541,6 +15634,8 @@ const struct wpa_driver_ops wpa_driver_n
        .set_acl = wpa_driver_nl80211_set_acl,
        .if_add = wpa_driver_nl80211_if_add,
        .if_remove = driver_nl80211_if_remove,
@@ -860,7 +842,7 @@ as adding/removing interfaces.
        .sta_add = wpa_driver_nl80211_sta_add,
 --- a/src/drivers/driver_nl80211_event.c
 +++ b/src/drivers/driver_nl80211_event.c
-@@ -1254,6 +1254,7 @@ static void mlme_event_ch_switch(struct
+@@ -1260,6 +1260,7 @@ static void mlme_event_ch_switch(struct
                                 struct nlattr *bw, struct nlattr *cf1,
                                 struct nlattr *cf2,
                                 struct nlattr *punct_bitmap,
@@ -868,7 +850,7 @@ as adding/removing interfaces.
                                 int finished)
  {
        struct i802_bss *bss;
-@@ -1319,6 +1320,8 @@ static void mlme_event_ch_switch(struct
+@@ -1325,6 +1326,8 @@ static void mlme_event_ch_switch(struct
                data.ch_switch.cf1 = nla_get_u32(cf1);
        if (cf2)
                data.ch_switch.cf2 = nla_get_u32(cf2);
@@ -877,7 +859,7 @@ as adding/removing interfaces.
  
        if (link) {
                data.ch_switch.link_id = nla_get_u8(link);
-@@ -4279,6 +4282,7 @@ static void do_process_drv_event(struct
+@@ -4331,6 +4334,7 @@ static void do_process_drv_event(struct
                                     tb[NL80211_ATTR_CENTER_FREQ1],
                                     tb[NL80211_ATTR_CENTER_FREQ2],
                                     tb[NL80211_ATTR_PUNCT_BITMAP],
@@ -885,7 +867,7 @@ as adding/removing interfaces.
                                     0);
                break;
        case NL80211_CMD_CH_SWITCH_NOTIFY:
-@@ -4291,6 +4295,7 @@ static void do_process_drv_event(struct
+@@ -4343,6 +4347,7 @@ static void do_process_drv_event(struct
                                     tb[NL80211_ATTR_CENTER_FREQ1],
                                     tb[NL80211_ATTR_CENTER_FREQ2],
                                     tb[NL80211_ATTR_PUNCT_BITMAP],
@@ -906,7 +888,7 @@ as adding/removing interfaces.
  
  int wpa_debug_level = MSG_INFO;
  int wpa_debug_show_keys = 0;
-@@ -210,6 +214,12 @@ void _wpa_printf(int level, const char *
+@@ -224,6 +228,12 @@ void _wpa_printf(int level, const char *
  {
        va_list ap;
  
@@ -919,7 +901,7 @@ as adding/removing interfaces.
        if (level >= wpa_debug_level) {
  #ifdef CONFIG_ANDROID_LOG
                va_start(ap, fmt);
-@@ -260,6 +270,9 @@ void _wpa_hexdump(int level, const char
+@@ -274,6 +284,9 @@ void _wpa_hexdump(int level, const char
  {
        size_t i;
  
@@ -959,7 +941,7 @@ as adding/removing interfaces.
  ifdef CONFIG_CODE_COVERAGE
  CFLAGS += -O0 -fprofile-arcs -ftest-coverage -U_FORTIFY_SOURCE
  LIBS += -lgcov
-@@ -1046,6 +1054,9 @@ ifdef CONFIG_CTRL_IFACE_MIB
+@@ -1068,6 +1076,9 @@ ifdef CONFIG_CTRL_IFACE_MIB
  CFLAGS += -DCONFIG_CTRL_IFACE_MIB
  endif
  OBJS += ../src/ap/ctrl_iface_ap.o
@@ -971,15 +953,15 @@ as adding/removing interfaces.
  CFLAGS += -DEAP_SERVER -DEAP_SERVER_IDENTITY
 --- a/wpa_supplicant/events.c
 +++ b/wpa_supplicant/events.c
-@@ -53,6 +53,7 @@
- #include "wmm_ac.h"
- #include "nan_usd.h"
+@@ -54,6 +54,7 @@
  #include "dpp_supplicant.h"
+ #include "pr_supplicant.h"
+ #include "nan_supplicant.h"
 +#include "ucode.h"
  
  
  #define MAX_OWE_TRANSITION_BSS_SELECT_COUNT 5
-@@ -1706,6 +1707,12 @@ struct wpa_ssid * wpa_scan_res_match(str
+@@ -1717,6 +1718,12 @@ struct wpa_ssid * wpa_scan_res_match(str
                return NULL;
        }
  
@@ -992,7 +974,7 @@ as adding/removing interfaces.
        for (ssid = group; ssid; ssid = only_first_ssid ? NULL : ssid->pnext) {
                if (wpa_scan_res_ok(wpa_s, ssid, match_ssid, match_ssid_len,
                                    bss, bssid_ignore_count, debug_print, link))
-@@ -3117,8 +3124,8 @@ fail:
+@@ -3127,8 +3134,8 @@ fail:
  static void multi_ap_process_assoc_resp(struct wpa_supplicant *wpa_s,
                                        const u8 *ies, size_t ies_len)
  {
@@ -1002,7 +984,7 @@ as adding/removing interfaces.
        u16 status;
  
        wpa_s->multi_ap_ie = 0;
-@@ -3129,13 +3136,13 @@ static void multi_ap_process_assoc_resp(
+@@ -3139,13 +3146,13 @@ static void multi_ap_process_assoc_resp(
                return;
  
        status = check_multi_ap_ie(elems.multi_ap + 4, elems.multi_ap_len - 4,
@@ -1019,7 +1001,7 @@ as adding/removing interfaces.
                                       MULTI_AP_FRONTHAUL_BSS);
        wpa_s->multi_ap_ie = 1;
  }
-@@ -5500,6 +5507,13 @@ static void wpas_event_rx_mgmt_action(st
+@@ -5749,6 +5756,13 @@ static void wpas_event_rx_mgmt_action(st
        }
  #endif /* CONFIG_WNM */
  
@@ -1033,7 +1015,7 @@ as adding/removing interfaces.
  #ifdef CONFIG_GAS
        if ((mgmt->u.action.category == WLAN_ACTION_PUBLIC ||
             mgmt->u.action.category == WLAN_ACTION_PROTECTED_DUAL) &&
-@@ -6293,6 +6307,7 @@ void supplicant_event(void *ctx, enum wp
+@@ -6555,6 +6569,7 @@ void supplicant_event(void *ctx, enum wp
                event_to_string(event), event);
  #endif /* CONFIG_NO_STDOUT_DEBUG */
  
@@ -1134,7 +1116,7 @@ as adding/removing interfaces.
  
  
  static int wpas_dpp_listen_start(struct wpa_supplicant *wpa_s,
-@@ -4118,6 +4119,9 @@ void wpas_dpp_rx_action(struct wpa_suppl
+@@ -4119,6 +4120,9 @@ void wpas_dpp_rx_action(struct wpa_suppl
                return;
        }
        wpa_hexdump(MSG_MSGDUMP, "DPP: Received message attributes", buf, len);
index bb4160edd94767c1bc11795f429ab57c8525b374..d239f24ac88627d5cd753b2dc49d228764fddf59 100644 (file)
@@ -8,7 +8,7 @@ as adding/removing interfaces.
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -4983,7 +4983,14 @@ struct hostapd_config * hostapd_config_r
+@@ -5008,7 +5008,14 @@ struct hostapd_config * hostapd_config_r
        int errors = 0;
        size_t i;
  
@@ -26,7 +26,7 @@ as adding/removing interfaces.
                           "for reading.", fname);
 --- a/wpa_supplicant/config_file.c
 +++ b/wpa_supplicant/config_file.c
-@@ -390,8 +390,13 @@ struct wpa_config * wpa_config_read(cons
+@@ -391,8 +391,13 @@ struct wpa_config * wpa_config_read(cons
        while (identity_tail && identity_tail->next)
                identity_tail = identity_tail->next;
  
@@ -39,11 +39,11 @@ as adding/removing interfaces.
        wpa_printf(MSG_DEBUG, "Reading configuration file '%s'", name);
 -      f = fopen(name, "r");
        if (f == NULL) {
-               wpa_printf(MSG_ERROR, "Failed to open config file '%s', "
-                          "error: %s", name, strerror(errno));
+               if (show_details)
+                       wpa_printf(MSG_ERROR,
 --- a/hostapd/main.c
 +++ b/hostapd/main.c
-@@ -406,7 +406,11 @@ hostapd_interface_init(struct hapd_inter
+@@ -407,7 +407,11 @@ hostapd_interface_init(struct hapd_inter
        struct hostapd_iface *iface;
        int k;
  
@@ -58,7 +58,7 @@ as adding/removing interfaces.
                return NULL;
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -3399,8 +3399,13 @@ hostapd_interface_init_bss(struct hapd_i
+@@ -3414,8 +3414,13 @@ hostapd_interface_init_bss(struct hapd_i
                }
        }
  
index fb0a5d4a95f82ecd0da0f399bccf176474e975dd..a450dbed3faccda014dfc8cec4b39d42b844aedd 100644 (file)
@@ -8,7 +8,7 @@ was provided by the config
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -3415,6 +3415,8 @@ static int hostapd_config_fill(struct ho
+@@ -3427,6 +3427,8 @@ static int hostapd_config_fill(struct ho
  #ifndef CONFIG_NO_VLAN
        } else if (os_strcmp(buf, "dynamic_vlan") == 0) {
                bss->ssid.dynamic_vlan = atoi(pos);
@@ -29,7 +29,7 @@ was provided by the config
  #define DYNAMIC_VLAN_NAMING_END 2
 --- a/src/ap/vlan_full.c
 +++ b/src/ap/vlan_full.c
-@@ -475,6 +475,9 @@ void vlan_newlink(const char *ifname, st
+@@ -483,6 +483,9 @@ void vlan_newlink(const char *ifname, st
        if (!vlan)
                return;
  
@@ -39,7 +39,7 @@ was provided by the config
        vlan->configured = 1;
  
        notempty = vlan->vlan_desc.notempty;
-@@ -506,6 +509,7 @@ void vlan_newlink(const char *ifname, st
+@@ -514,6 +517,7 @@ void vlan_newlink(const char *ifname, st
                                    ifname, br_name, tagged[i], hapd);
        }
  
index c71318be8546ad94eb95ec5b7845e8335737dded..51107d3173a14bdc65c9c12ad0ebafdeac8eb28b 100644 (file)
@@ -11,7 +11,7 @@ instead rely entirely on netifd handling this properly
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -2241,6 +2241,8 @@ static int hostapd_config_fill(struct ho
+@@ -2245,6 +2245,8 @@ static int hostapd_config_fill(struct ho
                           sizeof(conf->bss[0]->iface));
        } else if (os_strcmp(buf, "bridge") == 0) {
                os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
@@ -22,7 +22,7 @@ instead rely entirely on netifd handling this properly
        } else if (os_strcmp(buf, "vlan_bridge") == 0) {
 --- a/src/ap/ap_drv_ops.c
 +++ b/src/ap/ap_drv_ops.c
-@@ -390,8 +390,6 @@ int hostapd_set_wds_sta(struct hostapd_d
+@@ -397,8 +397,6 @@ int hostapd_set_wds_sta(struct hostapd_d
                return -1;
        if (hapd->conf->wds_bridge[0])
                bridge = hapd->conf->wds_bridge;
index f0e3da9f59aa5c493673859ac6a7fbdab7b0986c..e44b2f1b30e80064ce31eaf6b6704bf4bcbc7659 100644 (file)
@@ -8,7 +8,7 @@ full device, e.g. in order to deal with hardware/driver limitations
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -2857,6 +2857,14 @@ static int hostapd_config_fill(struct ho
+@@ -2861,6 +2861,14 @@ static int hostapd_config_fill(struct ho
                                   line, bss->max_num_sta, MAX_STA_COUNT);
                        return 1;
                }
@@ -25,7 +25,7 @@ full device, e.g. in order to deal with hardware/driver limitations
        } else if (os_strcmp(buf, "extended_key_id") == 0) {
 --- a/src/ap/ap_config.h
 +++ b/src/ap/ap_config.h
-@@ -1071,6 +1071,8 @@ struct hostapd_config {
+@@ -1083,6 +1083,8 @@ struct hostapd_config {
        unsigned int track_sta_max_num;
        unsigned int track_sta_max_age;
  
@@ -36,7 +36,7 @@ full device, e.g. in order to deal with hardware/driver limitations
                          * ' ' (ascii 32): all environments
 --- a/src/ap/beacon.c
 +++ b/src/ap/beacon.c
-@@ -1655,7 +1655,7 @@ void handle_probe_req(struct hostapd_dat
+@@ -1701,7 +1701,7 @@ void handle_probe_req(struct hostapd_dat
        if (hapd->conf->no_probe_resp_if_max_sta &&
            is_multicast_ether_addr(mgmt->da) &&
            is_multicast_ether_addr(mgmt->bssid) &&
@@ -47,7 +47,7 @@ full device, e.g. in order to deal with hardware/driver limitations
                           " since no room for additional STA",
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -251,6 +251,29 @@ static int hostapd_iface_conf_changed(st
+@@ -259,6 +259,29 @@ static int hostapd_iface_conf_changed(st
        return 0;
  }
  
@@ -79,7 +79,7 @@ full device, e.g. in order to deal with hardware/driver limitations
  {
 --- a/src/ap/hostapd.h
 +++ b/src/ap/hostapd.h
-@@ -831,6 +831,7 @@ void hostapd_periodic_iface(struct hosta
+@@ -838,6 +838,7 @@ void hostapd_periodic_iface(struct hosta
  int hostapd_owe_trans_get_info(struct hostapd_data *hapd);
  void hostapd_owe_update_trans(struct hostapd_iface *iface);;
  void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx);
index 4f97b923abe3e0500aed0717522a3977f7169970..dc0d3d5875d24932c0eb83a94e301e07254632a9 100644 (file)
@@ -8,7 +8,7 @@ a VLAN interface on top of the bridge, instead of using the bridge directly
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -3054,6 +3054,8 @@ static int hostapd_config_fill(struct ho
+@@ -3066,6 +3066,8 @@ static int hostapd_config_fill(struct ho
                wpa_printf(MSG_INFO,
                           "Line %d: Obsolete peerkey parameter ignored", line);
  #ifdef CONFIG_IEEE80211R_AP
@@ -29,7 +29,7 @@ a VLAN interface on top of the bridge, instead of using the bridge directly
        int bridge_hairpin; /* hairpin_mode on bridge members */
 --- a/src/ap/wpa_auth_glue.c
 +++ b/src/ap/wpa_auth_glue.c
-@@ -1848,8 +1848,12 @@ int hostapd_setup_wpa(struct hostapd_dat
+@@ -1899,8 +1899,12 @@ int hostapd_setup_wpa(struct hostapd_dat
            wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) {
                const char *ft_iface;
  
index 440848b743dee0dd8fb1613090e20ecfef078297..7c4107320cc45d27d43925c83a2b85074e5568bf 100644 (file)
@@ -8,7 +8,7 @@ untagged DHCP packets
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -2245,6 +2245,8 @@ static int hostapd_config_fill(struct ho
+@@ -2249,6 +2249,8 @@ static int hostapd_config_fill(struct ho
                        os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge));
        } else if (os_strcmp(buf, "bridge_hairpin") == 0) {
                bss->bridge_hairpin = atoi(pos);
@@ -29,7 +29,7 @@ untagged DHCP packets
        int bridge_hairpin; /* hairpin_mode on bridge members */
 --- a/src/ap/ap_drv_ops.h
 +++ b/src/ap/ap_drv_ops.h
-@@ -377,12 +377,12 @@ static inline int hostapd_drv_br_port_se
+@@ -366,12 +366,12 @@ static inline int hostapd_drv_br_port_se
  
  static inline int hostapd_drv_br_set_net_param(struct hostapd_data *hapd,
                                               enum drv_br_net_param param,
@@ -112,7 +112,7 @@ untagged DHCP packets
        hapd->x_snoop_initialized = false;
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -4498,7 +4498,7 @@ struct wpa_driver_ops {
+@@ -4587,7 +4587,7 @@ struct wpa_driver_ops {
         * Returns: 0 on success, negative (<0) on failure
         */
        int (*br_set_net_param)(void *priv, enum drv_br_net_param param,
@@ -123,7 +123,7 @@ untagged DHCP packets
         * get_wowlan - Get wake-on-wireless status
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -12898,7 +12898,7 @@ static const char * drv_br_net_param_str
+@@ -13233,7 +13233,7 @@ static const char * drv_br_net_param_str
  
  
  static int wpa_driver_br_set_net_param(void *priv, enum drv_br_net_param param,
@@ -132,7 +132,7 @@ untagged DHCP packets
  {
        struct i802_bss *bss = priv;
        char path[128];
-@@ -12924,8 +12924,11 @@ static int wpa_driver_br_set_net_param(v
+@@ -13259,8 +13259,11 @@ static int wpa_driver_br_set_net_param(v
                        return -EINVAL;
        }
  
index bcdf443dbef2b6ef9751205676036d9ad3e3098c..91a16d0e5617cb315fa4d47415ff84c87275807c 100644 (file)
@@ -7,7 +7,7 @@ Some servers use the NAS-IP-Address attribute as a destination address
 
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -2632,6 +2632,8 @@ static int hostapd_config_fill(struct ho
+@@ -2636,6 +2636,8 @@ static int hostapd_config_fill(struct ho
        } else if (os_strcmp(buf, "iapp_interface") == 0) {
                wpa_printf(MSG_INFO, "DEPRECATED: iapp_interface not used");
  #endif /* CONFIG_IAPP */
@@ -18,7 +18,7 @@ Some servers use the NAS-IP-Address attribute as a destination address
                        wpa_printf(MSG_ERROR,
 --- a/src/ap/ap_config.h
 +++ b/src/ap/ap_config.h
-@@ -312,6 +312,7 @@ struct hostapd_bss_config {
+@@ -315,6 +315,7 @@ struct hostapd_bss_config {
        unsigned int eap_sim_db_timeout;
        int eap_server_erp; /* Whether ERP is enabled on internal EAP server */
        struct hostapd_ip_addr own_ip_addr;
index 0b52e7d0a9f142f8e533865db4185b9051a431b0..9021a0d8ef9f373139b6851ba3f040a42ffeb749 100644 (file)
@@ -7,7 +7,7 @@ Use the NAS identifier to find the right receiver context on incoming messages
 
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -1387,6 +1387,7 @@ static int hostapd_bss_radius_init(struc
+@@ -1405,6 +1405,7 @@ static int hostapd_bss_radius_init(struc
  
                os_memset(&das_conf, 0, sizeof(das_conf));
                das_conf.port = conf->radius_das_port;
index 0df542e319b0c84dde8776383f4d3766ce95eb69..9222d977c6d7bafce9f2cbd4fbd18e47acae433a 100644 (file)
@@ -28,7 +28,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
 
 --- a/src/ap/beacon.c
 +++ b/src/ap/beacon.c
-@@ -1498,7 +1498,7 @@ void handle_probe_req(struct hostapd_dat
+@@ -1523,7 +1523,7 @@ void handle_probe_req(struct hostapd_dat
         * is less likely to see them (Probe Request frame sent on a
         * neighboring, but partially overlapping, channel).
         */
index c96ef11919afd40503647ba4c1eddb0b52e2f14a..b2fe10d6c8a50d0c6f677cbeaf2973eae224a378 100644 (file)
        u8 supported_rates[WLAN_SUPP_RATES_MAX];
        int supported_rates_len;
        u8 qosinfo; /* Valid when WLAN_STA_WMM is set */
-+      u32 bandwidth[2];
- #ifdef CONFIG_MESH
-       enum mesh_plink_state plink_state;
++  u32 bandwidth[2];
+ #ifdef CONFIG_ENC_ASSOC
+       bool epp_sta; /* Indicates if the station is an EPP peer */
+ #endif /* CONFIG_ENC_ASSOC */
 --- a/src/radius/radius.c
 +++ b/src/radius/radius.c
 @@ -1377,6 +1377,35 @@ radius_msg_get_cisco_keys(struct radius_
index fdf5fed397e9cc4b7aa422c2446c272937b7a7aa..ba1db508b4702052f7f07c28f2ad6eeab9426918 100644 (file)
@@ -21,7 +21,7 @@ handle reload.
  OBJS += ../src/ap/drv_callbacks.o
 --- a/hostapd/main.c
 +++ b/hostapd/main.c
-@@ -40,6 +40,7 @@ struct hapd_global {
+@@ -41,6 +41,7 @@ struct hapd_global {
  
  static struct hapd_global global;
  
@@ -29,7 +29,7 @@ handle reload.
  
  #ifndef CONFIG_NO_HOSTAPD_LOGGER
  static void hostapd_logger_cb(void *ctx, const u8 *addr, unsigned int module,
-@@ -838,6 +839,11 @@ int main(int argc, char *argv[])
+@@ -848,6 +849,11 @@ int main(int argc, char *argv[])
        if (os_program_init())
                return -1;
  
@@ -71,9 +71,9 @@ handle reload.
        os_free(sess->nas_ip);
 +      os_free(sess->accept_attr);
        os_free(sess);
-       data->num_sess--;
- }
-@@ -533,6 +540,36 @@ radius_server_erp_find_key(struct radius
+       if (data)
+               data->num_sess--;
+@@ -534,6 +541,36 @@ radius_server_erp_find_key(struct radius
  }
  #endif /* CONFIG_ERP */
  
@@ -110,7 +110,7 @@ handle reload.
  
  static struct radius_session *
  radius_server_get_new_session(struct radius_server_data *data,
-@@ -586,7 +623,7 @@ radius_server_get_new_session(struct rad
+@@ -587,7 +624,7 @@ radius_server_get_new_session(struct rad
                eap_user_free(tmp);
                return NULL;
        }
@@ -119,7 +119,7 @@ handle reload.
        sess->macacl = tmp->macacl;
        eap_user_free(tmp);
  
-@@ -923,11 +960,10 @@ radius_server_encapsulate_eap(struct rad
+@@ -924,11 +961,10 @@ radius_server_encapsulate_eap(struct rad
        }
  
        if (code == RADIUS_CODE_ACCESS_ACCEPT) {
@@ -135,7 +135,7 @@ handle reload.
                                wpa_printf(MSG_ERROR, "Could not add RADIUS attribute");
                                radius_msg_free(msg);
                                return NULL;
-@@ -1023,11 +1059,10 @@ radius_server_macacl(struct radius_serve
+@@ -1024,11 +1060,10 @@ radius_server_macacl(struct radius_serve
        }
  
        if (code == RADIUS_CODE_ACCESS_ACCEPT) {
@@ -151,7 +151,7 @@ handle reload.
                                wpa_printf(MSG_ERROR, "Could not add RADIUS attribute");
                                radius_msg_free(msg);
                                return NULL;
-@@ -2335,7 +2370,7 @@ static int radius_server_get_eap_user(vo
+@@ -2336,7 +2371,7 @@ static int radius_server_get_eap_user(vo
        ret = data->get_eap_user(data->conf_ctx, identity, identity_len,
                                 phase2, user);
        if (ret == 0 && user) {
index b819fea1494c18bede527dea000c9d14c455c81d..8873a14fbba3518067152d0f50aa9dfd6ed12518 100644 (file)
@@ -39,8 +39,8 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
 
 --- a/hostapd/Makefile
 +++ b/hostapd/Makefile
-@@ -1430,6 +1430,11 @@ ifdef CONFIG_NO_TKIP
- CFLAGS += -DCONFIG_NO_TKIP
+@@ -1440,6 +1440,11 @@ CFLAGS += -DCONFIG_PROCESS_COORDINATION
+ OBJS += ../src/common/proc_coord.o
  endif
  
 +ifdef CONFIG_APUP
@@ -53,7 +53,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
  
 --- a/hostapd/config_file.c
 +++ b/hostapd/config_file.c
-@@ -4976,6 +4976,15 @@ static int hostapd_config_fill(struct ho
+@@ -4999,6 +4999,15 @@ static int hostapd_config_fill(struct ho
                bss->mld_indicate_disabled = atoi(pos);
  #endif /* CONFIG_TESTING_OPTIONS */
  #endif /* CONFIG_IEEE80211BE */
@@ -66,16 +66,15 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
 +              os_strlcpy(bss->apup_peer_ifname_prefix,
 +                         pos, sizeof(bss->apup_peer_ifname_prefix));
 +#endif // def CONFIG_APUP
+       } else if (os_strcmp(buf, "i2r_lmr_policy") == 0) {
+               conf->i2r_lmr_policy = atoi(pos);
        } else {
-               wpa_printf(MSG_ERROR,
-                          "Line %d: unknown configuration item '%s'",
 --- a/src/ap/ap_config.h
 +++ b/src/ap/ap_config.h
-@@ -984,6 +984,35 @@ struct hostapd_bss_config {
-       int mbssid_index;
-       bool spp_amsdu;
-+
+@@ -1001,6 +1001,34 @@ struct hostapd_bss_config {
+       unsigned int pmksa_caching_privacy:1;
+       unsigned int eap_using_authentication_frames:1;
+ #endif /* CONFIG_ENC_ASSOC  */
 +#ifdef CONFIG_APUP
 +      /**
 +       * Access Point Micro Peering
@@ -109,7 +108,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
  /**
 --- a/src/ap/ap_drv_ops.c
 +++ b/src/ap/ap_drv_ops.c
-@@ -385,13 +385,39 @@ int hostapd_set_wds_sta(struct hostapd_d
+@@ -392,13 +392,39 @@ int hostapd_set_wds_sta(struct hostapd_d
                        const u8 *addr, int aid, int val)
  {
        const char *bridge = NULL;
@@ -164,7 +163,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
  int hostapd_sta_add(struct hostapd_data *hapd,
 --- /dev/null
 +++ b/src/ap/apup.c
-@@ -0,0 +1,169 @@
+@@ -0,0 +1,170 @@
 +/*
 + * hostapd / APuP Access Point Micro Peering
 + *
@@ -228,6 +227,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
 +      const u8 *mld_link_addr = NULL;
 +      bool mld_link_sta = false;
 +      u16 eml_cap = 0;
++  bool epp_sta = false;
 +
 +      /* First add the station without more information */
 +      int aRet = hostapd_sta_add(
@@ -235,7 +235,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
 +                  NULL, 0, 0, NULL, NULL, NULL, 0, NULL, 0, NULL,
 +                  sta_ret->flags, 0, 0, 0,
 +                  0, // 0 add, 1 set
-+                  mld_link_addr, mld_link_sta, eml_cap);
++                  mld_link_addr, mld_link_sta, eml_cap, epp_sta);
 +
 +      sta_ret->flags |= WLAN_STA_AUTH;
 +      wpa_auth_sm_event(sta_ret->wpa_sm, WPA_AUTH);
@@ -309,7 +309,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
 +                  sta_ret->vht_opmode,
 +                  0, // int supp_p2p_ps
 +                  1, // 0 add, 1 set
-+                  mld_link_addr, mld_link_sta, eml_cap);
++                  mld_link_addr, mld_link_sta, eml_cap, epp_sta);
 +
 +      ap_sta_set_authorized(hapd, sta_ret, 1);
 +      hostapd_set_sta_flags(hapd, sta_ret);
@@ -363,7 +363,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
 +              const struct ieee802_11_elems *elems );
 --- a/src/ap/ieee802_11.c
 +++ b/src/ap/ieee802_11.c
-@@ -60,6 +60,9 @@
+@@ -63,6 +63,9 @@
  #include "nan_usd_ap.h"
  #include "pasn/pasn_common.h"
  
@@ -373,7 +373,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
  
  #ifdef CONFIG_FILS
  static struct wpabuf *
-@@ -3880,8 +3883,8 @@ static u16 check_multi_ap(struct hostapd
+@@ -4092,8 +4095,8 @@ static u16 check_multi_ap(struct hostapd
  }
  
  
@@ -384,16 +384,16 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
  {
        /* Supported rates not used in IEEE 802.11ad/DMG */
        if (hapd->iface->current_mode &&
-@@ -4326,7 +4329,7 @@ static int __check_assoc_ies(struct host
+@@ -4543,7 +4546,7 @@ static int __check_assoc_ies(struct host
                               elems->ext_capab_len);
        if (resp != WLAN_STATUS_SUCCESS)
-               return resp;
+               goto out;
 -      resp = copy_supp_rates(hapd, sta, elems);
 +      resp = hostapd_copy_supp_rates(hapd, sta, elems);
        if (resp != WLAN_STATUS_SUCCESS)
-               return resp;
+               goto out;
  
-@@ -6423,6 +6426,11 @@ static void handle_beacon(struct hostapd
+@@ -6747,6 +6750,11 @@ static void handle_beacon(struct hostapd
                                      0);
  
        ap_list_process_beacon(hapd->iface, mgmt, &elems, fi);
@@ -418,7 +418,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
  u16 copy_sta_vendor_vht(struct hostapd_data *hapd, struct sta_info *sta,
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -4192,7 +4192,7 @@ struct wpa_driver_ops {
+@@ -4281,7 +4281,7 @@ struct wpa_driver_ops {
         * Returns: 0 on success, -1 on failure
         */
        int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val,
@@ -429,7 +429,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
         * send_action - Transmit an Action frame
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -8708,25 +8708,15 @@ static int have_ifidx(struct wpa_driver_
+@@ -9030,25 +9030,15 @@ int nl80211_has_ifidx(struct wpa_driver_
  
  
  static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val,
index 2a4ec0b75543cc8fd494dd949962a6ce4078b486..8988ff6507e2985e653414f9c39a02b88aeaf8a1 100644 (file)
@@ -1,6 +1,6 @@
 --- a/src/ap/sta_info.c
 +++ b/src/ap/sta_info.c
-@@ -1981,3 +1981,22 @@ void ap_sta_free_sta_profile(struct mld_
+@@ -2166,3 +2166,22 @@ void ap_sta_free_sta_profile(struct mld_
        }
  }
  #endif /* CONFIG_IEEE80211BE */
@@ -25,7 +25,7 @@
 +
 --- a/src/ap/sta_info.h
 +++ b/src/ap/sta_info.h
-@@ -413,23 +413,8 @@ int ap_sta_re_add(struct hostapd_data *h
+@@ -423,23 +423,8 @@ int ap_sta_re_add(struct hostapd_data *h
  
  void ap_free_sta_pasn(struct hostapd_data *hapd, struct sta_info *sta);