mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 00:38:24 -05:00
Make STA opmode change event available to upper layers
Add an event callback for EVENT_STATION_OPMODE_CHANGED to allow user/application to get the notification whenever there is a change in a station's HT/VHT op mode. The new events: STA-OPMODE-MAX-BW-CHANGED <addr> <20(no-HT)|20|40|80|80+80|160> STA-OPMODE-SMPS-MODE-CHANGED <addr> <automatic|off|dynamic|static> STA-OPMODE-N_SS-CHANGED <addr> <N_SS> Signed-off-by: Tamizh chelvam <tamizhr@codeaurora.org>
This commit is contained in:
parent
e8ada1600f
commit
ec2b5173ce
@ -653,6 +653,73 @@ void hostapd_event_sta_low_ack(struct hostapd_data *hapd, const u8 *addr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void hostapd_event_sta_opmode_changed(struct hostapd_data *hapd, const u8 *addr,
|
||||||
|
enum smps_mode smps_mode,
|
||||||
|
enum chan_width chan_width, u8 rx_nss)
|
||||||
|
{
|
||||||
|
struct sta_info *sta = ap_get_sta(hapd, addr);
|
||||||
|
const char *txt;
|
||||||
|
|
||||||
|
if (!sta)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (smps_mode) {
|
||||||
|
case SMPS_AUTOMATIC:
|
||||||
|
txt = "automatic";
|
||||||
|
break;
|
||||||
|
case SMPS_OFF:
|
||||||
|
txt = "off";
|
||||||
|
break;
|
||||||
|
case SMPS_DYNAMIC:
|
||||||
|
txt = "dynamic";
|
||||||
|
break;
|
||||||
|
case SMPS_STATIC:
|
||||||
|
txt = "static";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
txt = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (txt) {
|
||||||
|
wpa_msg(hapd->msg_ctx, MSG_INFO, STA_OPMODE_SMPS_MODE_CHANGED
|
||||||
|
MACSTR " %s", MAC2STR(addr), txt);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (chan_width) {
|
||||||
|
case CHAN_WIDTH_20_NOHT:
|
||||||
|
txt = "20(no-HT)";
|
||||||
|
break;
|
||||||
|
case CHAN_WIDTH_20:
|
||||||
|
txt = "20";
|
||||||
|
break;
|
||||||
|
case CHAN_WIDTH_40:
|
||||||
|
txt = "40";
|
||||||
|
break;
|
||||||
|
case CHAN_WIDTH_80:
|
||||||
|
txt = "80";
|
||||||
|
break;
|
||||||
|
case CHAN_WIDTH_80P80:
|
||||||
|
txt = "80+80";
|
||||||
|
break;
|
||||||
|
case CHAN_WIDTH_160:
|
||||||
|
txt = "160";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
txt = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (txt) {
|
||||||
|
wpa_msg(hapd->msg_ctx, MSG_INFO, STA_OPMODE_MAX_BW_CHANGED
|
||||||
|
MACSTR " %s", MAC2STR(addr), txt);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rx_nss != 0xff) {
|
||||||
|
wpa_msg(hapd->msg_ctx, MSG_INFO, STA_OPMODE_N_SS_CHANGED
|
||||||
|
MACSTR " %d", MAC2STR(addr), rx_nss);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht,
|
void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht,
|
||||||
int offset, int width, int cf1, int cf2)
|
int offset, int width, int cf1, int cf2)
|
||||||
{
|
{
|
||||||
@ -1614,6 +1681,12 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
|
|||||||
&data->acs_selected_channels);
|
&data->acs_selected_channels);
|
||||||
break;
|
break;
|
||||||
#endif /* CONFIG_ACS */
|
#endif /* CONFIG_ACS */
|
||||||
|
case EVENT_STATION_OPMODE_CHANGED:
|
||||||
|
hostapd_event_sta_opmode_changed(hapd, data->sta_opmode.addr,
|
||||||
|
data->sta_opmode.smps_mode,
|
||||||
|
data->sta_opmode.chan_width,
|
||||||
|
data->sta_opmode.rx_nss);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
wpa_printf(MSG_DEBUG, "Unknown event %d", event);
|
wpa_printf(MSG_DEBUG, "Unknown event %d", event);
|
||||||
break;
|
break;
|
||||||
|
@ -608,6 +608,9 @@ hostapd_get_eap_user(struct hostapd_data *hapd, const u8 *identity,
|
|||||||
|
|
||||||
struct hostapd_data * hostapd_get_iface(struct hapd_interfaces *interfaces,
|
struct hostapd_data * hostapd_get_iface(struct hapd_interfaces *interfaces,
|
||||||
const char *ifname);
|
const char *ifname);
|
||||||
|
void hostapd_event_sta_opmode_changed(struct hostapd_data *hapd, const u8 *addr,
|
||||||
|
enum smps_mode smps_mode,
|
||||||
|
enum chan_width chan_width, u8 rx_nss);
|
||||||
|
|
||||||
#ifdef CONFIG_FST
|
#ifdef CONFIG_FST
|
||||||
void fst_hostapd_fill_iface_obj(struct hostapd_data *hapd,
|
void fst_hostapd_fill_iface_obj(struct hostapd_data *hapd,
|
||||||
|
@ -345,6 +345,11 @@ extern "C" {
|
|||||||
* parameters: sa=<STA MAC address> signal=<signal> */
|
* parameters: sa=<STA MAC address> signal=<signal> */
|
||||||
#define RX_PROBE_REQUEST "RX-PROBE-REQUEST "
|
#define RX_PROBE_REQUEST "RX-PROBE-REQUEST "
|
||||||
|
|
||||||
|
/* Event to indicate station's HT/VHT operation mode change information */
|
||||||
|
#define STA_OPMODE_MAX_BW_CHANGED "STA-OPMODE-MAX-BW-CHANGED "
|
||||||
|
#define STA_OPMODE_SMPS_MODE_CHANGED "STA-OPMODE-SMPS-MODE-CHANGED "
|
||||||
|
#define STA_OPMODE_N_SS_CHANGED "STA-OPMODE-N_SS-CHANGED "
|
||||||
|
|
||||||
/* BSS command information masks */
|
/* BSS command information masks */
|
||||||
|
|
||||||
#define WPA_BSS_MASK_ALL 0xFFFDFFFF
|
#define WPA_BSS_MASK_ALL 0xFFFDFFFF
|
||||||
|
@ -4609,6 +4609,18 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
|
|||||||
case EVENT_PORT_AUTHORIZED:
|
case EVENT_PORT_AUTHORIZED:
|
||||||
wpa_supplicant_event_port_authorized(wpa_s);
|
wpa_supplicant_event_port_authorized(wpa_s);
|
||||||
break;
|
break;
|
||||||
|
case EVENT_STATION_OPMODE_CHANGED:
|
||||||
|
#ifdef CONFIG_AP
|
||||||
|
if (!wpa_s->ap_iface || !data)
|
||||||
|
break;
|
||||||
|
|
||||||
|
hostapd_event_sta_opmode_changed(wpa_s->ap_iface->bss[0],
|
||||||
|
data->sta_opmode.addr,
|
||||||
|
data->sta_opmode.smps_mode,
|
||||||
|
data->sta_opmode.chan_width,
|
||||||
|
data->sta_opmode.rx_nss);
|
||||||
|
#endif /* CONFIG_AP */
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
wpa_msg(wpa_s, MSG_INFO, "Unknown event %d", event);
|
wpa_msg(wpa_s, MSG_INFO, "Unknown event %d", event);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user