hostapd: update to git HEAD of 2018-05-21, allow build against wolfssl
Support for building wpa_supplicant/hostapd against wolfssl has been added upstream recently, add build option to allow users using it. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
parent
51740777fb
commit
69f544937f
37 changed files with 604 additions and 297 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
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
|
||||
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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);
|
|
@ -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 */
|
|
@ -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)
|
|
@ -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)
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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];
|
|
@ -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];
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
@ -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;
|
|
@ -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 ||
|
|
@ -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
|
|
@ -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) &&
|
|
@ -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;
|
||||
}
|
|
@ -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.
|
|
@ -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,
|
|
@ -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,15 +207,12 @@ 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
|
|
@ -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)
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue