diff options
Diffstat (limited to 'net/mac80211/sta_info.c')
-rw-r--r-- | net/mac80211/sta_info.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 47da552ce8a6..f735826f055c 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
@@ -119,6 +119,27 @@ struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata, | |||
119 | return sta; | 119 | return sta; |
120 | } | 120 | } |
121 | 121 | ||
122 | /* | ||
123 | * Get sta info either from the specified interface | ||
124 | * or from one of its vlans | ||
125 | */ | ||
126 | struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata, | ||
127 | const u8 *addr) | ||
128 | { | ||
129 | struct ieee80211_local *local = sdata->local; | ||
130 | struct sta_info *sta; | ||
131 | |||
132 | sta = rcu_dereference(local->sta_hash[STA_HASH(addr)]); | ||
133 | while (sta) { | ||
134 | if ((sta->sdata == sdata || | ||
135 | sta->sdata->bss == sdata->bss) && | ||
136 | memcmp(sta->sta.addr, addr, ETH_ALEN) == 0) | ||
137 | break; | ||
138 | sta = rcu_dereference(sta->hnext); | ||
139 | } | ||
140 | return sta; | ||
141 | } | ||
142 | |||
122 | struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata, | 143 | struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata, |
123 | int idx) | 144 | int idx) |
124 | { | 145 | { |