diff options
Diffstat (limited to 'package/network/services/hostapd/patches')
-rw-r--r-- | package/network/services/hostapd/patches/550-WNM-allow-specifying-dialog-token.patch | 99 |
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, |