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@xxxxxxxxxxxxxxx> --- hostapd/ctrl_iface.c | 10 ++++++++-- src/ap/wnm_ap.c | 11 ++++++----- src/ap/wnm_ap.h | 4 ++-- 3 files changed, 16 insertions(+), 9 deletions(-) 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, -- 2.33.0 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap