forked from openwrt/openwrt
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
hostapd: WNM: allow specifying dialog-token
Backport a patch to allow extending the ubus BSS-transition method for specifying individual dialog tokens for BSS transition management requests. This is required for handling BSS transition queries in the future. Signed-off-by: David Bauer <mail@david-bauer.net>
- Loading branch information
1 parent
b1d483b
commit dd39249
Showing
2 changed files
with
110 additions
and
4 deletions.
There are no files selected for viewing
99 changes: 99 additions & 0 deletions
99
package/network/services/hostapd/patches/550-WNM-allow-specifying-dialog-token.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters