nl80211: Fix P2P Device handling when starting with RF-kill blocked
authorMoshe Benji <Moshe.Benji@intel.com>
Mon, 3 Mar 2014 12:53:21 +0000 (14:53 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 11 Mar 2014 17:22:03 +0000 (19:22 +0200)
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 <Moshe.Benji@intel.com>
src/drivers/driver_nl80211.c

index bd2c39b..2ebd1b3 100644 (file)
@@ -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)