[MAC80211]: add sta_notify callback
This patch adds sta_notify callback and removes sta_table_notification which was not used by any driver. sta_notify() is essential for drivers that keeps notion of station internally and need to be notified about removal or addition of a station to the (I)BSS or assocation to an AP. This version adds interface id to the parameter list as suggested by Johannes Berg Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
42613db760
commit
478f8d2ba5
@ -613,6 +613,18 @@ enum set_key_cmd {
|
|||||||
SET_KEY, DISABLE_KEY,
|
SET_KEY, DISABLE_KEY,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum sta_notify_cmd - sta notify command
|
||||||
|
*
|
||||||
|
* Used with the sta_notify() callback in &struct ieee80211_ops, this
|
||||||
|
* indicates addition and removal of a station to station table
|
||||||
|
*
|
||||||
|
* @STA_NOTIFY_ADD: a station was added to the station table
|
||||||
|
* @STA_NOTIFY_REMOVE: a station being removed from the station table
|
||||||
|
*/
|
||||||
|
enum sta_notify_cmd {
|
||||||
|
STA_NOTIFY_ADD, STA_NOTIFY_REMOVE
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum ieee80211_hw_flags - hardware flags
|
* enum ieee80211_hw_flags - hardware flags
|
||||||
@ -957,8 +969,8 @@ enum ieee80211_erp_change_flags {
|
|||||||
*
|
*
|
||||||
* @set_retry_limit: Configuration of retry limits (if device needs it)
|
* @set_retry_limit: Configuration of retry limits (if device needs it)
|
||||||
*
|
*
|
||||||
* @sta_table_notification: Number of STAs in STA table notification. Must
|
* @sta_notify: Notifies low level driver about addition or removal
|
||||||
* be atomic.
|
* of assocaited station or AP.
|
||||||
*
|
*
|
||||||
* @erp_ie_changed: Handle ERP IE change notifications. Must be atomic.
|
* @erp_ie_changed: Handle ERP IE change notifications. Must be atomic.
|
||||||
*
|
*
|
||||||
@ -1025,8 +1037,8 @@ struct ieee80211_ops {
|
|||||||
int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value);
|
int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value);
|
||||||
int (*set_retry_limit)(struct ieee80211_hw *hw,
|
int (*set_retry_limit)(struct ieee80211_hw *hw,
|
||||||
u32 short_retry, u32 long_retr);
|
u32 short_retry, u32 long_retr);
|
||||||
void (*sta_table_notification)(struct ieee80211_hw *hw,
|
void (*sta_notify)(struct ieee80211_hw *hw, int if_id,
|
||||||
int num_sta);
|
enum sta_notify_cmd, const u8 *addr);
|
||||||
void (*erp_ie_changed)(struct ieee80211_hw *hw, u8 changes,
|
void (*erp_ie_changed)(struct ieee80211_hw *hw, u8 changes,
|
||||||
int cts_protection, int preamble);
|
int cts_protection, int preamble);
|
||||||
int (*conf_tx)(struct ieee80211_hw *hw, int queue,
|
int (*conf_tx)(struct ieee80211_hw *hw, int queue,
|
||||||
|
@ -159,9 +159,9 @@ struct sta_info * sta_info_add(struct ieee80211_local *local,
|
|||||||
list_add(&sta->list, &local->sta_list);
|
list_add(&sta->list, &local->sta_list);
|
||||||
local->num_sta++;
|
local->num_sta++;
|
||||||
sta_info_hash_add(local, sta);
|
sta_info_hash_add(local, sta);
|
||||||
if (local->ops->sta_table_notification)
|
if (local->ops->sta_notify)
|
||||||
local->ops->sta_table_notification(local_to_hw(local),
|
local->ops->sta_notify(local_to_hw(local), dev->ifindex,
|
||||||
local->num_sta);
|
STA_NOTIFY_ADD, addr);
|
||||||
write_unlock_bh(&local->sta_lock);
|
write_unlock_bh(&local->sta_lock);
|
||||||
|
|
||||||
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
|
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
|
||||||
@ -199,9 +199,6 @@ void sta_info_remove(struct sta_info *sta)
|
|||||||
local->num_sta--;
|
local->num_sta--;
|
||||||
sta_info_remove_aid_ptr(sta);
|
sta_info_remove_aid_ptr(sta);
|
||||||
|
|
||||||
if (local->ops->sta_table_notification)
|
|
||||||
local->ops->sta_table_notification(local_to_hw(local),
|
|
||||||
local->num_sta);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sta_info_free(struct sta_info *sta)
|
void sta_info_free(struct sta_info *sta)
|
||||||
@ -232,6 +229,10 @@ void sta_info_free(struct sta_info *sta)
|
|||||||
ieee80211_key_free(sta->key);
|
ieee80211_key_free(sta->key);
|
||||||
sta->key = NULL;
|
sta->key = NULL;
|
||||||
|
|
||||||
|
if (local->ops->sta_notify)
|
||||||
|
local->ops->sta_notify(local_to_hw(local), sta->dev->ifindex,
|
||||||
|
STA_NOTIFY_REMOVE, sta->addr);
|
||||||
|
|
||||||
rate_control_remove_sta_debugfs(sta);
|
rate_control_remove_sta_debugfs(sta);
|
||||||
ieee80211_sta_debugfs_remove(sta);
|
ieee80211_sta_debugfs_remove(sta);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user