WNM: Add placeholders for WNM driver commands and events

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Xi Chen 2012-02-26 17:22:02 +02:00 committed by Jouni Malinen
parent ada8a5bd60
commit a884be9da1
5 changed files with 80 additions and 1 deletions

View File

@ -601,6 +601,16 @@ int hostapd_drv_sta_disassoc(struct hostapd_data *hapd,
} }
int hostapd_drv_wnm_oper(struct hostapd_data *hapd, enum wnm_oper oper,
const u8 *peer, u8 *buf, u16 *buf_len)
{
if (hapd->driver == NULL || hapd->driver->wnm_oper == NULL)
return 0;
return hapd->driver->wnm_oper(hapd->drv_priv, oper, peer, buf,
buf_len);
}
int hostapd_drv_send_action(struct hostapd_data *hapd, unsigned int freq, int hostapd_drv_send_action(struct hostapd_data *hapd, unsigned int freq,
unsigned int wait, const u8 *dst, const u8 *data, unsigned int wait, const u8 *dst, const u8 *data,
size_t len) size_t len)

View File

@ -101,6 +101,10 @@ int hostapd_add_tspec(struct hostapd_data *hapd, const u8 *addr,
#include "drivers/driver.h" #include "drivers/driver.h"
int hostapd_drv_wnm_oper(struct hostapd_data *hapd,
enum wnm_oper oper, const u8 *peer,
u8 *buf, u16 *buf_len);
static inline int hostapd_drv_set_countermeasures(struct hostapd_data *hapd, static inline int hostapd_drv_set_countermeasures(struct hostapd_data *hapd,
int enabled) int enabled)
{ {

View File

@ -999,6 +999,23 @@ enum tdls_oper {
TDLS_DISABLE TDLS_DISABLE
}; };
enum wnm_oper {
WNM_SLEEP_ENTER_CONFIRM,
WNM_SLEEP_ENTER_FAIL,
WNM_SLEEP_EXIT_CONFIRM,
WNM_SLEEP_EXIT_FAIL,
WNM_SLEEP_TFS_REQ_IE_ADD, /* STA requests driver to add TFS req IE */
WNM_SLEEP_TFS_REQ_IE_NONE, /* STA requests empty TFS req IE */
WNM_SLEEP_TFS_REQ_IE_SET, /* AP requests driver to set TFS req IE for
* a STA */
WNM_SLEEP_TFS_RESP_IE_ADD, /* AP requests driver to add TFS resp IE
* for a STA */
WNM_SLEEP_TFS_RESP_IE_NONE, /* AP requests empty TFS resp IE */
WNM_SLEEP_TFS_RESP_IE_SET, /* AP requests driver to set TFS resp IE
* for a STA */
WNM_SLEEP_TFS_IE_DEL /* AP delete the TFS IE */
};
/** /**
* struct wpa_signal_info - Information about channel signal quality * struct wpa_signal_info - Information about channel signal quality
*/ */
@ -2414,6 +2431,18 @@ struct wpa_driver_ops {
*/ */
int (*tdls_oper)(void *priv, enum tdls_oper oper, const u8 *peer); int (*tdls_oper)(void *priv, enum tdls_oper oper, const u8 *peer);
/**
* wnm_oper - Notify driver of the WNM frame reception
* @priv: Private driver interface data
* @oper: WNM operation. See %enum wnm_oper
* @peer: Destination (peer) MAC address
* @buf: Buffer for the driver to fill in (for getting IE)
* @buf_len: Return the len of buf
* Returns: 0 on success, negative (<0) on failure
*/
int (*wnm_oper)(void *priv, enum wnm_oper oper, const u8 *peer,
u8 *buf, u16 *buf_len);
/** /**
* signal_poll - Get current connection information * signal_poll - Get current connection information
* @priv: Private driver interface data * @priv: Private driver interface data
@ -3011,7 +3040,14 @@ enum wpa_event_type {
* *
* Described in wpa_event_data.ch_switch * Described in wpa_event_data.ch_switch
* */ * */
EVENT_CH_SWITCH EVENT_CH_SWITCH,
/**
* EVENT_WNM - Request WNM operation
*
* This event can be used to request a WNM operation to be performed.
*/
EVENT_WNM
}; };
@ -3213,6 +3249,24 @@ union wpa_event_data {
u16 reason_code; /* for teardown */ u16 reason_code; /* for teardown */
} tdls; } tdls;
/**
* struct wnm - Data for EVENT_WNM
*/
struct wnm {
u8 addr[ETH_ALEN];
enum {
WNM_OPER_SLEEP,
} oper;
enum {
WNM_SLEEP_ENTER,
WNM_SLEEP_EXIT
} sleep_action;
int sleep_intval;
u16 reason_code;
u8 *buf;
u16 buf_len;
} wnm;
/** /**
* struct ft_ies - FT information elements (EVENT_FT_RESPONSE) * struct ft_ies - FT information elements (EVENT_FT_RESPONSE)
* *

View File

@ -78,6 +78,7 @@ const char * event_to_string(enum wpa_event_type event)
E2S(DRIVER_CLIENT_POLL_OK); E2S(DRIVER_CLIENT_POLL_OK);
E2S(EAPOL_TX_STATUS); E2S(EAPOL_TX_STATUS);
E2S(CH_SWITCH); E2S(CH_SWITCH);
E2S(WNM);
} }
return "UNKNOWN"; return "UNKNOWN";

View File

@ -680,4 +680,14 @@ static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
return wpa_s->driver->switch_channel(wpa_s->drv_priv, freq); return wpa_s->driver->switch_channel(wpa_s->drv_priv, freq);
} }
static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
enum wnm_oper oper, const u8 *peer,
u8 *buf, u16 *buf_len)
{
if (!wpa_s->driver->wnm_oper)
return -1;
return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf,
buf_len);
}
#endif /* DRIVER_I_H */ #endif /* DRIVER_I_H */