nl80211: Use the monitor interface only without device_ap_sme support

The places using drv->use_monitor were already skipping creation of the
monitor interface if drv->device_ap_sme == 0. This means that the
monitor interface operations would not have worked anyway and it is safe
to set drv->use_monitor to zero for all such cases. This fixes an issue
with management frame subscription not happening properly for the case
where the AP SME is in the driver and the driver supports monitor
interfaces (for other purposes).

This commit also removes the check for monitor support and the
previously used workaround that cleared drv->use_monitor in
drv->device_ap_sme == 1 case if monitor interface was not supported
since that condition cannot occur anymore.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Sunil Dutt 2016-09-01 22:14:36 +05:30 committed by Jouni Malinen
parent 4ef3325fb6
commit 660103eca9

View file

@ -66,7 +66,6 @@ struct wiphy_info_data {
unsigned int device_ap_sme:1; unsigned int device_ap_sme:1;
unsigned int poll_command_supported:1; unsigned int poll_command_supported:1;
unsigned int data_tx_status:1; unsigned int data_tx_status:1;
unsigned int monitor_supported:1;
unsigned int auth_supported:1; unsigned int auth_supported:1;
unsigned int connect_supported:1; unsigned int connect_supported:1;
unsigned int p2p_go_supported:1; unsigned int p2p_go_supported:1;
@ -129,9 +128,6 @@ static void wiphy_info_supported_iftypes(struct wiphy_info_data *info,
case NL80211_IFTYPE_P2P_CLIENT: case NL80211_IFTYPE_P2P_CLIENT:
info->p2p_client_supported = 1; info->p2p_client_supported = 1;
break; break;
case NL80211_IFTYPE_MONITOR:
info->monitor_supported = 1;
break;
} }
} }
} }
@ -1038,21 +1034,8 @@ int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv)
* If poll command and tx status are supported, mac80211 is new enough * If poll command and tx status are supported, mac80211 is new enough
* to have everything we need to not need monitor interfaces. * to have everything we need to not need monitor interfaces.
*/ */
drv->use_monitor = !info.poll_command_supported || !info.data_tx_status; drv->use_monitor = !info.device_ap_sme &&
(!info.poll_command_supported || !info.data_tx_status);
if (drv->device_ap_sme && drv->use_monitor) {
/*
* Non-mac80211 drivers may not support monitor interface.
* Make sure we do not get stuck with incorrect capability here
* by explicitly testing this.
*/
if (!info.monitor_supported) {
wpa_printf(MSG_DEBUG, "nl80211: Disable use_monitor "
"with device_ap_sme since no monitor mode "
"support detected");
drv->use_monitor = 0;
}
}
/* /*
* If we aren't going to use monitor interfaces, but the * If we aren't going to use monitor interfaces, but the