aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package/network/services/hostapd/Config.in19
-rw-r--r--package/network/services/hostapd/Makefile43
-rw-r--r--package/network/services/hostapd/files/hostapd.sh3
-rw-r--r--package/network/services/hostapd/patches/0001-Revert-wpa_supplicant-Increase-authentication-timeou.patch185
-rw-r--r--package/network/services/hostapd/patches/0002-Revert-wpa_supplicant-Rename-wpas_event_-to-wpas_ap_.patch132
-rw-r--r--package/network/services/hostapd/patches/001-mesh-factor-out-mesh-join-function.patch (renamed from package/network/services/hostapd/patches/0101-mesh-factor-out-mesh-join-function.patch)24
-rw-r--r--package/network/services/hostapd/patches/002-mesh-factor-out-rsn-initialization.patch (renamed from package/network/services/hostapd/patches/0102-mesh-factor-out-rsn-initialization.patch)48
-rw-r--r--package/network/services/hostapd/patches/003-mesh-relocate-RSN-init-function.patch (renamed from package/network/services/hostapd/patches/0103-mesh-relocate-RSN-init-function.patch)10
-rw-r--r--package/network/services/hostapd/patches/004-mesh-use-setup-completion-callback-to-complete-mesh-.patch (renamed from package/network/services/hostapd/patches/0104-mesh-use-setup-completion-callback-to-complete-mesh-.patch)14
-rw-r--r--package/network/services/hostapd/patches/005-mesh-reflect-country-setting-to-mesh-configuration.patch (renamed from package/network/services/hostapd/patches/0105-mesh-reflect-country-setting-to-mesh-configuration.patch)11
-rw-r--r--package/network/services/hostapd/patches/006-mesh-inform-kernel-driver-DFS-handler-in-userspace.patch (renamed from package/network/services/hostapd/patches/0106-mesh-inform-kernel-driver-DFS-handler-in-userspace.patch)10
-rw-r--r--package/network/services/hostapd/patches/007-mesh-apply-channel-attributes-before-running-Mesh.patch (renamed from package/network/services/hostapd/patches/0107-mesh-apply-channel-attributes-before-running-Mesh.patch)10
-rw-r--r--package/network/services/hostapd/patches/008-mesh-set-interface-type-to-mesh-before-setting-inter.patch (renamed from package/network/services/hostapd/patches/0108-mesh-set-interface-type-to-mesh-before-setting-inter.patch)8
-rw-r--r--package/network/services/hostapd/patches/009-mesh-set-mesh-center-frequency.patch (renamed from package/network/services/hostapd/patches/0109-mesh-set-mesh-center-frequency.patch)8
-rw-r--r--package/network/services/hostapd/patches/010-mesh-consider-mesh-interface-on-dfs-event-handler.patch (renamed from package/network/services/hostapd/patches/0110-mesh-consider-mesh-interface-on-dfs-event-handler.patch)66
-rw-r--r--package/network/services/hostapd/patches/011-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch (renamed from package/network/services/hostapd/patches/0111-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch)6
-rw-r--r--package/network/services/hostapd/patches/012-mesh-allow-mesh-to-send-channel-switch-request.patch (renamed from package/network/services/hostapd/patches/0112-mesh-allow-mesh-to-send-channel-switch-request.patch)8
-rw-r--r--package/network/services/hostapd/patches/013-mesh-do-not-allow-pri-sec-channel-switch.patch (renamed from package/network/services/hostapd/patches/0113-mesh-do-not-allow-pri-sec-channel-switch.patch)8
-rw-r--r--package/network/services/hostapd/patches/014-mesh-do-not-allow-scan-result-to-swap-pri-sec.patch (renamed from package/network/services/hostapd/patches/0114-mesh-do-not-allow-scan-result-to-swap-pri-sec.patch)6
-rw-r--r--package/network/services/hostapd/patches/015-mesh-do-not-use-offchan-mgmt-tx-on-DFS.patch (renamed from package/network/services/hostapd/patches/0115-mesh-do-not-use-offchan-mgmt-tx-on-DFS.patch)21
-rw-r--r--package/network/services/hostapd/patches/016-mesh-make-forwarding-configurable.patch (renamed from package/network/services/hostapd/patches/021-mesh-make-forwarding-configurable.patch)54
-rw-r--r--package/network/services/hostapd/patches/020-mesh-properly-handle-sae_password.patch52
-rw-r--r--package/network/services/hostapd/patches/022-mesh-fix-crash-with-CONFIG_TAXONOMY-enabled.patch2
-rw-r--r--package/network/services/hostapd/patches/030-rsn_supp-fix-stub-pmksa_cache.patch21
-rw-r--r--package/network/services/hostapd/patches/031-mesh-add-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch2
-rw-r--r--package/network/services/hostapd/patches/200-multicall.patch28
-rw-r--r--package/network/services/hostapd/patches/300-noscan.patch4
-rw-r--r--package/network/services/hostapd/patches/301-mesh-noscan.patch6
-rw-r--r--package/network/services/hostapd/patches/310-rescan_immediately.patch2
-rw-r--r--package/network/services/hostapd/patches/340-reload_freq_change.patch6
-rw-r--r--package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch6
-rw-r--r--package/network/services/hostapd/patches/360-ctrl_iface_reload.patch4
-rw-r--r--package/network/services/hostapd/patches/370-ap_sta_support.patch10
-rw-r--r--package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch22
-rw-r--r--package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch2
-rw-r--r--package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch6
-rw-r--r--package/network/services/hostapd/patches/600-ubus_support.patch32
37 files changed, 603 insertions, 296 deletions
diff --git a/package/network/services/hostapd/Config.in b/package/network/services/hostapd/Config.in
index fea5ed3ba3..ba0b235990 100644
--- a/package/network/services/hostapd/Config.in
+++ b/package/network/services/hostapd/Config.in
@@ -1,7 +1,7 @@
# wpa_supplicant config
config WPA_SUPPLICANT_NO_TIMESTAMP_CHECK
bool "Disable timestamp check"
- depends on PACKAGE_wpa-supplicant || PACKAGE_wpa-supplicant-mesh || PACKAGE_wpa-supplicant-mini || PACKAGE_wpad || PACKAGE_wpad-mini || PACAKGE_wpad-mesh
+ depends on PACKAGE_wpa-supplicant || PACKAGE_wpa-supplicant-mesh || PACKAGE_wpa-supplicant-mini || PACKAGE_wpad || PACKAGE_wpad-mini || PACKAGE_wpad-mesh
default n
help
This disables the timestamp check for certificates in wpa_supplicant
@@ -10,15 +10,30 @@ config WPA_SUPPLICANT_NO_TIMESTAMP_CHECK
choice
prompt "Choose TLS provider"
default WPA_SUPPLICANT_INTERNAL
- depends on PACKAGE_wpa-supplicant || PACKAGE_wpad
+ depends on PACKAGE_wpa-supplicant || PACKAGE_wpad || PACKAGE_wpad-mesh
config WPA_SUPPLICANT_INTERNAL
bool "internal"
+ depends on PACKAGE_wpa-supplicant || PACKAGE_wpad
config WPA_SUPPLICANT_OPENSSL
bool "openssl"
select PACKAGE_libopenssl
+config WPA_SUPPLICANT_WOLFSSL
+ bool "wolfssl"
+ select PACKAGE_libwolfssl
+ select WOLFSSL_HAS_AES_CCM
+ select WOLFSSL_HAS_AES_GCM
+ select WOLFSSL_HAS_ARC4
+ select WOLFSSL_HAS_DES3
+ select WOLFSSL_HAS_DH
+ select WOLFSSL_HAS_ECC
+ select WOLFSSL_HAS_OCSP
+ select WOLFSSL_HAS_PSK
+ select WOLFSSL_HAS_SESSION_TICKET
+ select WOLFSSL_HAS_WPAS
+
endchoice
config WPA_RFKILL_SUPPORT
diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile
index ed9bcfc3d9..933ad9a231 100644
--- a/package/network/services/hostapd/Makefile
+++ b/package/network/services/hostapd/Makefile
@@ -7,13 +7,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=hostapd
-PKG_RELEASE:=5
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://w1.fi/hostap.git
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2018-04-09
-PKG_SOURCE_VERSION:=fa617ee6a0b2d39e6372c93ef9437caa3bd9065a
-PKG_MIRROR_HASH:=5e6f20153c3405ac905f89fea8a614a57e9ba19583b2de2777179381a74aa7b1
+PKG_SOURCE_DATE:=2018-05-21
+PKG_SOURCE_VERSION:=62566bc23d041e88f8e35933d5fd8c2fd0f7cf2a
+PKG_MIRROR_HASH:=f234b24f9471ae9cb34460feec6d6614641691544101535673595272c91448eb
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
PKG_LICENSE:=BSD-3-Clause
@@ -47,7 +47,13 @@ ifneq ($(LOCAL_TYPE),hostapd)
ifeq ($(LOCAL_VARIANT),full)
PKG_CONFIG_DEPENDS += \
CONFIG_WPA_SUPPLICANT_INTERNAL \
- CONFIG_WPA_SUPPLICANT_OPENSSL
+ CONFIG_WPA_SUPPLICANT_OPENSSL \
+ CONFIG_WPA_SUPPLICANT_WOLFSSL
+ endif
+ ifeq ($(LOCAL_VARIANT),mesh)
+ PKG_CONFIG_DEPENDS += \
+ CONFIG_WPA_SUPPLICANT_OPENSSL \
+ CONFIG_WPA_SUPPLICANT_WOLFSSL
endif
endif
@@ -83,10 +89,23 @@ ifneq ($(LOCAL_TYPE),hostapd)
TARGET_LDFLAGS += -lcrypto -lssl
endif
endif
+ ifdef CONFIG_WPA_SUPPLICANT_WOLFSSL
+ ifeq ($(LOCAL_VARIANT),full)
+ DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1
+ TARGET_LDFLAGS += -lwolfssl
+ endif
+ endif
+
ifeq ($(LOCAL_VARIANT),mesh)
- DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
- TARGET_LDFLAGS += -lcrypto -lssl
+ ifndef CONFIG_WPA_SUPPLICANT_WOLFSSL
+ DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
+ TARGET_LDFLAGS += -lcrypto -lssl
+ else
+ DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1 CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
+ TARGET_LDFLAGS += -lwolfssl
+ endif
endif
+
ifdef CONFIG_WPA_SUPPLICANT_NO_TIMESTAMP_CHECK
TARGET_CFLAGS += -DNO_TIMESTAMP_CHECK
endif
@@ -157,7 +176,7 @@ endef
define Package/wpad
$(call Package/wpad/Default)
TITLE+= (full)
- DEPENDS+=+WPA_SUPPLICANT_OPENSSL:libopenssl
+ DEPENDS+=+WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl
VARIANT:=wpad-full
endef
@@ -179,7 +198,7 @@ endef
define Package/wpad-mesh
$(call Package/wpad/Default)
TITLE+= (with 802.11s mesh and SAE support)
- DEPENDS:=$(DRV_DEPENDS) +libubus +PACKAGE_wpad-mesh:libopenssl @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
+ DEPENDS:=$(DRV_DEPENDS) +libubus +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_INTERNAL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
VARIANT:=wpad-mesh
endef
@@ -192,7 +211,7 @@ define Package/wpa-supplicant
CATEGORY:=Network
TITLE:=WPA Supplicant
URL:=http://hostap.epitest.fi/wpa_supplicant/
- DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl
+ DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl
CONFLICTS:=wpad wpad-mini wpad-mesh
VARIANT:=supplicant-full
endef
@@ -212,7 +231,7 @@ endef
define Package/wpa-supplicant-mesh
$(Package/wpa-supplicant)
TITLE:=WPA Supplicant (with 802.11s and SAE)
- DEPENDS:=$(DRV_DEPENDS) +PACKAGE_wpa-supplicant-mesh:libopenssl @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
+ DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_INTERNAL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
CONFLICTS:=wpad wpad-mesh wpad-mesh
VARIANT:=supplicant-mesh
endef
@@ -243,7 +262,7 @@ define Package/eapol-test
SECTION:=net
CATEGORY:=Network
VARIANT:=supplicant-full
- DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl
+ DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl
endef
diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
index 4deb0b97ae..7ffff4e7e1 100644
--- a/package/network/services/hostapd/files/hostapd.sh
+++ b/package/network/services/hostapd/files/hostapd.sh
@@ -688,11 +688,12 @@ wpa_supplicant_add_network() {
}
[[ "$_w_mode" = "mesh" ]] && {
- json_get_vars mesh_id mesh_fwding
+ json_get_vars mesh_id mesh_fwding mesh_rssi_threshold
[ -n "$mesh_id" ] && ssid="${mesh_id}"
append network_data "mode=5" "$N$T"
[ -n "$mesh_fwding" ] && append network_data "mesh_fwding=${mesh_fwding}" "$N$T"
+ [ -n "$mesh_rssi_threshold" ] && append network_data "mesh_rssi_threshold=${mesh_rssi_threshold}" "$N$T"
[ -n "$freq" ] && wpa_supplicant_set_fixed_freq "$freq" "$htmode"
[ "$noscan" = "1" ] && append network_data "noscan=1" "$N$T"
append wpa_key_mgmt "SAE"
diff --git a/package/network/services/hostapd/patches/0001-Revert-wpa_supplicant-Increase-authentication-timeou.patch b/package/network/services/hostapd/patches/0001-Revert-wpa_supplicant-Increase-authentication-timeou.patch
new file mode 100644
index 0000000000..8d9cd456d5
--- /dev/null
+++ b/package/network/services/hostapd/patches/0001-Revert-wpa_supplicant-Increase-authentication-timeou.patch
@@ -0,0 +1,185 @@
+From 8a6a7112e5b1391018531f6b6c317f8870e0fcb6 Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel@makrotopia.org>
+Date: Thu, 3 May 2018 13:12:28 +0200
+Subject: [PATCH 1/2] Revert "wpa_supplicant: Increase authentication timeout
+ if CAC is started"
+
+This reverts commit 37547ad63c9df61ce6899675028594da2527efef.
+---
+ wpa_supplicant/events.c | 95 ++++---------------------------
+ wpa_supplicant/wpa_supplicant.c | 20 -------
+ wpa_supplicant/wpa_supplicant_i.h | 3 -
+ 3 files changed, 10 insertions(+), 108 deletions(-)
+
+--- a/wpa_supplicant/events.c
++++ b/wpa_supplicant/events.c
+@@ -3776,81 +3776,6 @@ static void wpa_supplicant_event_port_au
+ }
+
+
+-static unsigned int wpas_event_cac_ms(const struct wpa_supplicant *wpa_s,
+- int freq)
+-{
+- size_t i;
+- int j;
+-
+- for (i = 0; i < wpa_s->hw.num_modes; i++) {
+- const struct hostapd_hw_modes *mode = &wpa_s->hw.modes[i];
+-
+- for (j = 0; j < mode->num_channels; j++) {
+- const struct hostapd_channel_data *chan;
+-
+- chan = &mode->channels[j];
+- if (chan->freq == freq)
+- return chan->dfs_cac_ms;
+- }
+- }
+-
+- return 0;
+-}
+-
+-
+-static void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar)
+-{
+-#if defined(NEED_AP_MLME) && defined(CONFIG_AP)
+- if (wpa_s->ap_iface) {
+- wpas_ap_event_dfs_cac_started(wpa_s, radar);
+- } else
+-#endif /* NEED_AP_MLME && CONFIG_AP */
+- {
+- unsigned int cac_time = wpas_event_cac_ms(wpa_s, radar->freq);
+-
+- cac_time /= 1000; /* convert from ms to sec */
+- if (!cac_time)
+- cac_time = 10 * 60; /* max timeout: 10 minutes */
+-
+- /* Restart auth timeout: CAC time added to initial timeout */
+- wpas_auth_timeout_restart(wpa_s, cac_time);
+- }
+-}
+-
+-
+-static void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar)
+-{
+-#if defined(NEED_AP_MLME) && defined(CONFIG_AP)
+- if (wpa_s->ap_iface) {
+- wpas_ap_event_dfs_cac_finished(wpa_s, radar);
+- } else
+-#endif /* NEED_AP_MLME && CONFIG_AP */
+- {
+- /* Restart auth timeout with original value after CAC is
+- * finished */
+- wpas_auth_timeout_restart(wpa_s, 0);
+- }
+-}
+-
+-
+-static void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar)
+-{
+-#if defined(NEED_AP_MLME) && defined(CONFIG_AP)
+- if (wpa_s->ap_iface) {
+- wpas_ap_event_dfs_cac_aborted(wpa_s, radar);
+- } else
+-#endif /* NEED_AP_MLME && CONFIG_AP */
+- {
+- /* Restart auth timeout with original value after CAC is
+- * aborted */
+- wpas_auth_timeout_restart(wpa_s, 0);
+- }
+-}
+-
+-
+ static void wpa_supplicant_event_assoc_auth(struct wpa_supplicant *wpa_s,
+ union wpa_event_data *data)
+ {
+@@ -4298,25 +4223,25 @@ void wpa_supplicant_event(void *ctx, enu
+ wpas_ap_event_dfs_radar_detected(wpa_s,
+ &data->dfs_event);
+ break;
+- case EVENT_DFS_NOP_FINISHED:
+- if (data)
+- wpas_ap_event_dfs_cac_nop_finished(wpa_s,
+- &data->dfs_event);
+- break;
+-#endif /* NEED_AP_MLME */
+-#endif /* CONFIG_AP */
+ case EVENT_DFS_CAC_STARTED:
+ if (data)
+- wpas_event_dfs_cac_started(wpa_s, &data->dfs_event);
++ wpas_ap_event_dfs_cac_started(wpa_s, &data->dfs_event);
+ break;
+ case EVENT_DFS_CAC_FINISHED:
+ if (data)
+- wpas_event_dfs_cac_finished(wpa_s, &data->dfs_event);
++ wpas_ap_event_dfs_cac_finished(wpa_s, &data->dfs_event);
+ break;
+ case EVENT_DFS_CAC_ABORTED:
+ if (data)
+- wpas_event_dfs_cac_aborted(wpa_s, &data->dfs_event);
++ wpas_ap_event_dfs_cac_aborted(wpa_s, &data->dfs_event);
++ break;
++ case EVENT_DFS_NOP_FINISHED:
++ if (data)
++ wpas_ap_event_dfs_cac_nop_finished(wpa_s,
++ &data->dfs_event);
+ break;
++#endif /* NEED_AP_MLME */
++#endif /* CONFIG_AP */
+ case EVENT_RX_MGMT: {
+ u16 fc, stype;
+ const struct ieee80211_mgmt *mgmt;
+--- a/wpa_supplicant/wpa_supplicant.c
++++ b/wpa_supplicant/wpa_supplicant.c
+@@ -243,30 +243,10 @@ void wpa_supplicant_req_auth_timeout(str
+ wpa_dbg(wpa_s, MSG_DEBUG, "Setting authentication timeout: %d sec "
+ "%d usec", sec, usec);
+ eloop_cancel_timeout(wpa_supplicant_timeout, wpa_s, NULL);
+- wpa_s->last_auth_timeout_sec = sec;
+ eloop_register_timeout(sec, usec, wpa_supplicant_timeout, wpa_s, NULL);
+ }
+
+
+-/*
+- * wpas_auth_timeout_restart - Restart and change timeout for authentication
+- * @wpa_s: Pointer to wpa_supplicant data
+- * @sec_diff: difference in seconds applied to original timeout value
+- */
+-void wpas_auth_timeout_restart(struct wpa_supplicant *wpa_s, int sec_diff)
+-{
+- int new_sec = wpa_s->last_auth_timeout_sec + sec_diff;
+-
+- if (eloop_is_timeout_registered(wpa_supplicant_timeout, wpa_s, NULL)) {
+- wpa_dbg(wpa_s, MSG_DEBUG,
+- "Authentication timeout restart: %d sec", new_sec);
+- eloop_cancel_timeout(wpa_supplicant_timeout, wpa_s, NULL);
+- eloop_register_timeout(new_sec, 0, wpa_supplicant_timeout,
+- wpa_s, NULL);
+- }
+-}
+-
+-
+ /**
+ * wpa_supplicant_cancel_auth_timeout - Cancel authentication timeout
+ * @wpa_s: Pointer to wpa_supplicant data
+--- a/wpa_supplicant/wpa_supplicant_i.h
++++ b/wpa_supplicant/wpa_supplicant_i.h
+@@ -1182,8 +1182,6 @@ struct wpa_supplicant {
+ /* RIC elements for FT protocol */
+ struct wpabuf *ric_ies;
+
+- int last_auth_timeout_sec;
+-
+ #ifdef CONFIG_DPP
+ struct dl_list dpp_bootstrap; /* struct dpp_bootstrap_info */
+ struct dl_list dpp_configurator; /* struct dpp_configurator */
+@@ -1258,7 +1256,6 @@ void wpa_supplicant_initiate_eapol(struc
+ void wpa_clear_keys(struct wpa_supplicant *wpa_s, const u8 *addr);
+ void wpa_supplicant_req_auth_timeout(struct wpa_supplicant *wpa_s,
+ int sec, int usec);
+-void wpas_auth_timeout_restart(struct wpa_supplicant *wpa_s, int sec_diff);
+ void wpa_supplicant_reinit_autoscan(struct wpa_supplicant *wpa_s);
+ void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
+ enum wpa_states state);
diff --git a/package/network/services/hostapd/patches/0002-Revert-wpa_supplicant-Rename-wpas_event_-to-wpas_ap_.patch b/package/network/services/hostapd/patches/0002-Revert-wpa_supplicant-Rename-wpas_event_-to-wpas_ap_.patch
new file mode 100644
index 0000000000..281bb5bba4
--- /dev/null
+++ b/package/network/services/hostapd/patches/0002-Revert-wpa_supplicant-Rename-wpas_event_-to-wpas_ap_.patch
@@ -0,0 +1,132 @@
+From 0d4900ccd1c7ec5c5ffecf5040f9c07a6a32deef Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel@makrotopia.org>
+Date: Thu, 3 May 2018 13:12:35 +0200
+Subject: [PATCH 2/2] Revert "wpa_supplicant: Rename wpas_event_*() to
+ wpas_ap_event_*()"
+
+This reverts commit 2dd5fbbff884af488870a37e339b4817c83954de.
+---
+ wpa_supplicant/ap.c | 20 ++++++++++----------
+ wpa_supplicant/ap.h | 18 +++++++++---------
+ wpa_supplicant/events.c | 13 ++++++-------
+ 3 files changed, 25 insertions(+), 26 deletions(-)
+
+--- a/wpa_supplicant/ap.c
++++ b/wpa_supplicant/ap.c
+@@ -1537,8 +1537,8 @@ int wpas_ap_pmksa_cache_add_external(str
+
+
+ #ifdef NEED_AP_MLME
+-void wpas_ap_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar)
++void wpas_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
++ struct dfs_event *radar)
+ {
+ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+ return;
+@@ -1550,8 +1550,8 @@ void wpas_ap_event_dfs_radar_detected(st
+ }
+
+
+-void wpas_ap_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar)
++void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
++ struct dfs_event *radar)
+ {
+ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+ return;
+@@ -1562,8 +1562,8 @@ void wpas_ap_event_dfs_cac_started(struc
+ }
+
+
+-void wpas_ap_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar)
++void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
++ struct dfs_event *radar)
+ {
+ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+ return;
+@@ -1574,8 +1574,8 @@ void wpas_ap_event_dfs_cac_finished(stru
+ }
+
+
+-void wpas_ap_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar)
++void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
++ struct dfs_event *radar)
+ {
+ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+ return;
+@@ -1586,8 +1586,8 @@ void wpas_ap_event_dfs_cac_aborted(struc
+ }
+
+
+-void wpas_ap_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar)
++void wpas_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
++ struct dfs_event *radar)
+ {
+ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+ return;
+--- a/wpa_supplicant/ap.h
++++ b/wpa_supplicant/ap.h
+@@ -89,16 +89,16 @@ int wpas_ap_pmksa_cache_list_mesh(struct
+ char *buf, size_t len);
+ int wpas_ap_pmksa_cache_add_external(struct wpa_supplicant *wpa_s, char *cmd);
+
+-void wpas_ap_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar);
+-void wpas_ap_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
++void wpas_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
+ struct dfs_event *radar);
+-void wpas_ap_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar);
+-void wpas_ap_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar);
+-void wpas_ap_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
+- struct dfs_event *radar);
++void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
++ struct dfs_event *radar);
++void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
++ struct dfs_event *radar);
++void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
++ struct dfs_event *radar);
++void wpas_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
++ struct dfs_event *radar);
+
+ void ap_periodic(struct wpa_supplicant *wpa_s);
+
+--- a/wpa_supplicant/events.c
++++ b/wpa_supplicant/events.c
+@@ -4220,25 +4220,24 @@ void wpa_supplicant_event(void *ctx, enu
+ #ifdef NEED_AP_MLME
+ case EVENT_DFS_RADAR_DETECTED:
+ if (data)
+- wpas_ap_event_dfs_radar_detected(wpa_s,
+- &data->dfs_event);
++ wpas_event_dfs_radar_detected(wpa_s, &data->dfs_event);
+ break;
+ case EVENT_DFS_CAC_STARTED:
+ if (data)
+- wpas_ap_event_dfs_cac_started(wpa_s, &data->dfs_event);
++ wpas_event_dfs_cac_started(wpa_s, &data->dfs_event);
+ break;
+ case EVENT_DFS_CAC_FINISHED:
+ if (data)
+- wpas_ap_event_dfs_cac_finished(wpa_s, &data->dfs_event);
++ wpas_event_dfs_cac_finished(wpa_s, &data->dfs_event);
+ break;
+ case EVENT_DFS_CAC_ABORTED:
+ if (data)
+- wpas_ap_event_dfs_cac_aborted(wpa_s, &data->dfs_event);
++ wpas_event_dfs_cac_aborted(wpa_s, &data->dfs_event);
+ break;
+ case EVENT_DFS_NOP_FINISHED:
+ if (data)
+- wpas_ap_event_dfs_cac_nop_finished(wpa_s,
+- &data->dfs_event);
++ wpas_event_dfs_cac_nop_finished(wpa_s,
++ &data->dfs_event);
+ break;
+ #endif /* NEED_AP_MLME */
+ #endif /* CONFIG_AP */
diff --git a/package/network/services/hostapd/patches/0101-mesh-factor-out-mesh-join-function.patch b/package/network/services/hostapd/patches/001-mesh-factor-out-mesh-join-function.patch
index 7671d1e96c..e6278676f0 100644
--- a/package/network/services/hostapd/patches/0101-mesh-factor-out-mesh-join-function.patch
+++ b/package/network/services/hostapd/patches/001-mesh-factor-out-mesh-join-function.patch
@@ -1,7 +1,7 @@
-From 91c0f3f6a9ecae3c9106bef8a8606fab0792dd28 Mon Sep 17 00:00:00 2001
+From 032e70833de4b251fc4a159b2cc4ef28d0f1df0d Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:48:58 -0700
-Subject: [PATCH 01/15] mesh: factor out mesh join function
+Date: Tue, 17 Apr 2018 21:54:58 -0700
+Subject: [PATCH 01/16] mesh: factor out mesh join function
mesh join function consitss of 2 parts which are preparing
configurations and sending join event to driver.
@@ -12,22 +12,14 @@ into 2 parts to reduce redundant calls.
Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
---
- wpa_supplicant/mesh.c | 120 ++++++++++++++++--------------
+ wpa_supplicant/mesh.c | 119 ++++++++++++++++--------------
wpa_supplicant/mesh.h | 1 +
wpa_supplicant/wpa_supplicant_i.h | 1 +
- 3 files changed, 68 insertions(+), 54 deletions(-)
+ 3 files changed, 67 insertions(+), 54 deletions(-)
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -25,6 +25,7 @@
- #include "mesh_mpm.h"
- #include "mesh_rsn.h"
- #include "mesh.h"
-+#include "drivers/driver_nl80211.h"
-
-
- static void wpa_supplicant_mesh_deinit(struct wpa_supplicant *wpa_s)
-@@ -359,13 +360,48 @@ void wpa_supplicant_mesh_add_scan_ie(str
+@@ -363,13 +363,48 @@ void wpa_supplicant_mesh_add_scan_ie(str
}
@@ -78,7 +70,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
ret = -ENOENT;
goto out;
}
-@@ -376,22 +412,22 @@ int wpa_supplicant_join_mesh(struct wpa_
+@@ -380,22 +415,22 @@ int wpa_supplicant_join_mesh(struct wpa_
wpa_s->group_cipher = WPA_CIPHER_NONE;
wpa_s->mgmt_group_cipher = 0;
@@ -112,7 +104,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
} else {
ssid->max_oper_chwidth = VHT_CHANWIDTH_80MHZ;
}
-@@ -405,67 +441,43 @@ int wpa_supplicant_join_mesh(struct wpa_
+@@ -409,67 +444,43 @@ int wpa_supplicant_join_mesh(struct wpa_
}
}
if (ssid->beacon_int > 0)
diff --git a/package/network/services/hostapd/patches/0102-mesh-factor-out-rsn-initialization.patch b/package/network/services/hostapd/patches/002-mesh-factor-out-rsn-initialization.patch
index 75717a50e0..322f1c16ea 100644
--- a/package/network/services/hostapd/patches/0102-mesh-factor-out-rsn-initialization.patch
+++ b/package/network/services/hostapd/patches/002-mesh-factor-out-rsn-initialization.patch
@@ -1,7 +1,7 @@
-From 04ebcadc059a6cfd45cd8ec06e6321b69bdb68b8 Mon Sep 17 00:00:00 2001
+From 6da64b1e056e0b1be18b6ab37c820acb4a0f3cf4 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:48:59 -0700
-Subject: [PATCH 02/15] mesh: factor out rsn initialization
+Date: Tue, 17 Apr 2018 21:54:59 -0700
+Subject: [PATCH 02/16] mesh: factor out rsn initialization
RSN initialization can be used in different phases
if mesh initialization and mesh join don't happen
@@ -10,16 +10,16 @@ hence factor it out to help convering the case.
Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
---
- wpa_supplicant/mesh.c | 73 ++++++++++++++++++++++++++-----------------
+ wpa_supplicant/mesh.c | 84 +++++++++++++++++++++++++------------------
wpa_supplicant/mesh.h | 1 +
- 2 files changed, 45 insertions(+), 29 deletions(-)
+ 2 files changed, 50 insertions(+), 35 deletions(-)
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -147,6 +147,48 @@ static void wpas_mesh_copy_groups(struct
- groups_size);
+@@ -147,6 +147,53 @@ static void wpas_mesh_copy_groups(struct
}
+
+int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s)
+{
+ struct hostapd_iface *ifmsh = wpa_s->ifmsh;
@@ -27,10 +27,14 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
+ struct wpa_ssid *ssid = wpa_s->current_ssid;
+ struct hostapd_data *bss = ifmsh->bss[0];
+ static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
++ const char *password;
+ size_t len;
+
+ if (mconf->security != MESH_CONF_SEC_NONE) {
-+ if (ssid->passphrase == NULL) {
++ password = ssid->sae_password;
++ if (!password)
++ password = ssid->passphrase;
++ if (!password) {
+ wpa_printf(MSG_ERROR,
+ "mesh: Passphrase for SAE not configured");
+ return -1;
@@ -50,9 +54,9 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
+ return -1;
+ }
+
-+ len = os_strlen(ssid->passphrase);
++ len = os_strlen(password);
+ bss->conf->ssid.wpa_passphrase =
-+ dup_binstr(ssid->passphrase, len);
++ dup_binstr(password, len);
+
+ wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf);
+ if (!wpa_s->mesh_rsn)
@@ -62,15 +66,29 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
+ return 0;
+}
+
-
++
static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
struct wpa_ssid *ssid,
-@@ -291,35 +333,8 @@ static int wpa_supplicant_mesh_init(stru
+ struct hostapd_freq_params *freq)
+@@ -156,9 +203,6 @@ static int wpa_supplicant_mesh_init(stru
+ struct hostapd_config *conf;
+ struct mesh_conf *mconf;
+ int basic_rates_erp[] = { 10, 20, 55, 60, 110, 120, 240, -1 };
+- static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
+- const char *password;
+- size_t len;
+ int rate_len;
+ int frequency;
+
+@@ -291,38 +335,8 @@ static int wpa_supplicant_mesh_init(stru
return -1;
}
- if (mconf->security != MESH_CONF_SEC_NONE) {
-- if (ssid->passphrase == NULL) {
+- password = ssid->sae_password;
+- if (!password)
+- password = ssid->passphrase;
+- if (!password) {
- wpa_printf(MSG_ERROR,
- "mesh: Passphrase for SAE not configured");
- goto out_free;
@@ -90,9 +108,9 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
- goto out_free;
- }
-
-- len = os_strlen(ssid->passphrase);
+- len = os_strlen(password);
- bss->conf->ssid.wpa_passphrase =
-- dup_binstr(ssid->passphrase, len);
+- dup_binstr(password, len);
-
- wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf);
- if (!wpa_s->mesh_rsn)
diff --git a/package/network/services/hostapd/patches/0103-mesh-relocate-RSN-init-function.patch b/package/network/services/hostapd/patches/003-mesh-relocate-RSN-init-function.patch
index 153e9b2c67..95b5b16a93 100644
--- a/package/network/services/hostapd/patches/0103-mesh-relocate-RSN-init-function.patch
+++ b/package/network/services/hostapd/patches/003-mesh-relocate-RSN-init-function.patch
@@ -1,7 +1,7 @@
-From cbe8b9901f9cc254cbaa1ec1cee1c52af8f828bf Mon Sep 17 00:00:00 2001
+From 95425b5becaeda8a515c942f417696e5df34bbc8 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:00 -0700
-Subject: [PATCH 03/15] mesh: relocate RSN init function
+Date: Tue, 17 Apr 2018 21:55:00 -0700
+Subject: [PATCH 03/16] mesh: relocate RSN init function
RSN init function should work together with mesh join
when it's used. Since mesh join could be called at different stage
@@ -16,7 +16,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -333,9 +333,6 @@ static int wpa_supplicant_mesh_init(stru
+@@ -335,9 +335,6 @@ static int wpa_supplicant_mesh_init(stru
return -1;
}
@@ -26,7 +26,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf);
return 0;
-@@ -381,6 +378,12 @@ void wpas_join_mesh(struct wpa_supplican
+@@ -383,6 +380,12 @@ void wpas_join_mesh(struct wpa_supplican
struct wpa_ssid *ssid = wpa_s->current_ssid;
int ret = 0;
diff --git a/package/network/services/hostapd/patches/0104-mesh-use-setup-completion-callback-to-complete-mesh-.patch b/package/network/services/hostapd/patches/004-mesh-use-setup-completion-callback-to-complete-mesh-.patch
index 8927d5ca8b..14e18322f6 100644
--- a/package/network/services/hostapd/patches/0104-mesh-use-setup-completion-callback-to-complete-mesh-.patch
+++ b/package/network/services/hostapd/patches/004-mesh-use-setup-completion-callback-to-complete-mesh-.patch
@@ -1,7 +1,7 @@
-From 8a4ebbb6bbbc1460c1d584d1a710bf1361797ffd Mon Sep 17 00:00:00 2001
+From 32044a7bb26858bedaf147c77f49f5cef1133de3 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:01 -0700
-Subject: [PATCH 04/15] mesh: use setup completion callback to complete mesh
+Date: Tue, 17 Apr 2018 21:55:01 -0700
+Subject: [PATCH 04/16] mesh: use setup completion callback to complete mesh
join
mesh join function is the last function to be called during
@@ -24,7 +24,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -215,6 +215,7 @@ static int wpa_supplicant_mesh_init(stru
+@@ -217,6 +217,7 @@ static int wpa_supplicant_mesh_init(stru
if (!ifmsh)
return -ENOMEM;
@@ -32,7 +32,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
ifmsh->drv_flags = wpa_s->drv_flags;
ifmsh->num_bss = 1;
ifmsh->bss = os_calloc(wpa_s->ifmsh->num_bss,
-@@ -231,6 +232,8 @@ static int wpa_supplicant_mesh_init(stru
+@@ -233,6 +234,8 @@ static int wpa_supplicant_mesh_init(stru
bss->drv_priv = wpa_s->drv_priv;
bss->iface = ifmsh;
bss->mesh_sta_free_cb = mesh_mpm_free_sta;
@@ -41,7 +41,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
frequency = ssid->frequency;
if (frequency != freq->freq &&
frequency == freq->freq + freq->sec_channel_offset * 20) {
-@@ -372,8 +375,9 @@ void wpa_supplicant_mesh_add_scan_ie(str
+@@ -374,8 +377,9 @@ void wpa_supplicant_mesh_add_scan_ie(str
}
@@ -52,7 +52,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params;
struct wpa_ssid *ssid = wpa_s->current_ssid;
int ret = 0;
-@@ -495,7 +499,6 @@ int wpa_supplicant_join_mesh(struct wpa_
+@@ -497,7 +501,6 @@ int wpa_supplicant_join_mesh(struct wpa_
goto out;
}
diff --git a/package/network/services/hostapd/patches/0105-mesh-reflect-country-setting-to-mesh-configuration.patch b/package/network/services/hostapd/patches/005-mesh-reflect-country-setting-to-mesh-configuration.patch
index ba69478839..7d4f53c452 100644
--- a/package/network/services/hostapd/patches/0105-mesh-reflect-country-setting-to-mesh-configuration.patch
+++ b/package/network/services/hostapd/patches/005-mesh-reflect-country-setting-to-mesh-configuration.patch
@@ -1,7 +1,7 @@
-From e223e851cbe776029a2768b56e7aa1a9f2873d09 Mon Sep 17 00:00:00 2001
+From e2f13b1fac9799db83a37fc57df9471d9bb5b711 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:02 -0700
-Subject: [PATCH 05/15] mesh: reflect country setting to mesh configuration
+Date: Tue, 17 Apr 2018 21:55:02 -0700
+Subject: [PATCH 05/16] mesh: reflect country setting to mesh configuration
wpa_supplicant configuration has country parameter that is
supposed to be used in AP mode to indicate supporting 802.11h
@@ -15,12 +15,13 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -252,6 +252,14 @@ static int wpa_supplicant_mesh_init(stru
+@@ -254,6 +254,15 @@ static int wpa_supplicant_mesh_init(stru
bss->conf->start_disabled = 1;
bss->conf->mesh = MESH_ENABLED;
bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity;
+
-+ if (ieee80211_is_dfs(ssid->frequency) && wpa_s->conf->country[0]) {
++ if (ieee80211_is_dfs(ssid->frequency, wpa_s->hw.modes,
++ wpa_s->hw.num_modes) && wpa_s->conf->country[0]) {
+ conf->ieee80211h = 1;
+ conf->ieee80211d = 1;
+ conf->country[0] = wpa_s->conf->country[0];
diff --git a/package/network/services/hostapd/patches/0106-mesh-inform-kernel-driver-DFS-handler-in-userspace.patch b/package/network/services/hostapd/patches/006-mesh-inform-kernel-driver-DFS-handler-in-userspace.patch
index 66b956fecf..6b51217f62 100644
--- a/package/network/services/hostapd/patches/0106-mesh-inform-kernel-driver-DFS-handler-in-userspace.patch
+++ b/package/network/services/hostapd/patches/006-mesh-inform-kernel-driver-DFS-handler-in-userspace.patch
@@ -1,7 +1,7 @@
-From c7f107e52205dd5fdb20f7ae13413b3673b0547e Mon Sep 17 00:00:00 2001
+From 37bf08621eee53f30b464be71876c02e235077ba Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:03 -0700
-Subject: [PATCH 06/15] mesh: inform kernel driver DFS handler in userspace
+Date: Tue, 17 Apr 2018 21:55:03 -0700
+Subject: [PATCH 06/16] mesh: inform kernel driver DFS handler in userspace
NL80211_ATTR_HANDLE_DFS is required by kerenel space
to enable DFS channels that indicates DFS handler
@@ -26,7 +26,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
/**
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
-@@ -9244,6 +9244,9 @@ static int nl80211_join_mesh(struct i802
+@@ -9270,6 +9270,9 @@ static int nl80211_join_mesh(struct i802
wpa_printf(MSG_DEBUG, " * flags=%08X", params->flags);
@@ -38,7 +38,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
goto fail;
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -258,6 +258,7 @@ static int wpa_supplicant_mesh_init(stru
+@@ -261,6 +261,7 @@ static int wpa_supplicant_mesh_init(stru
conf->ieee80211d = 1;
conf->country[0] = wpa_s->conf->country[0];
conf->country[1] = wpa_s->conf->country[1];
diff --git a/package/network/services/hostapd/patches/0107-mesh-apply-channel-attributes-before-running-Mesh.patch b/package/network/services/hostapd/patches/007-mesh-apply-channel-attributes-before-running-Mesh.patch
index 9c8b2b9487..86da251ffa 100644
--- a/package/network/services/hostapd/patches/0107-mesh-apply-channel-attributes-before-running-Mesh.patch
+++ b/package/network/services/hostapd/patches/007-mesh-apply-channel-attributes-before-running-Mesh.patch
@@ -1,7 +1,7 @@
-From a0c5eea22d5d1181dbe0861b24e4b9bb598f4e50 Mon Sep 17 00:00:00 2001
+From 8190aab3344ae9746c897093f88f3679239d135d Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:04 -0700
-Subject: [PATCH 07/15] mesh: apply channel attributes before running Mesh
+Date: Tue, 17 Apr 2018 21:55:04 -0700
+Subject: [PATCH 07/16] mesh: apply channel attributes before running Mesh
This helps mesh interface initializes with correct
channel parameters.
@@ -13,7 +13,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -334,6 +334,8 @@ static int wpa_supplicant_mesh_init(stru
+@@ -337,6 +337,8 @@ static int wpa_supplicant_mesh_init(stru
conf->basic_rates[rate_len] = -1;
}
@@ -22,7 +22,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
if (hostapd_setup_interface(ifmsh)) {
wpa_printf(MSG_ERROR,
"Failed to initialize hostapd interface for mesh");
-@@ -345,8 +347,6 @@ static int wpa_supplicant_mesh_init(stru
+@@ -348,8 +350,6 @@ static int wpa_supplicant_mesh_init(stru
return -1;
}
diff --git a/package/network/services/hostapd/patches/0108-mesh-set-interface-type-to-mesh-before-setting-inter.patch b/package/network/services/hostapd/patches/008-mesh-set-interface-type-to-mesh-before-setting-inter.patch
index da47aa8d2c..ee25a50a59 100644
--- a/package/network/services/hostapd/patches/0108-mesh-set-interface-type-to-mesh-before-setting-inter.patch
+++ b/package/network/services/hostapd/patches/008-mesh-set-interface-type-to-mesh-before-setting-inter.patch
@@ -1,7 +1,7 @@
-From 143809f1e60f749a5a5c72735ffa8eb99d602cc1 Mon Sep 17 00:00:00 2001
+From e001251cb5708c406d477eca6aa912e5692b17fe Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:05 -0700
-Subject: [PATCH 08/15] mesh: set interface type to mesh before setting
+Date: Tue, 17 Apr 2018 21:55:05 -0700
+Subject: [PATCH 08/16] mesh: set interface type to mesh before setting
interface
Correct interface type is required to start DFS CAC that can be
@@ -14,7 +14,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -336,14 +336,14 @@ static int wpa_supplicant_mesh_init(stru
+@@ -339,14 +339,14 @@ static int wpa_supplicant_mesh_init(stru
wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf);
diff --git a/package/network/services/hostapd/patches/0109-mesh-set-mesh-center-frequency.patch b/package/network/services/hostapd/patches/009-mesh-set-mesh-center-frequency.patch
index ac5e7d3891..bbd8d42dc1 100644
--- a/package/network/services/hostapd/patches/0109-mesh-set-mesh-center-frequency.patch
+++ b/package/network/services/hostapd/patches/009-mesh-set-mesh-center-frequency.patch
@@ -1,7 +1,7 @@
-From 4347c97600f4484be8df804dfb5ed85b867d3c43 Mon Sep 17 00:00:00 2001
+From 3cefd0bf495ad51a860b56281a8cae32bc4bd086 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:06 -0700
-Subject: [PATCH 09/15] mesh: set mesh center frequency
+Date: Tue, 17 Apr 2018 21:55:06 -0700
+Subject: [PATCH 09/16] mesh: set mesh center frequency
vht center frequency value is required to compose the correct channel info.
@@ -12,7 +12,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -453,6 +453,7 @@ int wpa_supplicant_join_mesh(struct wpa_
+@@ -456,6 +456,7 @@ int wpa_supplicant_join_mesh(struct wpa_
if (wpa_s->mesh_vht_enabled) {
ssid->vht = 1;
diff --git a/package/network/services/hostapd/patches/0110-mesh-consider-mesh-interface-on-dfs-event-handler.patch b/package/network/services/hostapd/patches/010-mesh-consider-mesh-interface-on-dfs-event-handler.patch
index 0c78dd4324..e4711a8bdd 100644
--- a/package/network/services/hostapd/patches/0110-mesh-consider-mesh-interface-on-dfs-event-handler.patch
+++ b/package/network/services/hostapd/patches/010-mesh-consider-mesh-interface-on-dfs-event-handler.patch
@@ -1,32 +1,33 @@
-From d0a0e1030005834b99225feb64ec3794d31beab0 Mon Sep 17 00:00:00 2001
+From 90aa570a894a907d11f85ced43a248198e24acc1 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:07 -0700
-Subject: [PATCH 10/15] mesh: consider mesh interface on dfs event handler
+Date: Tue, 17 Apr 2018 21:55:07 -0700
+Subject: [PATCH 10/16] mesh: consider mesh interface on dfs event handler
Once mesh starts supporting DFS channels, it has to handle DFS related events
from drivers, hence add mesh interface to the check list.
Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
---
- wpa_supplicant/ap.c | 55 ++++++++++++++++++++++++++++++++---------
+ wpa_supplicant/ap.c | 71 ++++++++++++++++++++++++++++++-----------
wpa_supplicant/events.c | 1 +
- 2 files changed, 44 insertions(+), 12 deletions(-)
+ 2 files changed, 54 insertions(+), 18 deletions(-)
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
-@@ -1328,13 +1328,18 @@ int ap_ctrl_iface_chanswitch(struct wpa_
+@@ -1337,13 +1337,18 @@ int ap_ctrl_iface_chanswitch(struct wpa_
void wpas_ap_ch_switch(struct wpa_supplicant *wpa_s, int freq, int ht,
int offset, int width, int cf1, int cf2)
{
-+ struct hostapd_iface *iface = wpa_s->ap_iface;
-+
- if (!wpa_s->ap_iface)
+- if (!wpa_s->ap_iface)
- return;
++ struct hostapd_iface *iface = wpa_s->ap_iface;
+
++ if (!wpa_s->ap_iface) {
+ if (!wpa_s->ifmsh)
+ return;
+ else
+ iface = wpa_s->ifmsh;
-
++ }
wpa_s->assoc_freq = freq;
if (wpa_s->current_ssid)
wpa_s->current_ssid->frequency = freq;
@@ -35,91 +36,100 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
offset, width, cf1, cf2);
}
-@@ -1531,10 +1536,15 @@ int wpas_ap_pmksa_cache_add_external(str
+@@ -1540,10 +1545,16 @@ int wpas_ap_pmksa_cache_add_external(str
void wpas_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+- return;
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-- return;
++ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0]) {
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
++ }
wpa_printf(MSG_DEBUG, "DFS radar detected on %d MHz", radar->freq);
- hostapd_dfs_radar_detected(wpa_s->ap_iface, radar->freq,
+ hostapd_dfs_radar_detected(iface, radar->freq,
radar->ht_enabled, radar->chan_offset,
radar->chan_width,
radar->cf1, radar->cf2);
-@@ -1544,10 +1554,15 @@ void wpas_event_dfs_radar_detected(struc
+@@ -1553,10 +1564,16 @@ void wpas_event_dfs_radar_detected(struc
void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+- return;
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-- return;
++ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0]) {
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
++ }
wpa_printf(MSG_DEBUG, "DFS CAC started on %d MHz", radar->freq);
- hostapd_dfs_start_cac(wpa_s->ap_iface, radar->freq,
+ hostapd_dfs_start_cac(iface, radar->freq,
radar->ht_enabled, radar->chan_offset,
radar->chan_width, radar->cf1, radar->cf2);
}
-@@ -1556,10 +1571,16 @@ void wpas_event_dfs_cac_started(struct w
+@@ -1565,10 +1582,16 @@ void wpas_event_dfs_cac_started(struct w
void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+- return;
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-- return;
++ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0]) {
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
-+
++ }
wpa_printf(MSG_DEBUG, "DFS CAC finished on %d MHz", radar->freq);
- hostapd_dfs_complete_cac(wpa_s->ap_iface, 1, radar->freq,
+ hostapd_dfs_complete_cac(iface, 1, radar->freq,
radar->ht_enabled, radar->chan_offset,
radar->chan_width, radar->cf1, radar->cf2);
}
-@@ -1568,10 +1589,15 @@ void wpas_event_dfs_cac_finished(struct
+@@ -1577,10 +1600,16 @@ void wpas_event_dfs_cac_finished(struct
void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+- return;
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-- return;
++ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0]) {
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
++ }
wpa_printf(MSG_DEBUG, "DFS CAC aborted on %d MHz", radar->freq);
- hostapd_dfs_complete_cac(wpa_s->ap_iface, 0, radar->freq,
+ hostapd_dfs_complete_cac(iface, 0, radar->freq,
radar->ht_enabled, radar->chan_offset,
radar->chan_width, radar->cf1, radar->cf2);
}
-@@ -1580,10 +1606,15 @@ void wpas_event_dfs_cac_aborted(struct w
+@@ -1589,10 +1618,16 @@ void wpas_event_dfs_cac_aborted(struct w
void wpas_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
struct dfs_event *radar)
{
+- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
+- return;
+ struct hostapd_iface *iface = wpa_s->ap_iface;
+
- if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-- return;
++ if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0]) {
+ if (!wpa_s->ifmsh || !wpa_s->ifmsh->bss[0])
+ return;
+ else
+ iface = wpa_s->ifmsh;
++ }
wpa_printf(MSG_DEBUG, "DFS NOP finished on %d MHz", radar->freq);
- hostapd_dfs_nop_finished(wpa_s->ap_iface, radar->freq,
+ hostapd_dfs_nop_finished(iface, radar->freq,
@@ -128,8 +138,8 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
}
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
-@@ -4168,6 +4168,7 @@ void wpa_supplicant_event(void *ctx, enu
-
+@@ -4203,6 +4203,7 @@ void wpa_supplicant_event(void *ctx, enu
+ #ifdef CONFIG_AP
if (wpa_s->current_ssid->mode == WPAS_MODE_AP ||
wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO ||
+ wpa_s->current_ssid->mode == WPAS_MODE_MESH ||
diff --git a/package/network/services/hostapd/patches/0111-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch b/package/network/services/hostapd/patches/011-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch
index 928ba8eb91..dfd85f1575 100644
--- a/package/network/services/hostapd/patches/0111-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch
+++ b/package/network/services/hostapd/patches/011-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch
@@ -1,7 +1,7 @@
-From e7fc5d2e6b34102282ff94a6e5255af4b6e9ccb5 Mon Sep 17 00:00:00 2001
+From ce3e491e445ebea9705e76ac7ee3d4841ace1cad Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:08 -0700
-Subject: [PATCH 11/15] mesh: Allow DFS channels to be selected if dfs is
+Date: Tue, 17 Apr 2018 21:55:08 -0700
+Subject: [PATCH 11/16] mesh: Allow DFS channels to be selected if dfs is
enabled
Note: DFS is assumed to be usable if a country code has been set
diff --git a/package/network/services/hostapd/patches/0112-mesh-allow-mesh-to-send-channel-switch-request.patch b/package/network/services/hostapd/patches/012-mesh-allow-mesh-to-send-channel-switch-request.patch
index b011a3c350..39df49870c 100644
--- a/package/network/services/hostapd/patches/0112-mesh-allow-mesh-to-send-channel-switch-request.patch
+++ b/package/network/services/hostapd/patches/012-mesh-allow-mesh-to-send-channel-switch-request.patch
@@ -1,7 +1,7 @@
-From 851f67301a8b9bc96c3d8cce08e355a64d30350d Mon Sep 17 00:00:00 2001
+From 912b5c89328f1f9585e64fd13460928c71f28352 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:09 -0700
-Subject: [PATCH 12/15] mesh: allow mesh to send channel switch request
+Date: Tue, 17 Apr 2018 21:55:09 -0700
+Subject: [PATCH 12/16] mesh: allow mesh to send channel switch request
add mesh type to nl80211 channel switch request,
so mesh is able to send the request to kernel drivers.
@@ -13,7 +13,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
-@@ -8659,7 +8659,8 @@ static int nl80211_switch_channel(void *
+@@ -8685,7 +8685,8 @@ static int nl80211_switch_channel(void *
}
if ((drv->nlmode != NL80211_IFTYPE_AP) &&
diff --git a/package/network/services/hostapd/patches/0113-mesh-do-not-allow-pri-sec-channel-switch.patch b/package/network/services/hostapd/patches/013-mesh-do-not-allow-pri-sec-channel-switch.patch
index 988ccdbeb0..c98afa5148 100644
--- a/package/network/services/hostapd/patches/0113-mesh-do-not-allow-pri-sec-channel-switch.patch
+++ b/package/network/services/hostapd/patches/013-mesh-do-not-allow-pri-sec-channel-switch.patch
@@ -1,7 +1,7 @@
-From 5fe4fa1c1f426d81496458d2127bfbd7623fe5d5 Mon Sep 17 00:00:00 2001
+From d7ae7271dce4203bfcd79a230acb24f03f38633d Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:10 -0700
-Subject: [PATCH 13/15] mesh: do not allow pri/sec channel switch
+Date: Tue, 17 Apr 2018 21:55:10 -0700
+Subject: [PATCH 13/16] mesh: do not allow pri/sec channel switch
We don't want mesh to switch the channel from primary to secondary,
since mesh points are not able to join each other in that case.
@@ -13,7 +13,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -333,7 +333,10 @@ static int wpa_supplicant_mesh_init(stru
+@@ -336,7 +336,10 @@ static int wpa_supplicant_mesh_init(stru
rate_len * sizeof(int));
conf->basic_rates[rate_len] = -1;
}
diff --git a/package/network/services/hostapd/patches/0114-mesh-do-not-allow-scan-result-to-swap-pri-sec.patch b/package/network/services/hostapd/patches/014-mesh-do-not-allow-scan-result-to-swap-pri-sec.patch
index 2545cb4a1e..007f1c982b 100644
--- a/package/network/services/hostapd/patches/0114-mesh-do-not-allow-scan-result-to-swap-pri-sec.patch
+++ b/package/network/services/hostapd/patches/014-mesh-do-not-allow-scan-result-to-swap-pri-sec.patch
@@ -1,7 +1,7 @@
-From fcc5fe675d1155d65df0471aa06f746c28b66b6c Mon Sep 17 00:00:00 2001
+From cf2ba81fb307f3e87e13896f9dbf93c0c2a9eb92 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:11 -0700
-Subject: [PATCH 14/15] mesh: do not allow scan result to swap pri/sec
+Date: Tue, 17 Apr 2018 21:55:11 -0700
+Subject: [PATCH 14/16] mesh: do not allow scan result to swap pri/sec
Swapping between primary and secondary channel will break
mesh from joining, hence don't allow it.
diff --git a/package/network/services/hostapd/patches/0115-mesh-do-not-use-offchan-mgmt-tx-on-DFS.patch b/package/network/services/hostapd/patches/015-mesh-do-not-use-offchan-mgmt-tx-on-DFS.patch
index 76b4fe64c9..9d6ac82bf6 100644
--- a/package/network/services/hostapd/patches/0115-mesh-do-not-use-offchan-mgmt-tx-on-DFS.patch
+++ b/package/network/services/hostapd/patches/015-mesh-do-not-use-offchan-mgmt-tx-on-DFS.patch
@@ -1,7 +1,7 @@
-From ab2ba9fd9ac73c83dc15a6d76d93df4434d539d6 Mon Sep 17 00:00:00 2001
+From 48f31256ffebfc43d6b14b93597aa2c7e2975dc4 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Thu, 12 Apr 2018 02:49:12 -0700
-Subject: [PATCH 15/15] mesh: do not use offchan mgmt tx on DFS
+Date: Tue, 17 Apr 2018 21:55:12 -0700
+Subject: [PATCH 15/16] mesh: do not use offchan mgmt tx on DFS
Drivers don't allow mesh to use offchannel on management Tx.
@@ -12,24 +12,31 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
-@@ -7148,6 +7148,7 @@ static int wpa_driver_nl80211_send_actio
+@@ -7165,6 +7165,10 @@ static int wpa_driver_nl80211_send_actio
struct wpa_driver_nl80211_data *drv = bss->drv;
int ret = -1;
u8 *buf;
+ int offchanok = 1;
++ u16 num_modes, flags;
++ struct hostapd_hw_modes *modes;
++ u8 dfs_domain;
struct ieee80211_hdr *hdr;
wpa_printf(MSG_DEBUG, "nl80211: Send Action frame (ifindex=%d, "
-@@ -7173,6 +7174,8 @@ static int wpa_driver_nl80211_send_actio
+@@ -7190,6 +7194,12 @@ static int wpa_driver_nl80211_send_actio
os_memset(bss->rand_addr, 0, ETH_ALEN);
}
-+ if (is_mesh_interface(drv->nlmode) && ieee80211_is_dfs(freq))
++ if (is_mesh_interface(drv->nlmode) &&
++ (modes = nl80211_get_hw_feature_data(bss, &num_modes, &flags,
++ &dfs_domain)) &&
++ ieee80211_is_dfs(freq, modes, num_modes))
+ offchanok = 0;
++
if (is_ap_interface(drv->nlmode) &&
(!(drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) ||
(int) freq == bss->freq || drv->device_ap_sme ||
-@@ -7184,7 +7187,7 @@ static int wpa_driver_nl80211_send_actio
+@@ -7201,7 +7211,7 @@ static int wpa_driver_nl80211_send_actio
ret = nl80211_send_frame_cmd(bss, freq, wait_time, buf,
24 + data_len,
&drv->send_action_cookie,
diff --git a/package/network/services/hostapd/patches/021-mesh-make-forwarding-configurable.patch b/package/network/services/hostapd/patches/016-mesh-make-forwarding-configurable.patch
index 13f0deaaf0..780c6ba927 100644
--- a/package/network/services/hostapd/patches/021-mesh-make-forwarding-configurable.patch
+++ b/package/network/services/hostapd/patches/016-mesh-make-forwarding-configurable.patch
@@ -1,10 +1,7 @@
-From d11881c1ad0d6a102962d1a040a398f597256ae0 Mon Sep 17 00:00:00 2001
+From 9a01d7f21bd33725dc33325a437c3cc4185ee8bd Mon Sep 17 00:00:00 2001
From: Daniel Golle <daniel@makrotopia.org>
Date: Wed, 18 Apr 2018 19:24:31 +0200
-Subject: [PATCH] mesh: make forwarding configurable
-To: hostap@lists.infradead.org
-Cc: Jouni Malinen <j@w1.fi>,
- Johannes Berg <johannes.berg@intel.com>
+Subject: [PATCH 16/16] mesh: make forwarding configurable
Allow mesh_fwding to be specified in a mesh bss config, pass that
to the driver (only nl80211 implemented for now) and announce
@@ -16,13 +13,13 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
src/drivers/driver.h | 2 ++
src/drivers/driver_nl80211.c | 3 +++
wpa_supplicant/config.c | 4 ++++
- wpa_supplicant/config.h | 3 +++
+ wpa_supplicant/config.h | 9 +++++++++
wpa_supplicant/config_file.c | 4 ++++
wpa_supplicant/config_ssid.h | 5 +++++
wpa_supplicant/mesh.c | 6 ++++++
wpa_supplicant/mesh_mpm.c | 4 ++--
- wpa_supplicant/wpa_supplicant.conf | 6 ++++++
- 10 files changed, 37 insertions(+), 2 deletions(-)
+ wpa_supplicant/wpa_supplicant.conf | 3 +++
+ 10 files changed, 40 insertions(+), 2 deletions(-)
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -34,7 +31,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
};
#define MAX_STA_COUNT 2007
-@@ -612,6 +613,7 @@ struct hostapd_bss_config {
+@@ -618,6 +619,7 @@ struct hostapd_bss_config {
#define MESH_ENABLED BIT(0)
int mesh;
@@ -62,7 +59,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
-@@ -9197,6 +9197,9 @@ static int nl80211_put_mesh_config(struc
+@@ -9230,6 +9230,9 @@ static int nl80211_put_mesh_config(struc
if (((params->flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) &&
nla_put_u8(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS,
params->auto_plinks)) ||
@@ -82,7 +79,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
{ INT_RANGE(mesh_rssi_threshold, -255, 1) },
#else /* CONFIG_MESH */
{ INT_RANGE(mode, 0, 4) },
-@@ -2757,6 +2758,7 @@ void wpa_config_set_network_defaults(str
+@@ -2761,6 +2762,7 @@ void wpa_config_set_network_defaults(str
ssid->dot11MeshRetryTimeout = DEFAULT_MESH_RETRY_TIMEOUT;
ssid->dot11MeshConfirmTimeout = DEFAULT_MESH_CONFIRM_TIMEOUT;
ssid->dot11MeshHoldingTimeout = DEFAULT_MESH_HOLDING_TIMEOUT;
@@ -90,7 +87,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
ssid->mesh_rssi_threshold = DEFAULT_MESH_RSSI_THRESHOLD;
#endif /* CONFIG_MESH */
#ifdef CONFIG_HT_OVERRIDES
-@@ -3886,6 +3888,7 @@ struct wpa_config * wpa_config_alloc_emp
+@@ -3976,6 +3978,7 @@ struct wpa_config * wpa_config_alloc_emp
config->user_mpm = DEFAULT_USER_MPM;
config->max_peer_links = DEFAULT_MAX_PEER_LINKS;
config->mesh_max_inactivity = DEFAULT_MESH_MAX_INACTIVITY;
@@ -98,7 +95,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
config->dot11RSNASAERetransPeriod =
DEFAULT_DOT11_RSNA_SAE_RETRANS_PERIOD;
config->fast_reauth = DEFAULT_FAST_REAUTH;
-@@ -4508,6 +4511,7 @@ static const struct global_parse_data gl
+@@ -4598,6 +4601,7 @@ static const struct global_parse_data gl
{ INT(user_mpm), 0 },
{ INT_RANGE(max_peer_links, 0, 255), 0 },
{ INT(mesh_max_inactivity), 0 },
@@ -116,18 +113,24 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
/*
* The default dot11RSNASAERetransPeriod is defined as 40 ms in the standard,
* but use 1000 ms in practice to avoid issues on low power CPUs.
-@@ -1269,6 +1270,8 @@ struct wpa_config {
- */
+@@ -1306,6 +1307,14 @@ struct wpa_config {
int mesh_max_inactivity;
+ /**
++ * mesh_fwding - Mesh network layer-2 forwarding
++ *
++ * This controls whether to enable layer-2 forwarding.
++ * By default: 1: enabled
++ */
+ int mesh_fwding;
+
- /**
++ /**
* dot11RSNASAERetransPeriod - Timeout to retransmit SAE Auth frame
*
+ * This timeout value is used in mesh STA to retransmit
--- a/wpa_supplicant/config_file.c
+++ b/wpa_supplicant/config_file.c
-@@ -816,6 +816,7 @@ static void wpa_config_write_network(FIL
+@@ -817,6 +817,7 @@ static void wpa_config_write_network(FIL
#endif /* IEEE8021X_EAPOL */
INT(mode);
INT(no_auto_peer);
@@ -135,7 +138,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
INT(frequency);
INT(fixed_freq);
#ifdef CONFIG_ACS
-@@ -1433,6 +1434,9 @@ static void wpa_config_write_global(FILE
+@@ -1449,6 +1450,9 @@ static void wpa_config_write_global(FILE
fprintf(f, "mesh_max_inactivity=%d\n",
config->mesh_max_inactivity);
@@ -161,7 +164,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -121,6 +121,7 @@ static struct mesh_conf * mesh_config_cr
+@@ -120,6 +120,7 @@ static struct mesh_conf * mesh_config_cr
conf->mesh_cc_id = 0;
conf->mesh_sp_id = MESH_SYNC_METHOD_NEIGHBOR_OFFSET;
conf->mesh_auth_id = (conf->security & MESH_CONF_SEC_AUTH) ? 1 : 0;
@@ -169,15 +172,15 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
conf->dot11MeshMaxRetries = ssid->dot11MeshMaxRetries;
conf->dot11MeshRetryTimeout = ssid->dot11MeshRetryTimeout;
conf->dot11MeshConfirmTimeout = ssid->dot11MeshConfirmTimeout;
-@@ -256,6 +257,7 @@ static int wpa_supplicant_mesh_init(stru
+@@ -254,6 +255,7 @@ static int wpa_supplicant_mesh_init(stru
bss->conf->start_disabled = 1;
bss->conf->mesh = MESH_ENABLED;
bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity;
+ bss->conf->mesh_fwding = wpa_s->conf->mesh_fwding;
- if (ieee80211_is_dfs(ssid->frequency) && wpa_s->conf->country[0]) {
- conf->ieee80211h = 1;
-@@ -508,6 +510,10 @@ int wpa_supplicant_join_mesh(struct wpa_
+ if (ieee80211_is_dfs(ssid->frequency, wpa_s->hw.modes,
+ wpa_s->hw.num_modes) && wpa_s->conf->country[0]) {
+@@ -507,6 +509,10 @@ int wpa_supplicant_join_mesh(struct wpa_
}
params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;
@@ -204,16 +207,13 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
wpabuf_put_u8(buf, WLAN_EID_MESH_ID);
--- a/wpa_supplicant/wpa_supplicant.conf
+++ b/wpa_supplicant/wpa_supplicant.conf
-@@ -153,6 +153,12 @@ ap_scan=1
+@@ -153,6 +153,9 @@ ap_scan=1
# This timeout value is used in mesh STA to clean up inactive stations.
#mesh_max_inactivity=300
+# Enable 802.11s layer-2 routing and forwarding
+#mesh_fwding=1
+
-+# Accept additional peer links
-+#mesh_auto_open_plinks=1
-+
# cert_in_cb - Whether to include a peer certificate dump in events
# This controls whether peer certificates for authentication server and
# its certificate chain are included in EAP peer certificate events. This is
diff --git a/package/network/services/hostapd/patches/020-mesh-properly-handle-sae_password.patch b/package/network/services/hostapd/patches/020-mesh-properly-handle-sae_password.patch
deleted file mode 100644
index 775774bf64..0000000000
--- a/package/network/services/hostapd/patches/020-mesh-properly-handle-sae_password.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 30c1693f42326d4f927e76120492bc9593b8f739 Mon Sep 17 00:00:00 2001
-From: Daniel Golle <daniel@makrotopia.org>
-Date: Fri, 13 Apr 2018 00:42:10 +0200
-Subject: [PATCH] mesh: properly handle sae_password
-
-The recently introduced sae_password parameter is only handled properly
-in wpa_supplicant/sme.c while wpa_supplicant/mesh.c assumed that
-ssid->passphrase exclusively holds the secret.
-Import the logic from sme.c to mesh.c to allow having only sae_password
-set which otherwise throws this error:
-AP-ENABLED
-mesh: Passphrase for SAE not configured
-Init RSN failed. Deinit mesh...
-wlan1: interface state ENABLED->DISABLED
-AP-DISABLED
-Segmentation fault
-
-Signed-off-by: Daniel Golle <daniel@makrotopia.org>
----
- wpa_supplicant/mesh.c | 10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
-
---- a/wpa_supplicant/mesh.c
-+++ b/wpa_supplicant/mesh.c
-@@ -154,10 +154,14 @@ int wpas_mesh_init_rsn(struct wpa_suppli
- struct wpa_ssid *ssid = wpa_s->current_ssid;
- struct hostapd_data *bss = ifmsh->bss[0];
- static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
-+ const char *password;
- size_t len;
-
- if (mconf->security != MESH_CONF_SEC_NONE) {
-- if (ssid->passphrase == NULL) {
-+ password = ssid->sae_password;
-+ if (!password)
-+ password = ssid->passphrase;
-+ if (!password) {
- wpa_printf(MSG_ERROR,
- "mesh: Passphrase for SAE not configured");
- return -1;
-@@ -177,9 +181,9 @@ int wpas_mesh_init_rsn(struct wpa_suppli
- return -1;
- }
-
-- len = os_strlen(ssid->passphrase);
-+ len = os_strlen(password);
- bss->conf->ssid.wpa_passphrase =
-- dup_binstr(ssid->passphrase, len);
-+ dup_binstr(password, len);
-
- wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf);
- if (!wpa_s->mesh_rsn)
diff --git a/package/network/services/hostapd/patches/022-mesh-fix-crash-with-CONFIG_TAXONOMY-enabled.patch b/package/network/services/hostapd/patches/022-mesh-fix-crash-with-CONFIG_TAXONOMY-enabled.patch
index bbc4672f9c..af0148bc4e 100644
--- a/package/network/services/hostapd/patches/022-mesh-fix-crash-with-CONFIG_TAXONOMY-enabled.patch
+++ b/package/network/services/hostapd/patches/022-mesh-fix-crash-with-CONFIG_TAXONOMY-enabled.patch
@@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -216,7 +216,7 @@ static int wpa_supplicant_mesh_init(stru
+@@ -214,7 +214,7 @@ static int wpa_supplicant_mesh_init(stru
return 0;
}
diff --git a/package/network/services/hostapd/patches/030-rsn_supp-fix-stub-pmksa_cache.patch b/package/network/services/hostapd/patches/030-rsn_supp-fix-stub-pmksa_cache.patch
deleted file mode 100644
index db6ec04b35..0000000000
--- a/package/network/services/hostapd/patches/030-rsn_supp-fix-stub-pmksa_cache.patch
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/src/rsn_supp/pmksa_cache.h
-+++ b/src/rsn_supp/pmksa_cache.h
-@@ -101,7 +101,7 @@ static inline void pmksa_cache_deinit(st
-
- static inline struct rsn_pmksa_cache_entry *
- pmksa_cache_get(struct rsn_pmksa_cache *pmksa, const u8 *aa, const u8 *pmkid,
-- const void *network_ctx)
-+ const void *network_ctx, int akmp)
- {
- return NULL;
- }
-@@ -148,7 +148,8 @@ static inline int pmksa_cache_set_curren
- const u8 *bssid,
- void *network_ctx,
- int try_opportunistic,
-- const u8 *fils_cache_id)
-+ const u8 *fils_cache_id,
-+ int akmp)
- {
- return -1;
- }
diff --git a/package/network/services/hostapd/patches/031-mesh-add-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch b/package/network/services/hostapd/patches/031-mesh-add-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch
index 8ff11f3191..ec3b7fa757 100644
--- a/package/network/services/hostapd/patches/031-mesh-add-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch
+++ b/package/network/services/hostapd/patches/031-mesh-add-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch
@@ -17,7 +17,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
-@@ -2796,6 +2796,7 @@ void wpa_config_set_network_defaults(str
+@@ -2800,6 +2800,7 @@ void wpa_config_set_network_defaults(str
ssid->mka_priority = DEFAULT_PRIO_NOT_KEY_SERVER;
#endif /* CONFIG_MACSEC */
ssid->mac_addr = -1;
diff --git a/package/network/services/hostapd/patches/200-multicall.patch b/package/network/services/hostapd/patches/200-multicall.patch
index 9f476210f7..a10037c83c 100644
--- a/package/network/services/hostapd/patches/200-multicall.patch
+++ b/package/network/services/hostapd/patches/200-multicall.patch
@@ -36,7 +36,7 @@
LIBS += $(DRV_AP_LIBS)
ifdef CONFIG_L2_PACKET
-@@ -1270,6 +1276,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
+@@ -1274,6 +1280,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR)
BCHECK=../src/drivers/build.hostapd
@@ -49,7 +49,7 @@
hostapd: $(BCHECK) $(OBJS)
$(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
@$(E) " LD " $@
-@@ -1315,6 +1327,12 @@ ifeq ($(CONFIG_TLS), linux)
+@@ -1316,6 +1328,12 @@ ifeq ($(CONFIG_TLS), linux)
HOBJS += ../src/crypto/crypto_linux.o
endif
@@ -128,7 +128,7 @@
NEED_AES_WRAP=y
OBJS += ../src/ap/wpa_auth.o
OBJS += ../src/ap/wpa_auth_ie.o
-@@ -1887,6 +1904,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
+@@ -1888,6 +1905,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv)
$(OBJS_c) $(OBJS_t) $(OBJS_t2) $(OBJS) $(BCHECK) $(EXTRA_progs): .config
@@ -141,7 +141,7 @@
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
@$(E) " LD " $@
-@@ -1989,6 +2012,12 @@ endif
+@@ -1990,6 +2013,12 @@ endif
-e 's|\@DBUS_INTERFACE\@|$(DBUS_INTERFACE)|g' $< >$@
@$(E) " sed" $<
@@ -156,7 +156,7 @@
wpa_cli.exe: wpa_cli
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
-@@ -5430,8 +5430,8 @@ union wpa_event_data {
+@@ -5449,8 +5449,8 @@ union wpa_event_data {
* Driver wrapper code should call this function whenever an event is received
* from the driver.
*/
@@ -167,7 +167,7 @@
/**
* wpa_supplicant_event_global - Report a driver event for wpa_supplicant
-@@ -5443,7 +5443,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -5462,7 +5462,7 @@ void wpa_supplicant_event(void *ctx, enu
* Same as wpa_supplicant_event(), but we search for the interface in
* wpa_global.
*/
@@ -178,8 +178,8 @@
/*
--- a/src/ap/drv_callbacks.c
+++ b/src/ap/drv_callbacks.c
-@@ -1473,8 +1473,8 @@ static void hostapd_event_dfs_cac_starte
- #endif /* NEED_AP_MLME */
+@@ -1515,8 +1515,8 @@ static void hostapd_event_wds_sta_interf
+ }
-void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
@@ -189,7 +189,7 @@
{
struct hostapd_data *hapd = ctx;
#ifndef CONFIG_NO_STDOUT_DEBUG
-@@ -1694,7 +1694,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -1742,7 +1742,7 @@ void wpa_supplicant_event(void *ctx, enu
}
@@ -231,7 +231,7 @@
os_memset(&global, 0, sizeof(global));
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
-@@ -3812,8 +3812,8 @@ static void wpa_supplicant_event_assoc_a
+@@ -3901,8 +3901,8 @@ static void wpas_event_assoc_reject(stru
}
@@ -242,7 +242,7 @@
{
struct wpa_supplicant *wpa_s = ctx;
int resched;
-@@ -4632,7 +4632,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -4669,7 +4669,7 @@ void wpa_supplicant_event(void *ctx, enu
}
@@ -253,7 +253,7 @@
struct wpa_supplicant *wpa_s;
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
-@@ -5736,7 +5736,6 @@ struct wpa_interface * wpa_supplicant_ma
+@@ -5770,7 +5770,6 @@ struct wpa_interface * wpa_supplicant_ma
return NULL;
}
@@ -261,7 +261,7 @@
/**
* wpa_supplicant_match_existing - Match existing interfaces
* @global: Pointer to global data from wpa_supplicant_init()
-@@ -5773,6 +5772,11 @@ static int wpa_supplicant_match_existing
+@@ -5807,6 +5806,11 @@ static int wpa_supplicant_match_existing
#endif /* CONFIG_MATCH_IFACE */
@@ -273,7 +273,7 @@
/**
* wpa_supplicant_add_iface - Add a new network interface
-@@ -6029,6 +6033,8 @@ struct wpa_global * wpa_supplicant_init(
+@@ -6063,6 +6067,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 */
diff --git a/package/network/services/hostapd/patches/300-noscan.patch b/package/network/services/hostapd/patches/300-noscan.patch
index d5cf84fb37..ba0069fa51 100644
--- a/package/network/services/hostapd/patches/300-noscan.patch
+++ b/package/network/services/hostapd/patches/300-noscan.patch
@@ -1,6 +1,6 @@
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
-@@ -3131,6 +3131,10 @@ static int hostapd_config_fill(struct ho
+@@ -3159,6 +3159,10 @@ static int hostapd_config_fill(struct ho
}
#endif /* CONFIG_IEEE80211W */
#ifdef CONFIG_IEEE80211N
@@ -13,7 +13,7 @@
} else if (os_strcmp(buf, "ht_capab") == 0) {
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
-@@ -763,6 +763,8 @@ struct hostapd_config {
+@@ -769,6 +769,8 @@ struct hostapd_config {
int ht_op_mode_fixed;
u16 ht_capab;
diff --git a/package/network/services/hostapd/patches/301-mesh-noscan.patch b/package/network/services/hostapd/patches/301-mesh-noscan.patch
index b2c59bc5be..0f2514df4f 100644
--- a/package/network/services/hostapd/patches/301-mesh-noscan.patch
+++ b/package/network/services/hostapd/patches/301-mesh-noscan.patch
@@ -10,7 +10,7 @@
{ STR(id_str) },
--- a/wpa_supplicant/config_file.c
+++ b/wpa_supplicant/config_file.c
-@@ -816,6 +816,7 @@ static void wpa_config_write_network(FIL
+@@ -817,6 +817,7 @@ static void wpa_config_write_network(FIL
#endif /* IEEE8021X_EAPOL */
INT(mode);
INT(no_auto_peer);
@@ -20,7 +20,7 @@
INT(fixed_freq);
--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
-@@ -287,6 +287,8 @@ static int wpa_supplicant_mesh_init(stru
+@@ -286,6 +286,8 @@ static int wpa_supplicant_mesh_init(stru
frequency);
goto out_free;
}
@@ -57,7 +57,7 @@
for (chan_idx = 0; chan_idx < mode->num_channels; chan_idx++) {
--- a/wpa_supplicant/config_ssid.h
+++ b/wpa_supplicant/config_ssid.h
-@@ -835,6 +835,8 @@ struct wpa_ssid {
+@@ -848,6 +848,8 @@ struct wpa_ssid {
*/
int no_auto_peer;
diff --git a/package/network/services/hostapd/patches/310-rescan_immediately.patch b/package/network/services/hostapd/patches/310-rescan_immediately.patch
index f504ba805f..d035ca4a54 100644
--- a/package/network/services/hostapd/patches/310-rescan_immediately.patch
+++ b/package/network/services/hostapd/patches/310-rescan_immediately.patch
@@ -1,6 +1,6 @@
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
-@@ -4187,7 +4187,7 @@ wpa_supplicant_alloc(struct wpa_supplica
+@@ -4221,7 +4221,7 @@ wpa_supplicant_alloc(struct wpa_supplica
if (wpa_s == NULL)
return NULL;
wpa_s->scan_req = INITIAL_SCAN_REQ;
diff --git a/package/network/services/hostapd/patches/340-reload_freq_change.patch b/package/network/services/hostapd/patches/340-reload_freq_change.patch
index 87c30976d0..d46f5144d0 100644
--- a/package/network/services/hostapd/patches/340-reload_freq_change.patch
+++ b/package/network/services/hostapd/patches/340-reload_freq_change.patch
@@ -1,6 +1,6 @@
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
-@@ -90,6 +90,25 @@ static void hostapd_reload_bss(struct ho
+@@ -93,6 +93,25 @@ static void hostapd_reload_bss(struct ho
#endif /* CONFIG_NO_RADIUS */
ssid = &hapd->conf->ssid;
@@ -26,7 +26,7 @@
if (!ssid->wpa_psk_set && ssid->wpa_psk && !ssid->wpa_psk->next &&
ssid->wpa_passphrase_set && ssid->wpa_passphrase) {
/*
-@@ -168,6 +187,7 @@ int hostapd_reload_config(struct hostapd
+@@ -171,6 +190,7 @@ int hostapd_reload_config(struct hostapd
struct hostapd_data *hapd = iface->bss[0];
struct hostapd_config *newconf, *oldconf;
size_t j;
@@ -34,7 +34,7 @@
if (iface->config_fname == NULL) {
/* Only in-memory config in use - assume it has been updated */
-@@ -189,21 +209,20 @@ int hostapd_reload_config(struct hostapd
+@@ -192,21 +212,20 @@ int hostapd_reload_config(struct hostapd
oldconf = hapd->iconf;
iface->conf = newconf;
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
index 2cf92c8a18..10c18674c4 100644
--- a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
+++ b/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
@@ -27,7 +27,7 @@
}
-@@ -7040,8 +7045,6 @@ static int wpa_driver_nl80211_if_remove(
+@@ -7057,8 +7062,6 @@ static int wpa_driver_nl80211_if_remove(
} else {
wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
nl80211_teardown_ap(bss);
@@ -36,7 +36,7 @@
nl80211_destroy_bss(bss);
if (!bss->added_if)
i802_set_iface_flags(bss, 0);
-@@ -7415,7 +7418,6 @@ static int wpa_driver_nl80211_deinit_ap(
+@@ -7439,7 +7442,6 @@ static int wpa_driver_nl80211_deinit_ap(
if (!is_ap_interface(drv->nlmode))
return -1;
wpa_driver_nl80211_del_beacon(bss);
@@ -44,7 +44,7 @@
/*
* If the P2P GO interface was dynamically added, then it is
-@@ -7435,7 +7437,6 @@ static int wpa_driver_nl80211_stop_ap(vo
+@@ -7459,7 +7461,6 @@ static int wpa_driver_nl80211_stop_ap(vo
if (!is_ap_interface(drv->nlmode))
return -1;
wpa_driver_nl80211_del_beacon(bss);
diff --git a/package/network/services/hostapd/patches/360-ctrl_iface_reload.patch b/package/network/services/hostapd/patches/360-ctrl_iface_reload.patch
index e7fc814d6a..07faead2c5 100644
--- a/package/network/services/hostapd/patches/360-ctrl_iface_reload.patch
+++ b/package/network/services/hostapd/patches/360-ctrl_iface_reload.patch
@@ -78,7 +78,7 @@
#ifdef CONFIG_IEEE80211W
#ifdef NEED_AP_MLME
-@@ -3026,6 +3083,8 @@ static int hostapd_ctrl_iface_receive_pr
+@@ -3031,6 +3088,8 @@ static int hostapd_ctrl_iface_receive_pr
} else if (os_strncmp(buf, "VENDOR ", 7) == 0) {
reply_len = hostapd_ctrl_iface_vendor(hapd, buf + 7, reply,
reply_size);
@@ -89,7 +89,7 @@
#ifdef RADIUS_SERVER
--- a/src/ap/ctrl_iface_ap.c
+++ b/src/ap/ctrl_iface_ap.c
-@@ -857,7 +857,13 @@ int hostapd_parse_csa_settings(const cha
+@@ -864,7 +864,13 @@ int hostapd_parse_csa_settings(const cha
int hostapd_ctrl_iface_stop_ap(struct hostapd_data *hapd)
{
diff --git a/package/network/services/hostapd/patches/370-ap_sta_support.patch b/package/network/services/hostapd/patches/370-ap_sta_support.patch
index 2f0c31848e..caa07f2299 100644
--- a/package/network/services/hostapd/patches/370-ap_sta_support.patch
+++ b/package/network/services/hostapd/patches/370-ap_sta_support.patch
@@ -30,7 +30,7 @@
#include "drivers/driver.h"
#include "eap_peer/eap.h"
#include "wpa_supplicant_i.h"
-@@ -290,6 +291,10 @@ void calculate_update_time(const struct
+@@ -292,6 +293,10 @@ void calculate_update_time(const struct
static void wpa_bss_copy_res(struct wpa_bss *dst, struct wpa_scan_res *src,
struct os_reltime *fetch_time)
{
@@ -41,7 +41,7 @@
dst->flags = src->flags;
os_memcpy(dst->bssid, src->bssid, ETH_ALEN);
dst->freq = src->freq;
-@@ -302,6 +307,15 @@ static void wpa_bss_copy_res(struct wpa_
+@@ -304,6 +309,15 @@ static void wpa_bss_copy_res(struct wpa_
dst->est_throughput = src->est_throughput;
dst->snr = src->snr;
@@ -59,7 +59,7 @@
--- a/wpa_supplicant/bss.h
+++ b/wpa_supplicant/bss.h
-@@ -80,6 +80,10 @@ struct wpa_bss {
+@@ -81,6 +81,10 @@ struct wpa_bss {
u8 ssid[SSID_MAX_LEN];
/** Length of SSID */
size_t ssid_len;
@@ -192,7 +192,7 @@
#else /* CONFIG_MESH */
wpa_msg(wpa_s, MSG_ERROR,
"mesh mode support not included in the build");
-@@ -5362,6 +5417,16 @@ static int wpa_supplicant_init_iface(str
+@@ -5396,6 +5451,16 @@ static int wpa_supplicant_init_iface(str
sizeof(wpa_s->bridge_ifname));
}
@@ -209,7 +209,7 @@
/* RSNA Supplicant Key Management - INITIALIZE */
eapol_sm_notify_portEnabled(wpa_s->eapol, FALSE);
eapol_sm_notify_portValid(wpa_s->eapol, FALSE);
-@@ -5683,6 +5748,11 @@ static void wpa_supplicant_deinit_iface(
+@@ -5717,6 +5782,11 @@ static void wpa_supplicant_deinit_iface(
if (terminate)
wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
diff --git a/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch b/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch
index 93ac40e9bd..12689eab57 100644
--- a/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch
+++ b/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch
@@ -12,7 +12,7 @@
else
--- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c
-@@ -2852,6 +2852,7 @@ static int hostapd_ctrl_iface_receive_pr
+@@ -2857,6 +2857,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);
@@ -20,7 +20,7 @@
} else if (os_strcmp(buf, "MIB") == 0) {
reply_len = ieee802_11_get_mib(hapd, reply, reply_size);
if (reply_len >= 0) {
-@@ -2893,6 +2894,7 @@ static int hostapd_ctrl_iface_receive_pr
+@@ -2898,6 +2899,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);
@@ -51,7 +51,7 @@
if (wpa_s->ap_iface) {
pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos,
end - pos,
-@@ -9809,6 +9809,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -9825,6 +9825,7 @@ char * wpa_supplicant_ctrl_iface_process
reply_len = -1;
} else if (os_strncmp(buf, "NOTE ", 5) == 0) {
wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
@@ -59,7 +59,7 @@
} else if (os_strcmp(buf, "MIB") == 0) {
reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);
if (reply_len >= 0) {
-@@ -9816,6 +9817,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -9832,6 +9833,7 @@ char * wpa_supplicant_ctrl_iface_process
reply + reply_len,
reply_size - reply_len);
}
@@ -67,7 +67,7 @@
} else if (os_strncmp(buf, "STATUS", 6) == 0) {
reply_len = wpa_supplicant_ctrl_iface_status(
wpa_s, buf + 6, reply, reply_size);
-@@ -10297,6 +10299,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -10313,6 +10315,7 @@ char * wpa_supplicant_ctrl_iface_process
reply_len = wpa_supplicant_ctrl_iface_bss(
wpa_s, buf + 4, reply, reply_size);
#ifdef CONFIG_AP
@@ -75,7 +75,7 @@
} 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) {
-@@ -10305,12 +10308,15 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -10321,12 +10324,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);
@@ -101,7 +101,7 @@
static size_t hostapd_write_ht_mcs_bitmask(char *buf, size_t buflen,
size_t curr_len, const u8 *mcs_set)
-@@ -408,6 +409,7 @@ int hostapd_ctrl_iface_sta_next(struct h
+@@ -415,6 +416,7 @@ int hostapd_ctrl_iface_sta_next(struct h
return hostapd_ctrl_iface_sta_mib(hapd, sta->next, buf, buflen);
}
@@ -109,7 +109,7 @@
#ifdef CONFIG_P2P_MANAGER
static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype,
-@@ -746,12 +748,12 @@ int hostapd_ctrl_iface_status(struct hos
+@@ -753,12 +755,12 @@ int hostapd_ctrl_iface_status(struct hos
return len;
len += ret;
}
@@ -126,7 +126,7 @@
if (os_snprintf_error(buflen - len, ret))
--- a/src/ap/ieee802_1x.c
+++ b/src/ap/ieee802_1x.c
-@@ -2504,6 +2504,7 @@ static const char * bool_txt(Boolean val
+@@ -2555,6 +2555,7 @@ static const char * bool_txt(Boolean val
return val ? "TRUE" : "FALSE";
}
@@ -134,7 +134,7 @@
int ieee802_1x_get_mib(struct hostapd_data *hapd, char *buf, size_t buflen)
{
-@@ -2679,6 +2680,7 @@ int ieee802_1x_get_mib_sta(struct hostap
+@@ -2730,6 +2731,7 @@ int ieee802_1x_get_mib_sta(struct hostap
return len;
}
@@ -182,7 +182,7 @@
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
-@@ -1170,7 +1170,7 @@ int wpas_ap_wps_nfc_report_handover(stru
+@@ -1179,7 +1179,7 @@ int wpas_ap_wps_nfc_report_handover(stru
#endif /* CONFIG_WPS */
diff --git a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
index a8ae70196d..e46336c85c 100644
--- a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
+++ b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
@@ -174,7 +174,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
-@@ -3000,6 +3000,12 @@ static void wpas_start_assoc_cb(struct w
+@@ -3034,6 +3034,12 @@ static void wpas_start_assoc_cb(struct w
params.beacon_int = ssid->beacon_int;
else
params.beacon_int = wpa_s->conf->beacon_int;
diff --git a/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
index 6216bf5003..6f5592056a 100644
--- a/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
+++ b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
@@ -29,7 +29,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
/**
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
-@@ -9217,6 +9217,18 @@ static int nl80211_put_mesh_id(struct nl
+@@ -9250,6 +9250,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)
{
-@@ -9278,6 +9290,7 @@ static int nl80211_join_mesh(struct i802
+@@ -9311,6 +9323,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
-@@ -456,6 +456,7 @@ int wpa_supplicant_join_mesh(struct wpa_
+@@ -455,6 +455,7 @@ int wpa_supplicant_join_mesh(struct wpa_
params->meshid = ssid->ssid;
params->meshid_len = ssid->ssid_len;
diff --git a/package/network/services/hostapd/patches/600-ubus_support.patch b/package/network/services/hostapd/patches/600-ubus_support.patch
index 91c5c411dc..6b81dae384 100644
--- a/package/network/services/hostapd/patches/600-ubus_support.patch
+++ b/package/network/services/hostapd/patches/600-ubus_support.patch
@@ -49,7 +49,7 @@
struct hostapd_iface * hostapd_alloc_iface(void);
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
-@@ -312,6 +312,7 @@ static void hostapd_free_hapd_data(struc
+@@ -315,6 +315,7 @@ static void hostapd_free_hapd_data(struc
hapd->started = 0;
wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface);
@@ -57,7 +57,7 @@
iapp_deinit(hapd->iapp);
hapd->iapp = NULL;
accounting_deinit(hapd);
-@@ -1189,6 +1190,8 @@ static int hostapd_setup_bss(struct host
+@@ -1237,6 +1238,8 @@ static int hostapd_setup_bss(struct host
if (hapd->driver && hapd->driver->set_operstate)
hapd->driver->set_operstate(hapd->drv_priv, 1);
@@ -66,7 +66,7 @@
return 0;
}
-@@ -1603,7 +1606,7 @@ static enum nr_chan_width hostapd_get_nr
+@@ -1651,7 +1654,7 @@ static enum nr_chan_width hostapd_get_nr
#endif /* NEED_AP_MLME */
@@ -75,7 +75,7 @@
{
#ifdef NEED_AP_MLME
u16 capab = hostapd_own_capab_info(hapd);
-@@ -1810,6 +1813,7 @@ static int hostapd_setup_interface_compl
+@@ -1872,6 +1875,7 @@ static int hostapd_setup_interface_compl
if (err)
goto fail;
@@ -83,7 +83,7 @@
wpa_printf(MSG_DEBUG, "Completing interface initialization");
if (iface->conf->channel) {
#ifdef NEED_AP_MLME
-@@ -1990,6 +1994,7 @@ dfs_offload:
+@@ -2052,6 +2056,7 @@ dfs_offload:
fail:
wpa_printf(MSG_ERROR, "Interface initialization failed");
@@ -91,7 +91,7 @@
hostapd_set_state(iface, HAPD_IFACE_DISABLED);
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_EVENT_DISABLED);
#ifdef CONFIG_FST
-@@ -2444,6 +2449,7 @@ void hostapd_interface_deinit_free(struc
+@@ -2517,6 +2522,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;
@@ -143,7 +143,7 @@
if (res == HOSTAPD_ACL_PENDING)
return;
-@@ -3129,12 +3142,12 @@ void fils_hlp_timeout(void *eloop_ctx, v
+@@ -3137,12 +3150,12 @@ void fils_hlp_timeout(void *eloop_ctx, v
static void handle_assoc(struct hostapd_data *hapd,
const struct ieee80211_mgmt *mgmt, size_t len,
@@ -158,7 +158,7 @@
struct sta_info *sta;
u8 *tmp = NULL;
struct hostapd_sta_wpa_psk_short *psk = NULL;
-@@ -3143,6 +3156,11 @@ static void handle_assoc(struct hostapd_
+@@ -3151,6 +3164,11 @@ static void handle_assoc(struct hostapd_
#ifdef CONFIG_FILS
int delay_assoc = 0;
#endif /* CONFIG_FILS */
@@ -170,7 +170,7 @@
if (len < IEEE80211_HDRLEN + (reassoc ? sizeof(mgmt->u.reassoc_req) :
sizeof(mgmt->u.assoc_req))) {
-@@ -3314,6 +3332,14 @@ static void handle_assoc(struct hostapd_
+@@ -3322,6 +3340,14 @@ static void handle_assoc(struct hostapd_
}
#endif /* CONFIG_MBO */
@@ -185,7 +185,7 @@
/*
* sta->capability is used in check_assoc_ies() for RRM enabled
* capability element.
-@@ -3527,6 +3553,7 @@ static void handle_disassoc(struct hosta
+@@ -3535,6 +3561,7 @@ static void handle_disassoc(struct hosta
wpa_printf(MSG_DEBUG, "disassocation: STA=" MACSTR " reason_code=%d",
MAC2STR(mgmt->sa),
le_to_host16(mgmt->u.disassoc.reason_code));
@@ -193,7 +193,7 @@
sta = ap_get_sta(hapd, mgmt->sa);
if (sta == NULL) {
-@@ -3592,6 +3619,8 @@ static void handle_deauth(struct hostapd
+@@ -3600,6 +3627,8 @@ static void handle_deauth(struct hostapd
" reason_code=%d",
MAC2STR(mgmt->sa), le_to_host16(mgmt->u.deauth.reason_code));
@@ -202,7 +202,7 @@
sta = ap_get_sta(hapd, mgmt->sa);
if (sta == NULL) {
wpa_msg(hapd->msg_ctx, MSG_DEBUG, "Station " MACSTR " trying "
-@@ -3911,7 +3940,7 @@ int ieee802_11_mgmt(struct hostapd_data
+@@ -3919,7 +3948,7 @@ int ieee802_11_mgmt(struct hostapd_data
if (stype == WLAN_FC_STYPE_PROBE_REQ) {
@@ -211,7 +211,7 @@
return 1;
}
-@@ -3931,17 +3960,17 @@ int ieee802_11_mgmt(struct hostapd_data
+@@ -3939,17 +3968,17 @@ int ieee802_11_mgmt(struct hostapd_data
switch (stype) {
case WLAN_FC_STYPE_AUTH:
wpa_printf(MSG_DEBUG, "mgmt::auth");
@@ -315,7 +315,7 @@
wpabuf_free(sta->p2p_ie);
--- a/src/ap/sta_info.c
+++ b/src/ap/sta_info.c
-@@ -412,6 +412,7 @@ void ap_handle_timer(void *eloop_ctx, vo
+@@ -415,6 +415,7 @@ void ap_handle_timer(void *eloop_ctx, vo
HOSTAPD_LEVEL_INFO, "deauthenticated due to "
"local deauth request");
ap_free_sta(hapd, sta);
@@ -323,7 +323,7 @@
return;
}
-@@ -559,6 +560,7 @@ skip_poll:
+@@ -562,6 +563,7 @@ skip_poll:
hapd, sta,
WLAN_REASON_PREV_AUTH_NOT_VALID);
ap_free_sta(hapd, sta);
@@ -331,7 +331,7 @@
break;
}
}
-@@ -1220,6 +1222,7 @@ void ap_sta_set_authorized(struct hostap
+@@ -1223,6 +1225,7 @@ void ap_sta_set_authorized(struct hostap
buf, ip_addr);
} else {
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_DISCONNECTED "%s", buf);