forked from Minki/linux
mac80211: notify driver about IBSS status
Some drivers (e.g. iwlwifi) need to know and try to figure it out based on other things, but making it explicit is definitely better. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
76f2736401
commit
8fc214ba95
@ -145,6 +145,7 @@ struct ieee80211_low_level_stats {
|
|||||||
* @BSS_CHANGED_BEACON_ENABLED: Beaconing should be
|
* @BSS_CHANGED_BEACON_ENABLED: Beaconing should be
|
||||||
* enabled/disabled (beaconing modes)
|
* enabled/disabled (beaconing modes)
|
||||||
* @BSS_CHANGED_CQM: Connection quality monitor config changed
|
* @BSS_CHANGED_CQM: Connection quality monitor config changed
|
||||||
|
* @BSS_CHANGED_IBSS: IBSS join status changed
|
||||||
*/
|
*/
|
||||||
enum ieee80211_bss_change {
|
enum ieee80211_bss_change {
|
||||||
BSS_CHANGED_ASSOC = 1<<0,
|
BSS_CHANGED_ASSOC = 1<<0,
|
||||||
@ -158,6 +159,7 @@ enum ieee80211_bss_change {
|
|||||||
BSS_CHANGED_BEACON = 1<<8,
|
BSS_CHANGED_BEACON = 1<<8,
|
||||||
BSS_CHANGED_BEACON_ENABLED = 1<<9,
|
BSS_CHANGED_BEACON_ENABLED = 1<<9,
|
||||||
BSS_CHANGED_CQM = 1<<10,
|
BSS_CHANGED_CQM = 1<<10,
|
||||||
|
BSS_CHANGED_IBSS = 1<<11,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -167,6 +169,8 @@ enum ieee80211_bss_change {
|
|||||||
* to that BSS) that can change during the lifetime of the BSS.
|
* to that BSS) that can change during the lifetime of the BSS.
|
||||||
*
|
*
|
||||||
* @assoc: association status
|
* @assoc: association status
|
||||||
|
* @ibss_joined: indicates whether this station is part of an IBSS
|
||||||
|
* or not
|
||||||
* @aid: association ID number, valid only when @assoc is true
|
* @aid: association ID number, valid only when @assoc is true
|
||||||
* @use_cts_prot: use CTS protection
|
* @use_cts_prot: use CTS protection
|
||||||
* @use_short_preamble: use 802.11b short preamble;
|
* @use_short_preamble: use 802.11b short preamble;
|
||||||
@ -194,7 +198,7 @@ enum ieee80211_bss_change {
|
|||||||
struct ieee80211_bss_conf {
|
struct ieee80211_bss_conf {
|
||||||
const u8 *bssid;
|
const u8 *bssid;
|
||||||
/* association related data */
|
/* association related data */
|
||||||
bool assoc;
|
bool assoc, ibss_joined;
|
||||||
u16 aid;
|
u16 aid;
|
||||||
/* erp related data */
|
/* erp related data */
|
||||||
bool use_cts_prot;
|
bool use_cts_prot;
|
||||||
|
@ -170,6 +170,8 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
|
|||||||
bss_change |= BSS_CHANGED_BSSID;
|
bss_change |= BSS_CHANGED_BSSID;
|
||||||
bss_change |= BSS_CHANGED_BEACON;
|
bss_change |= BSS_CHANGED_BEACON;
|
||||||
bss_change |= BSS_CHANGED_BEACON_ENABLED;
|
bss_change |= BSS_CHANGED_BEACON_ENABLED;
|
||||||
|
bss_change |= BSS_CHANGED_IBSS;
|
||||||
|
sdata->vif.bss_conf.ibss_joined = true;
|
||||||
ieee80211_bss_info_change_notify(sdata, bss_change);
|
ieee80211_bss_info_change_notify(sdata, bss_change);
|
||||||
|
|
||||||
ieee80211_sta_def_wmm_params(sdata, sband->n_bitrates, supp_rates);
|
ieee80211_sta_def_wmm_params(sdata, sband->n_bitrates, supp_rates);
|
||||||
@ -950,7 +952,9 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
|
|||||||
kfree(sdata->u.ibss.ie);
|
kfree(sdata->u.ibss.ie);
|
||||||
skb = sdata->u.ibss.presp;
|
skb = sdata->u.ibss.presp;
|
||||||
rcu_assign_pointer(sdata->u.ibss.presp, NULL);
|
rcu_assign_pointer(sdata->u.ibss.presp, NULL);
|
||||||
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);
|
sdata->vif.bss_conf.ibss_joined = false;
|
||||||
|
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED |
|
||||||
|
BSS_CHANGED_IBSS);
|
||||||
synchronize_rcu();
|
synchronize_rcu();
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user