- uci_to_blob(&b, s, wdev->drv->station.config);
- wireless_station_create(wdev, vif, b.head, s->anonymous ? name : s->e.name);
+ uci_to_blob(&b, s, wdev->drv->interface.config);
+ vif = wireless_interface_create(wdev, b.head, s->anonymous ? name : s->e.name);
+ if (!vif)
+ return;
+
+ vif->vlan_idx = vif->sta_idx = 0;
+ vlist_update(&vif->vlans);
+ vlist_update(&vif->stations);
+
+ if (s->anonymous)
+ goto out;
+
+ uci_foreach_element(&uci_wireless->sections, f) {
+ struct uci_section *cur = uci_to_section(f);
+ const char *vif_name;
+
+ if (strcmp(cur->type, "wifi-vlan") != 0)
+ continue;
+
+ vif_name = uci_lookup_option_string(uci_ctx, cur, "iface");
+ if (vif_name && strcmp(s->e.name, vif_name))
+ continue;
+ config_parse_wireless_vlan(vif, cur);
+ }
+
+ uci_foreach_element(&uci_wireless->sections, f) {
+ struct uci_section *cur = uci_to_section(f);
+ const char *vif_name;
+
+ if (strcmp(cur->type, "wifi-station") != 0)
+ continue;
+
+ vif_name = uci_lookup_option_string(uci_ctx, cur, "iface");
+ if (vif_name && strcmp(s->e.name, vif_name))
+ continue;
+ config_parse_wireless_station(vif, cur);
+ }
+
+out:
+ vlist_flush(&vif->vlans);
+ vlist_flush(&vif->stations);