mac80211: let sta_info_get_by_idx get sta by sdata

Instead of filtering by device, directly look up by sdata.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Johannes Berg 2009-11-16 12:00:37 +01:00 committed by John W. Linville
parent cb53a150ca
commit 3b53fde8ac
3 changed files with 8 additions and 7 deletions

View File

@ -398,13 +398,13 @@ static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
static int ieee80211_dump_station(struct wiphy *wiphy, struct net_device *dev, static int ieee80211_dump_station(struct wiphy *wiphy, struct net_device *dev,
int idx, u8 *mac, struct station_info *sinfo) int idx, u8 *mac, struct station_info *sinfo)
{ {
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
struct sta_info *sta; struct sta_info *sta;
int ret = -ENOENT; int ret = -ENOENT;
rcu_read_lock(); rcu_read_lock();
sta = sta_info_get_by_idx(local, idx, dev); sta = sta_info_get_by_idx(sdata, idx);
if (sta) { if (sta) {
ret = 0; ret = 0;
memcpy(mac, sta->sta.addr, ETH_ALEN); memcpy(mac, sta->sta.addr, ETH_ALEN);

View File

@ -116,14 +116,15 @@ struct sta_info *sta_info_get(struct ieee80211_local *local, const u8 *addr)
return sta; return sta;
} }
struct sta_info *sta_info_get_by_idx(struct ieee80211_local *local, int idx, struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
struct net_device *dev) int idx)
{ {
struct ieee80211_local *local = sdata->local;
struct sta_info *sta; struct sta_info *sta;
int i = 0; int i = 0;
list_for_each_entry_rcu(sta, &local->sta_list, list) { list_for_each_entry_rcu(sta, &local->sta_list, list) {
if (dev && dev != sta->sdata->dev) if (sdata != sta->sdata)
continue; continue;
if (i < idx) { if (i < idx) {
++i; ++i;

View File

@ -409,8 +409,8 @@ struct sta_info *sta_info_get(struct ieee80211_local *local, const u8 *addr);
/* /*
* Get STA info by index, BROKEN! * Get STA info by index, BROKEN!
*/ */
struct sta_info *sta_info_get_by_idx(struct ieee80211_local *local, int idx, struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
struct net_device *dev); int idx);
/* /*
* Create a new STA info, caller owns returned structure * Create a new STA info, caller owns returned structure
* until sta_info_insert(). * until sta_info_insert().