Merge hostapd driver init functions into one
[wpasupplicant] / hostapd / driver_i.h
index ce1259d..d513502 100644 (file)
 #include "config.h"
 
 static inline void *
-hostapd_driver_init(struct hostapd_data *hapd)
+hostapd_driver_init(struct hostapd_data *hapd, const u8 *bssid)
 {
+       struct wpa_init_params params;
+       void *ret;
+       size_t i;
+
        if (hapd->driver == NULL || hapd->driver->hapd_init == NULL)
                return NULL;
-       return hapd->driver->hapd_init(hapd);
-}
 
-static inline void *
-hostapd_driver_init_bssid(struct hostapd_data *hapd, const u8 *bssid)
-{
-       if (hapd->driver == NULL || hapd->driver->init_bssid == NULL)
+       os_memset(&params, 0, sizeof(params));
+       params.bssid = bssid;
+       params.ifname = hapd->conf->iface;
+       params.ssid = (const u8 *) hapd->conf->ssid.ssid;
+       params.ssid_len = hapd->conf->ssid.ssid_len;
+       params.test_socket = hapd->conf->test_socket;
+       params.use_pae_group_addr = hapd->conf->use_pae_group_addr;
+       params.ht_40mhz_scan = hapd->iconf->secondary_channel != 0;
+
+       params.num_bridge = hapd->iface->num_bss;
+       params.bridge = os_zalloc(hapd->iface->num_bss * sizeof(char *));
+       if (params.bridge == NULL)
                return NULL;
-       return hapd->driver->init_bssid(hapd, bssid);
+       for (i = 0; i < hapd->iface->num_bss; i++) {
+               struct hostapd_data *bss = hapd->iface->bss[i];
+               if (bss->conf->bridge[0])
+                       params.bridge[i] = bss->conf->bridge;
+       }
+       ret = hapd->driver->hapd_init(hapd, &params);
+       os_free(params.bridge);
+
+       return ret;
 }
 
 static inline void