mac80211: add sta_state callback
(based on Eliad's patch) Add a callback to notify the low-level driver whenever the state of a station changes. The driver is only notified when the station is actually in the mac80211 hash table, not for pre-insert state transitions. To allow the driver to replace sta_add/remove calls with this, call extra transitions with the NOTEXIST state. This callback can fail, so we need to be careful in handling it when a station is inserted, particularly in the IBSS case where we still keep the station entry around for mac80211 purposes. Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
71ec375c75
commit
f09603a259
@ -981,6 +981,25 @@ enum set_key_cmd {
|
||||
SET_KEY, DISABLE_KEY,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ieee80211_sta_state - station state
|
||||
*
|
||||
* @IEEE80211_STA_NOTEXIST: station doesn't exist at all,
|
||||
* this is a special state for add/remove transitions
|
||||
* @IEEE80211_STA_NONE: station exists without special state
|
||||
* @IEEE80211_STA_AUTH: station is authenticated
|
||||
* @IEEE80211_STA_ASSOC: station is associated
|
||||
* @IEEE80211_STA_AUTHORIZED: station is authorized (802.1X)
|
||||
*/
|
||||
enum ieee80211_sta_state {
|
||||
/* NOTE: These need to be ordered correctly! */
|
||||
IEEE80211_STA_NOTEXIST,
|
||||
IEEE80211_STA_NONE,
|
||||
IEEE80211_STA_AUTH,
|
||||
IEEE80211_STA_ASSOC,
|
||||
IEEE80211_STA_AUTHORIZED,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ieee80211_sta - station table entry
|
||||
*
|
||||
@ -1974,6 +1993,13 @@ enum ieee80211_frame_release_type {
|
||||
* in AP mode, this callback will not be called when the flag
|
||||
* %IEEE80211_HW_AP_LINK_PS is set. Must be atomic.
|
||||
*
|
||||
* @sta_state: Notifies low level driver about state transition of a
|
||||
* station (which can be the AP, a client, IBSS/WDS/mesh peer etc.)
|
||||
* This callback is mutually exclusive with @sta_add/@sta_remove.
|
||||
* It must not fail for down transitions but may fail for transitions
|
||||
* up the list of states.
|
||||
* The callback can sleep.
|
||||
*
|
||||
* @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
|
||||
* bursting) for a hardware TX queue.
|
||||
* Returns a negative error code on failure.
|
||||
@ -2193,6 +2219,10 @@ struct ieee80211_ops {
|
||||
struct ieee80211_sta *sta);
|
||||
void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
enum sta_notify_cmd, struct ieee80211_sta *sta);
|
||||
int (*sta_state)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
enum ieee80211_sta_state old_state,
|
||||
enum ieee80211_sta_state new_state);
|
||||
int (*conf_tx)(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif, u16 queue,
|
||||
const struct ieee80211_tx_queue_params *params);
|
||||
|
Reference in New Issue
Block a user