mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-29 15:44:04 +00:00
hostapd: add patch for setting 4addr mode in multi_ap
This patch is required to be able to roam from one backhaul AP to another one in the same ESS. Signed-off-by: Daniel Golle <daniel@makrotopia.org> (daniel@makrotopia.org: PKG_REVISION bump and refreshed patches) Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
This commit is contained in:
parent
048131ba3a
commit
68073e2d46
@ -7,7 +7,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=hostapd
|
||||
PKG_RELEASE:=30
|
||||
PKG_RELEASE:=31
|
||||
|
||||
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
@ -26,24 +26,20 @@ Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
|
||||
src/common/wpa_ctrl.h | 3 +++
|
||||
5 files changed, 36 insertions(+)
|
||||
|
||||
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
|
||||
index e09e6e141..6b88ecd17 100644
|
||||
--- a/hostapd/config_file.c
|
||||
+++ b/hostapd/config_file.c
|
||||
@@ -4323,6 +4323,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
||||
@@ -4456,6 +4456,8 @@ static int hostapd_config_fill(struct ho
|
||||
bss->multicast_to_unicast = atoi(pos);
|
||||
} else if (os_strcmp(buf, "broadcast_deauth") == 0) {
|
||||
bss->broadcast_deauth = atoi(pos);
|
||||
+ } else if (os_strcmp(buf, "notify_mgmt_frames") == 0) {
|
||||
+ conf->notify_mgmt_frames = atoi(pos);
|
||||
#ifdef CONFIG_DPP
|
||||
} else if (os_strcmp(buf, "dpp_connector") == 0) {
|
||||
os_free(bss->dpp_connector);
|
||||
diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf
|
||||
index ce3ecdddf..28dcd4f57 100644
|
||||
} else if (os_strcmp(buf, "dpp_name") == 0) {
|
||||
os_free(bss->dpp_name);
|
||||
--- a/hostapd/hostapd.conf
|
||||
+++ b/hostapd/hostapd.conf
|
||||
@@ -550,6 +550,10 @@ wmm_ac_vo_acm=0
|
||||
@@ -571,6 +571,10 @@ wmm_ac_vo_acm=0
|
||||
# Default: 1 (enabled)
|
||||
#broadcast_deauth=1
|
||||
|
||||
@ -54,11 +50,9 @@ index ce3ecdddf..28dcd4f57 100644
|
||||
##### IEEE 802.11n related configuration ######################################
|
||||
|
||||
# ieee80211n: Whether IEEE 802.11n (HT) is enabled
|
||||
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
|
||||
index ea581a822..2f89d6ab9 100644
|
||||
--- a/src/ap/ap_config.h
|
||||
+++ b/src/ap/ap_config.h
|
||||
@@ -1008,6 +1008,8 @@ struct hostapd_config {
|
||||
@@ -1060,6 +1060,8 @@ struct hostapd_config {
|
||||
unsigned int airtime_update_interval;
|
||||
#define AIRTIME_MODE_MAX (__AIRTIME_MODE_MAX - 1)
|
||||
#endif /* CONFIG_AIRTIME_POLICY */
|
||||
@ -67,11 +61,9 @@ index ea581a822..2f89d6ab9 100644
|
||||
};
|
||||
|
||||
|
||||
diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
|
||||
index c85a28db4..fc1291024 100644
|
||||
--- a/src/ap/ieee802_11.c
|
||||
+++ b/src/ap/ieee802_11.c
|
||||
@@ -4591,6 +4591,28 @@ static int handle_action(struct hostapd_data *hapd,
|
||||
@@ -4878,6 +4878,28 @@ static int handle_action(struct hostapd_
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -100,7 +92,7 @@ index c85a28db4..fc1291024 100644
|
||||
|
||||
/**
|
||||
* ieee802_11_mgmt - process incoming IEEE 802.11 management frames
|
||||
@@ -4665,6 +4687,9 @@ int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len,
|
||||
@@ -4969,6 +4991,9 @@ int ieee802_11_mgmt(struct hostapd_data
|
||||
if (hapd->iconf->track_sta_max_num)
|
||||
sta_track_add(hapd->iface, mgmt->sa, ssi_signal);
|
||||
|
||||
@ -110,13 +102,11 @@ index c85a28db4..fc1291024 100644
|
||||
switch (stype) {
|
||||
case WLAN_FC_STYPE_AUTH:
|
||||
wpa_printf(MSG_DEBUG, "mgmt::auth");
|
||||
diff --git a/src/common/wpa_ctrl.h b/src/common/wpa_ctrl.h
|
||||
index b24ae63e5..eeff9fcaa 100644
|
||||
--- a/src/common/wpa_ctrl.h
|
||||
+++ b/src/common/wpa_ctrl.h
|
||||
@@ -375,6 +375,9 @@ extern "C" {
|
||||
#define WDS_STA_INTERFACE_ADDED "WDS-STA-INTERFACE-ADDED "
|
||||
#define WDS_STA_INTERFACE_REMOVED "WDS-STA-INTERFACE-REMOVED "
|
||||
@@ -396,6 +396,9 @@ extern "C" {
|
||||
#define BIT(x) (1U << (x))
|
||||
#endif
|
||||
|
||||
+/* Event triggered for received management frame */
|
||||
+#define AP_MGMT_FRAME_RECEIVED "AP-MGMT-FRAME-RECEIVED "
|
||||
@ -124,6 +114,3 @@ index b24ae63e5..eeff9fcaa 100644
|
||||
/* BSS command information masks */
|
||||
|
||||
#define WPA_BSS_MASK_ALL 0xFFFDFFFF
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
@ -19,11 +19,9 @@ Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
|
||||
src/wps/wps_registrar.c | 29 ++++++++++++++
|
||||
3 files changed, 118 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/ap/wps_hostapd.c b/src/ap/wps_hostapd.c
|
||||
index dc8aa8f65..ff942a67b 100644
|
||||
--- a/src/ap/wps_hostapd.c
|
||||
+++ b/src/ap/wps_hostapd.c
|
||||
@@ -1375,6 +1375,43 @@ static void hostapd_wps_nfc_clear(struct wps_context *wps)
|
||||
@@ -1375,6 +1375,43 @@ static void hostapd_wps_nfc_clear(struct
|
||||
#endif /* CONFIG_WPS_NFC */
|
||||
}
|
||||
|
||||
@ -67,7 +65,7 @@ index dc8aa8f65..ff942a67b 100644
|
||||
|
||||
void hostapd_deinit_wps(struct hostapd_data *hapd)
|
||||
{
|
||||
@@ -1409,11 +1446,54 @@ void hostapd_update_wps(struct hostapd_data *hapd)
|
||||
@@ -1409,11 +1446,54 @@ void hostapd_update_wps(struct hostapd_d
|
||||
hapd->wps->upc = hapd->conf->upc;
|
||||
#endif /* CONFIG_WPS_UPNP */
|
||||
|
||||
@ -125,11 +123,9 @@ index dc8aa8f65..ff942a67b 100644
|
||||
else
|
||||
hostapd_deinit_wps(hapd);
|
||||
}
|
||||
diff --git a/src/wps/wps.h b/src/wps/wps.h
|
||||
index 93888b011..110e3ea52 100644
|
||||
--- a/src/wps/wps.h
|
||||
+++ b/src/wps/wps.h
|
||||
@@ -938,6 +938,12 @@ struct wpabuf * wps_build_nfc_handover_sel_p2p(struct wps_context *ctx,
|
||||
@@ -938,6 +938,12 @@ struct wpabuf * wps_build_nfc_handover_s
|
||||
struct wpabuf *nfc_dh_pubkey,
|
||||
struct wpabuf *nfc_dev_pw);
|
||||
|
||||
@ -142,11 +138,9 @@ index 93888b011..110e3ea52 100644
|
||||
/* ndef.c */
|
||||
struct wpabuf * ndef_parse_wifi(const struct wpabuf *buf);
|
||||
struct wpabuf * ndef_build_wifi(const struct wpabuf *buf);
|
||||
diff --git a/src/wps/wps_registrar.c b/src/wps/wps_registrar.c
|
||||
index 9e1ee36da..d6b27be28 100644
|
||||
--- a/src/wps/wps_registrar.c
|
||||
+++ b/src/wps/wps_registrar.c
|
||||
@@ -3669,6 +3669,35 @@ int wps_registrar_config_ap(struct wps_registrar *reg,
|
||||
@@ -3669,6 +3669,35 @@ int wps_registrar_config_ap(struct wps_r
|
||||
}
|
||||
|
||||
|
||||
@ -182,6 +176,3 @@ index 9e1ee36da..d6b27be28 100644
|
||||
#ifdef CONFIG_WPS_NFC
|
||||
|
||||
int wps_registrar_add_nfc_pw_token(struct wps_registrar *reg,
|
||||
--
|
||||
2.29.2
|
||||
|
||||
|
@ -0,0 +1,37 @@
|
||||
From 8a4893dd06eb236460db4937f3c54e246739ad28 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rapha=C3=ABl=20M=C3=A9lotte?= <raphael.melotte@mind.be>
|
||||
Date: Wed, 3 Feb 2021 14:23:17 +0100
|
||||
Subject: [PATCH] wpa_supplicant: multi_ap: only enable 4addr mode if not
|
||||
already enabled
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
If 4addr mode is already enabled, the call to enable it a second time
|
||||
may fail. If this happens when roaming, it leads to deauthentication.
|
||||
|
||||
Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
|
||||
---
|
||||
wpa_supplicant/events.c | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/wpa_supplicant/events.c
|
||||
+++ b/wpa_supplicant/events.c
|
||||
@@ -2589,11 +2589,13 @@ static void multi_ap_set_4addr_mode(stru
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- if (wpa_drv_set_4addr_mode(wpa_s, 1) < 0) {
|
||||
- wpa_printf(MSG_ERROR, "Failed to set 4addr mode");
|
||||
- goto fail;
|
||||
+ if (wpa_s->enabled_4addr_mode == 0) {
|
||||
+ if (wpa_drv_set_4addr_mode(wpa_s, 1) < 0) {
|
||||
+ wpa_printf(MSG_ERROR, "Failed to set 4addr mode");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+ wpa_s->enabled_4addr_mode = 1;
|
||||
}
|
||||
- wpa_s->enabled_4addr_mode = 1;
|
||||
return;
|
||||
|
||||
fail:
|
@ -231,7 +231,7 @@
|
||||
os_memset(&global, 0, sizeof(global));
|
||||
--- a/wpa_supplicant/events.c
|
||||
+++ b/wpa_supplicant/events.c
|
||||
@@ -4579,8 +4579,8 @@ static void wpas_event_unprot_beacon(str
|
||||
@@ -4581,8 +4581,8 @@ static void wpas_event_unprot_beacon(str
|
||||
}
|
||||
|
||||
|
||||
@ -242,7 +242,7 @@
|
||||
{
|
||||
struct wpa_supplicant *wpa_s = ctx;
|
||||
int resched;
|
||||
@@ -5398,7 +5398,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
@@ -5400,7 +5400,7 @@ void wpa_supplicant_event(void *ctx, enu
|
||||
}
|
||||
|
||||
|
||||
|
@ -274,7 +274,7 @@
|
||||
if (ieee802_11_build_ap_params(hapd, ¶ms) < 0)
|
||||
--- a/wpa_supplicant/events.c
|
||||
+++ b/wpa_supplicant/events.c
|
||||
@@ -4579,6 +4579,60 @@ static void wpas_event_unprot_beacon(str
|
||||
@@ -4581,6 +4581,60 @@ static void wpas_event_unprot_beacon(str
|
||||
}
|
||||
|
||||
|
||||
@ -335,7 +335,7 @@
|
||||
void supplicant_event(void *ctx, enum wpa_event_type event,
|
||||
union wpa_event_data *data)
|
||||
{
|
||||
@@ -4881,8 +4935,10 @@ void supplicant_event(void *ctx, enum wp
|
||||
@@ -4883,8 +4937,10 @@ void supplicant_event(void *ctx, enum wp
|
||||
channel_width_to_string(data->ch_switch.ch_width),
|
||||
data->ch_switch.cf1,
|
||||
data->ch_switch.cf2);
|
||||
|
@ -20,11 +20,9 @@ Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
|
||||
src/p2p/p2p.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
|
||||
index 74b7b52ae05c..5cbfc217fc1f 100644
|
||||
--- a/src/p2p/p2p.c
|
||||
+++ b/src/p2p/p2p.c
|
||||
@@ -453,6 +453,8 @@ static void p2p_copy_client_info(struct p2p_device *dev,
|
||||
@@ -453,6 +453,8 @@ static void p2p_copy_client_info(struct
|
||||
dev->info.config_methods = cli->config_methods;
|
||||
os_memcpy(dev->info.pri_dev_type, cli->pri_dev_type, 8);
|
||||
dev->info.wps_sec_dev_type_list_len = 8 * cli->num_sec_dev_types;
|
||||
@ -33,6 +31,3 @@ index 74b7b52ae05c..5cbfc217fc1f 100644
|
||||
os_memcpy(dev->info.wps_sec_dev_type_list, cli->sec_dev_types,
|
||||
dev->info.wps_sec_dev_type_list_len);
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user