aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/services/hostapd/patches/550-WNM-allow-specifying-dialog-token.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/services/hostapd/patches/550-WNM-allow-specifying-dialog-token.patch')
-rw-r--r--package/network/services/hostapd/patches/550-WNM-allow-specifying-dialog-token.patch99
1 files changed, 99 insertions, 0 deletions
diff --git a/package/network/services/hostapd/patches/550-WNM-allow-specifying-dialog-token.patch b/package/network/services/hostapd/patches/550-WNM-allow-specifying-dialog-token.patch
new file mode 100644
index 0000000000..6c080adc0e
--- /dev/null
+++ b/package/network/services/hostapd/patches/550-WNM-allow-specifying-dialog-token.patch
@@ -0,0 +1,99 @@
+From 1b26807938815d0b0b266caf31d8ef0019607e64 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Mon, 27 Sep 2021 15:41:48 +0200
+Subject: [PATCH] WNM: allow specifying dialog-token
+
+This commit adds the ability to specify the dialog token of a WNM BSS
+Transition request frame via the hostapd control socket.
+
+FOr this, the new 'dialog_token' option can be used. It accepts values
+as a 8 bit unsigned integer. If not specified, the dialog token is set
+to 1 like before.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ hostapd/ctrl_iface.c | 10 ++++++++--
+ src/ap/wnm_ap.c | 11 ++++++-----
+ src/ap/wnm_ap.h | 4 ++--
+ 3 files changed, 16 insertions(+), 9 deletions(-)
+
+--- a/hostapd/ctrl_iface.c
++++ b/hostapd/ctrl_iface.c
+@@ -897,7 +897,7 @@ static int hostapd_ctrl_iface_bss_tm_req
+ const char *pos, *end;
+ int disassoc_timer = 0;
+ struct sta_info *sta;
+- u8 req_mode = 0, valid_int = 0x01;
++ u8 req_mode = 0, valid_int = 0x01, dialog_token = 0x01;
+ u8 bss_term_dur[12];
+ char *url = NULL;
+ int ret;
+@@ -935,6 +935,12 @@ static int hostapd_ctrl_iface_bss_tm_req
+ valid_int = atoi(pos);
+ }
+
++ pos = os_strstr(cmd, " dialog_token=");
++ if (pos) {
++ pos += 14;
++ dialog_token = atoi(pos);
++ }
++
+ pos = os_strstr(cmd, " bss_term=");
+ if (pos) {
+ pos += 10;
+@@ -1041,7 +1047,7 @@ static int hostapd_ctrl_iface_bss_tm_req
+ #endif /* CONFIG_MBO */
+
+ ret = wnm_send_bss_tm_req(hapd, sta, req_mode, disassoc_timer,
+- valid_int, bss_term_dur, url,
++ valid_int, bss_term_dur, dialog_token, url,
+ nei_len ? nei_rep : NULL, nei_len,
+ mbo_len ? mbo : NULL, mbo_len);
+ #ifdef CONFIG_MBO
+--- a/src/ap/wnm_ap.c
++++ b/src/ap/wnm_ap.c
+@@ -788,8 +788,8 @@ int wnm_send_ess_disassoc_imminent(struc
+
+ int wnm_send_bss_tm_req(struct hostapd_data *hapd, struct sta_info *sta,
+ u8 req_mode, int disassoc_timer, u8 valid_int,
+- const u8 *bss_term_dur, const char *url,
+- const u8 *nei_rep, size_t nei_rep_len,
++ const u8 *bss_term_dur, u8 dialog_token,
++ const char *url, const u8 *nei_rep, size_t nei_rep_len,
+ const u8 *mbo_attrs, size_t mbo_len)
+ {
+ u8 *buf, *pos;
+@@ -797,8 +797,9 @@ int wnm_send_bss_tm_req(struct hostapd_d
+ size_t url_len;
+
+ wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request to "
+- MACSTR " req_mode=0x%x disassoc_timer=%d valid_int=0x%x",
+- MAC2STR(sta->addr), req_mode, disassoc_timer, valid_int);
++ MACSTR " req_mode=0x%x disassoc_timer=%d valid_int=0x%x "
++ "dialog_token=%x",
++ MAC2STR(sta->addr), req_mode, disassoc_timer, valid_int, dialog_token);
+ buf = os_zalloc(1000 + nei_rep_len + mbo_len);
+ if (buf == NULL)
+ return -1;
+@@ -810,7 +811,7 @@ int wnm_send_bss_tm_req(struct hostapd_d
+ os_memcpy(mgmt->bssid, hapd->own_addr, ETH_ALEN);
+ mgmt->u.action.category = WLAN_ACTION_WNM;
+ mgmt->u.action.u.bss_tm_req.action = WNM_BSS_TRANS_MGMT_REQ;
+- mgmt->u.action.u.bss_tm_req.dialog_token = 1;
++ mgmt->u.action.u.bss_tm_req.dialog_token = dialog_token;
+ mgmt->u.action.u.bss_tm_req.req_mode = req_mode;
+ mgmt->u.action.u.bss_tm_req.disassoc_timer =
+ host_to_le16(disassoc_timer);
+--- a/src/ap/wnm_ap.h
++++ b/src/ap/wnm_ap.h
+@@ -20,8 +20,8 @@ int wnm_send_ess_disassoc_imminent(struc
+ int disassoc_timer);
+ int wnm_send_bss_tm_req(struct hostapd_data *hapd, struct sta_info *sta,
+ u8 req_mode, int disassoc_timer, u8 valid_int,
+- const u8 *bss_term_dur, const char *url,
+- const u8 *nei_rep, size_t nei_rep_len,
++ const u8 *bss_term_dur, u8 dialog_token,
++ const char *url, const u8 *nei_rep, size_t nei_rep_len,
+ const u8 *mbo_attrs, size_t mbo_len);
+ void ap_sta_reset_steer_flag_timer(void *eloop_ctx, void *timeout_ctx);
+ int wnm_send_coloc_intf_req(struct hostapd_data *hapd, struct sta_info *sta,