From 8c06db703d8cfd630a8eb738443a3d9134a3fc4a Mon Sep 17 00:00:00 2001 From: Moshe Benji Date: Mon, 3 Mar 2014 14:53:21 +0200 Subject: [PATCH 1/1] nl80211: Fix P2P Device handling when starting with RF-kill blocked On RF-kill, we should not request the kernel to start a P2P device. In addition, we should call i802_set_iface_flags() both for a P2P Device interface and any other interface instead of calling a dedicated function for each. Signed-off-by: Moshe Benji --- src/drivers/driver_nl80211.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index bd2c39b..2ebd1b3 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -4642,26 +4642,25 @@ wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv, return -1; } - if (nlmode == NL80211_IFTYPE_P2P_DEVICE) { - int ret = nl80211_set_p2pdev(bss, 1); - if (ret < 0) - wpa_printf(MSG_ERROR, "nl80211: Could not start P2P device"); + if (nlmode == NL80211_IFTYPE_P2P_DEVICE) nl80211_get_macaddr(bss); - return ret; - } - if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1)) { - if (rfkill_is_blocked(drv->rfkill)) { - wpa_printf(MSG_DEBUG, "nl80211: Could not yet enable " - "interface '%s' due to rfkill", - bss->ifname); - drv->if_disabled = 1; - send_rfkill_event = 1; - } else { + if (!rfkill_is_blocked(drv->rfkill)) { + int ret = i802_set_iface_flags(bss, 1); + if (ret) { wpa_printf(MSG_ERROR, "nl80211: Could not set " "interface '%s' UP", bss->ifname); - return -1; + return ret; } + if (nlmode == NL80211_IFTYPE_P2P_DEVICE) + return ret; + } else { + wpa_printf(MSG_DEBUG, "nl80211: Could not yet enable " + "interface '%s' due to rfkill", bss->ifname); + if (nlmode == NL80211_IFTYPE_P2P_DEVICE) + return 0; + drv->if_disabled = 1; + send_rfkill_event = 1; } if (!drv->hostapd) -- 2.1.4