浏览代码

hostapd: fix wpa_supplicant bringup with non-nl80211 drivers

Needed for wired 802.1x

Signed-off-by: Felix Fietkau <[email protected]>
Felix Fietkau 2 年之前
父节点
当前提交
fd6d7aafb2
共有 1 个文件被更改,包括 17 次插入0 次删除
  1. 17 0
      package/network/services/hostapd/src/wpa_supplicant/ucode.c

+ 17 - 0
package/network/services/hostapd/src/wpa_supplicant/ucode.c

@@ -136,6 +136,7 @@ static uc_value_t *
 uc_wpas_add_iface(uc_vm_t *vm, size_t nargs)
 {
 	uc_value_t *info = uc_fn_arg(0);
+	uc_value_t *driver = ucv_object_get(info, "driver", NULL);
 	uc_value_t *ifname = ucv_object_get(info, "iface", NULL);
 	uc_value_t *bridge = ucv_object_get(info, "bridge", NULL);
 	uc_value_t *config = ucv_object_get(info, "config", NULL);
@@ -154,6 +155,22 @@ uc_wpas_add_iface(uc_vm_t *vm, size_t nargs)
 		.ctrl_interface = ucv_string_get(ctrl),
 	};
 
+	if (driver) {
+		const char *drvname;
+		if (ucv_type(driver) != UC_STRING)
+			goto out;
+
+		iface.driver = NULL;
+		drvname = ucv_string_get(driver);
+		for (int i = 0; wpa_drivers[i]; i++) {
+			if (!strcmp(drvname, wpa_drivers[i]->name))
+				iface.driver = wpa_drivers[i]->name;
+		}
+
+		if (!iface.driver)
+			goto out;
+	}
+
 	if (!iface.ifname || !iface.confname)
 		goto out;