diff mbox series

WNM: allow specifying dialog-token

Message ID 20211006002146.19804-1-mail@david-bauer.net
State Accepted
Headers show
Series WNM: allow specifying dialog-token | expand

Commit Message

David Bauer Oct. 6, 2021, 12:21 a.m. UTC
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(-)

Comments

Jouni Malinen Oct. 22, 2021, 5:41 p.m. UTC | #1
On Wed, Oct 06, 2021 at 02:21:46AM +0200, David Bauer wrote:
> 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.

Thanks, applied.
diff mbox series

Patch

diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
index 4a2d60627..134f58cc1 100644
--- a/hostapd/ctrl_iface.c
+++ b/hostapd/ctrl_iface.c
@@ -840,7 +840,7 @@  static int hostapd_ctrl_iface_bss_tm_req(struct hostapd_data *hapd,
 	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;
@@ -878,6 +878,12 @@  static int hostapd_ctrl_iface_bss_tm_req(struct hostapd_data *hapd,
 		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;
@@ -984,7 +990,7 @@  static int hostapd_ctrl_iface_bss_tm_req(struct hostapd_data *hapd,
 #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
diff --git a/src/ap/wnm_ap.c b/src/ap/wnm_ap.c
index d32967e6c..e17fe16d0 100644
--- a/src/ap/wnm_ap.c
+++ b/src/ap/wnm_ap.c
@@ -788,8 +788,8 @@  int wnm_send_ess_disassoc_imminent(struct hostapd_data *hapd,
 
 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_data *hapd, struct sta_info *sta,
 	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_data *hapd, struct sta_info *sta,
 	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);
diff --git a/src/ap/wnm_ap.h b/src/ap/wnm_ap.h
index 1806ba0e0..f86c6b2af 100644
--- a/src/ap/wnm_ap.h
+++ b/src/ap/wnm_ap.h
@@ -20,8 +20,8 @@  int wnm_send_ess_disassoc_imminent(struct hostapd_data *hapd,
 				   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,