Parcourir la source

driver_nl80211: Fix initial iftype change

Need to set drv->ifindex before calling set_mode(). In addition, set the
mode before setting the interface up to avoid having to set it down
again.

Add more useful error message on mode changes.
Jouni Malinen il y a 16 ans
Parent
commit
a87c9d9609
1 fichiers modifiés avec 11 ajouts et 9 suppressions
  1. 11 9
      src/drivers/driver_nl80211.c

+ 11 - 9
src/drivers/driver_nl80211.c

@@ -1469,6 +1469,13 @@ wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv)
 {
 	int flags;
 
+	drv->ifindex = if_nametoindex(drv->ifname);
+
+	if (wpa_driver_nl80211_set_mode(drv, 0) < 0) {
+		wpa_printf(MSG_DEBUG, "nl80211: Could not configure driver to "
+			   "use managed mode");
+	}
+
 	if (wpa_driver_nl80211_get_ifflags(drv, &flags) != 0) {
 		wpa_printf(MSG_ERROR, "Could not get interface '%s' flags",
 			   drv->ifname);
@@ -1489,15 +1496,8 @@ wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv)
 	wpa_driver_nl80211_flush_pmkid(drv);
 #endif /* WEXT_COMPAT */
 
-	if (wpa_driver_nl80211_set_mode(drv, 0) < 0) {
-		wpa_printf(MSG_DEBUG, "nl80211: Could not configure driver to "
-			   "use managed mode");
-	}
-
 	wpa_driver_nl80211_get_range(drv);
 
-	drv->ifindex = if_nametoindex(drv->ifname);
-
 	wpa_driver_nl80211_capa(drv);
 
 	wpa_driver_nl80211_send_oper_ifla(drv, 1, IF_OPER_DORMANT);
@@ -2408,7 +2408,8 @@ static int wpa_driver_nl80211_set_mode(struct wpa_driver_nl80211_data *drv,
 		goto try_again;
 
 nla_put_failure:
-	wpa_printf(MSG_ERROR, "nl80211: Failed to set interface mode");
+	wpa_printf(MSG_ERROR, "nl80211: Failed to set interface mode: %d (%s)",
+		   ret, strerror(-ret));
 	return -1;
 
 try_again:
@@ -2433,7 +2434,8 @@ try_again:
 		ret = send_and_recv_msgs(drv, msg, NULL, NULL);
 		if (ret) {
 			wpa_printf(MSG_ERROR, "Failed to set interface %s "
-				   "mode", drv->ifname);
+				   "mode(try_again): %d (%s)",
+				   drv->ifname, ret, strerror(-ret));
 		}
 
 		/* Ignore return value of get_ifflags to ensure that the device