summaryrefslogtreecommitdiffstats
path: root/package/hostapd/patches/320-nl80211_multicall_fixes.patch
blob: 6a8926d478497c6fc6f966942eecbee95491003c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -2289,6 +2289,7 @@ static void * wpa_driver_nl80211_init(vo
 	drv->monitor_ifidx = -1;
 	drv->monitor_sock = -1;
 	drv->ap_scan_as_station = NL80211_IFTYPE_UNSPECIFIED;
+	drv->nlmode = NL80211_IFTYPE_STATION;
 
 	if (wpa_driver_nl80211_init_nl(drv)) {
 		os_free(drv);
@@ -2446,37 +2447,37 @@ wpa_driver_nl80211_finish_drv_init(struc
 	drv->ifindex = if_nametoindex(bss->ifname);
 	drv->first_bss.ifindex = drv->ifindex;
 
-#ifndef HOSTAPD
-	/*
-	 * Make sure the interface starts up in station mode unless this is a
-	 * dynamically added interface (e.g., P2P) that was already configured
-	 * with proper iftype.
-	 */
-	if ((drv->global == NULL ||
-	     drv->ifindex != drv->global->if_add_ifindex) &&
-	    wpa_driver_nl80211_set_mode(bss, NL80211_IFTYPE_STATION) < 0) {
-		wpa_printf(MSG_ERROR, "nl80211: Could not configure driver to "
-			   "use managed mode");
-		return -1;
-	}
-
-	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 {
-			wpa_printf(MSG_ERROR, "nl80211: Could not set "
-				   "interface '%s' UP", bss->ifname);
+	if (drv->nlmode == NL80211_IFTYPE_STATION) {
+		/*
+		 * Make sure the interface starts up in station mode unless this is a
+		 * dynamically added interface (e.g., P2P) that was already configured
+		 * with proper iftype.
+		 */
+		if ((drv->global == NULL ||
+			 drv->ifindex != drv->global->if_add_ifindex) &&
+			wpa_driver_nl80211_set_mode(bss, NL80211_IFTYPE_STATION) < 0) {
+			wpa_printf(MSG_ERROR, "nl80211: Could not configure driver to "
+				   "use managed mode");
 			return -1;
 		}
-	}
 
-	netlink_send_oper_ifla(drv->global->netlink, drv->ifindex,
-			       1, IF_OPER_DORMANT);
-#endif /* HOSTAPD */
+		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 {
+				wpa_printf(MSG_ERROR, "nl80211: Could not set "
+					   "interface '%s' UP", bss->ifname);
+				return -1;
+			}
+		}
+
+		netlink_send_oper_ifla(drv->global->netlink, drv->ifindex,
+					   1, IF_OPER_DORMANT);
+	}
 
 	if (wpa_driver_nl80211_capa(drv))
 		return -1;