WNM: Make ESS Disassoc Imminent event more convenient to use
Define a proper event prefix and include additional information to allow ESS Dissassociation Imminent event to be used in a wpa_cli action script. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
6df634faf9
commit
ae8535b6e1
5 changed files with 34 additions and 3 deletions
|
@ -132,6 +132,9 @@ extern "C" {
|
||||||
#define P2P_EVENT_INVITATION_RESULT "P2P-INVITATION-RESULT "
|
#define P2P_EVENT_INVITATION_RESULT "P2P-INVITATION-RESULT "
|
||||||
#define P2P_EVENT_FIND_STOPPED "P2P-FIND-STOPPED "
|
#define P2P_EVENT_FIND_STOPPED "P2P-FIND-STOPPED "
|
||||||
|
|
||||||
|
/* parameters: <PMF enabled> <timeout in ms> <Session Information URL> */
|
||||||
|
#define ESS_DISASSOC_IMMINENT "ESS-DISASSOC-IMMINENT "
|
||||||
|
|
||||||
#define INTERWORKING_AP "INTERWORKING-AP "
|
#define INTERWORKING_AP "INTERWORKING-AP "
|
||||||
#define INTERWORKING_NO_MATCH "INTERWORKING-NO-MATCH "
|
#define INTERWORKING_NO_MATCH "INTERWORKING-NO-MATCH "
|
||||||
|
|
||||||
|
|
|
@ -2412,6 +2412,21 @@ int wpa_sm_get_status(struct wpa_sm *sm, char *buf, size_t buflen,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int wpa_sm_pmf_enabled(struct wpa_sm *sm)
|
||||||
|
{
|
||||||
|
struct wpa_ie_data rsn;
|
||||||
|
|
||||||
|
if (sm->mfp == NO_MGMT_FRAME_PROTECTION || !sm->ap_rsn_ie)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (wpa_parse_wpa_ie_rsn(sm->ap_rsn_ie, sm->ap_rsn_ie_len, &rsn) >= 0 &&
|
||||||
|
rsn.capabilities & (WPA_CAPABILITY_MFPR | WPA_CAPABILITY_MFPC))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpa_sm_set_assoc_wpa_ie_default - Generate own WPA/RSN IE from configuration
|
* wpa_sm_set_assoc_wpa_ie_default - Generate own WPA/RSN IE from configuration
|
||||||
* @sm: Pointer to WPA state machine data from wpa_sm_init()
|
* @sm: Pointer to WPA state machine data from wpa_sm_init()
|
||||||
|
|
|
@ -123,6 +123,7 @@ unsigned int wpa_sm_get_param(struct wpa_sm *sm,
|
||||||
|
|
||||||
int wpa_sm_get_status(struct wpa_sm *sm, char *buf, size_t buflen,
|
int wpa_sm_get_status(struct wpa_sm *sm, char *buf, size_t buflen,
|
||||||
int verbose);
|
int verbose);
|
||||||
|
int wpa_sm_pmf_enabled(struct wpa_sm *sm);
|
||||||
|
|
||||||
void wpa_sm_key_request(struct wpa_sm *sm, int error, int pairwise);
|
void wpa_sm_key_request(struct wpa_sm *sm, int error, int pairwise);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* wpa_supplicant - WNM
|
* wpa_supplicant - WNM
|
||||||
* Copyright (c) 2011-2012, Qualcomm Atheros, Inc.
|
* Copyright (c) 2011-2013, Qualcomm Atheros, Inc.
|
||||||
*
|
*
|
||||||
* This software may be distributed under the terms of the BSD license.
|
* This software may be distributed under the terms of the BSD license.
|
||||||
* See README for more details.
|
* See README for more details.
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include "utils/common.h"
|
#include "utils/common.h"
|
||||||
#include "common/ieee802_11_defs.h"
|
#include "common/ieee802_11_defs.h"
|
||||||
|
#include "common/wpa_ctrl.h"
|
||||||
#include "rsn_supp/wpa.h"
|
#include "rsn_supp/wpa.h"
|
||||||
#include "wpa_supplicant_i.h"
|
#include "wpa_supplicant_i.h"
|
||||||
#include "driver_i.h"
|
#include "driver_i.h"
|
||||||
|
@ -615,6 +616,8 @@ static void ieee802_11_rx_bss_trans_mgmt_req(struct wpa_supplicant *wpa_s,
|
||||||
|
|
||||||
if (wpa_s->wnm_mode & WNM_BSS_TM_REQ_ESS_DISASSOC_IMMINENT) {
|
if (wpa_s->wnm_mode & WNM_BSS_TM_REQ_ESS_DISASSOC_IMMINENT) {
|
||||||
char url[256];
|
char url[256];
|
||||||
|
unsigned int beacon_int;
|
||||||
|
|
||||||
if (pos + 1 > end || pos + 1 + pos[0] > end) {
|
if (pos + 1 > end || pos + 1 + pos[0] > end) {
|
||||||
wpa_printf(MSG_DEBUG, "WNM: Invalid BSS Transition "
|
wpa_printf(MSG_DEBUG, "WNM: Invalid BSS Transition "
|
||||||
"Management Request (URL)");
|
"Management Request (URL)");
|
||||||
|
@ -623,8 +626,15 @@ static void ieee802_11_rx_bss_trans_mgmt_req(struct wpa_supplicant *wpa_s,
|
||||||
os_memcpy(url, pos + 1, pos[0]);
|
os_memcpy(url, pos + 1, pos[0]);
|
||||||
url[pos[0]] = '\0';
|
url[pos[0]] = '\0';
|
||||||
pos += 1 + pos[0];
|
pos += 1 + pos[0];
|
||||||
wpa_msg(wpa_s, MSG_INFO, "WNM: ESS Disassociation Imminent - "
|
|
||||||
"session_info_url=%s", url);
|
if (wpa_s->current_bss)
|
||||||
|
beacon_int = wpa_s->current_bss->beacon_int;
|
||||||
|
else
|
||||||
|
beacon_int = 100; /* best guess */
|
||||||
|
|
||||||
|
wpa_msg(wpa_s, MSG_INFO, ESS_DISASSOC_IMMINENT "%d %u %s",
|
||||||
|
wpa_sm_pmf_enabled(wpa_s->wpa),
|
||||||
|
wpa_s->wnm_dissoc_timer * beacon_int * 128 / 125, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wpa_s->wnm_mode & WNM_BSS_TM_REQ_DISASSOC_IMMINENT) {
|
if (wpa_s->wnm_mode & WNM_BSS_TM_REQ_DISASSOC_IMMINENT) {
|
||||||
|
|
|
@ -3036,6 +3036,8 @@ static void wpa_cli_action_process(const char *msg)
|
||||||
wpa_cli_exec(action_file, ctrl_ifname, pos);
|
wpa_cli_exec(action_file, ctrl_ifname, pos);
|
||||||
} else if (str_match(pos, AP_STA_DISCONNECTED)) {
|
} else if (str_match(pos, AP_STA_DISCONNECTED)) {
|
||||||
wpa_cli_exec(action_file, ctrl_ifname, pos);
|
wpa_cli_exec(action_file, ctrl_ifname, pos);
|
||||||
|
} else if (str_match(pos, ESS_DISASSOC_IMMINENT)) {
|
||||||
|
wpa_cli_exec(action_file, ctrl_ifname, pos);
|
||||||
} else if (str_match(pos, WPA_EVENT_TERMINATING)) {
|
} else if (str_match(pos, WPA_EVENT_TERMINATING)) {
|
||||||
printf("wpa_supplicant is terminating - stop monitoring\n");
|
printf("wpa_supplicant is terminating - stop monitoring\n");
|
||||||
wpa_cli_quit = 1;
|
wpa_cli_quit = 1;
|
||||||
|
|
Loading…
Reference in a new issue