提交 478f8d2b 编写于 作者: T Tomas Winkler 提交者: David S. Miller

[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: NTomas Winkler <tomas.winkler@intel.com>
Acked-by: NJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 42613db7
...@@ -613,6 +613,18 @@ enum set_key_cmd { ...@@ -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 { ...@@ -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 { ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册