|
@@ -676,7 +676,8 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
|
|
|
|
|
|
set_bit(SDATA_STATE_RUNNING, &sdata->state);
|
|
set_bit(SDATA_STATE_RUNNING, &sdata->state);
|
|
|
|
|
|
- if (sdata->vif.type == NL80211_IFTYPE_WDS) {
|
|
|
|
|
|
+ switch (sdata->vif.type) {
|
|
|
|
+ case NL80211_IFTYPE_WDS:
|
|
/* Create STA entry for the WDS peer */
|
|
/* Create STA entry for the WDS peer */
|
|
sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr,
|
|
sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr,
|
|
GFP_KERNEL);
|
|
GFP_KERNEL);
|
|
@@ -697,8 +698,17 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
|
|
|
|
|
|
rate_control_rate_init(sta);
|
|
rate_control_rate_init(sta);
|
|
netif_carrier_on(dev);
|
|
netif_carrier_on(dev);
|
|
- } else if (sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) {
|
|
|
|
|
|
+ break;
|
|
|
|
+ case NL80211_IFTYPE_P2P_DEVICE:
|
|
rcu_assign_pointer(local->p2p_sdata, sdata);
|
|
rcu_assign_pointer(local->p2p_sdata, sdata);
|
|
|
|
+ break;
|
|
|
|
+ case NL80211_IFTYPE_MONITOR:
|
|
|
|
+ if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES)
|
|
|
|
+ break;
|
|
|
|
+ list_add_tail_rcu(&sdata->u.mntr.list, &local->mon_list);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -816,6 +826,11 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
|
|
case NL80211_IFTYPE_AP:
|
|
case NL80211_IFTYPE_AP:
|
|
cancel_work_sync(&sdata->u.ap.request_smps_work);
|
|
cancel_work_sync(&sdata->u.ap.request_smps_work);
|
|
break;
|
|
break;
|
|
|
|
+ case NL80211_IFTYPE_MONITOR:
|
|
|
|
+ if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES)
|
|
|
|
+ break;
|
|
|
|
+ list_del_rcu(&sdata->u.mntr.list);
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|