#include "includes.h"
#include "hostapd.h"
-#include "driver.h"
+#include "driver_i.h"
#include "eloop.h"
#include "uuid.h"
#include "wpa_ctrl.h"
os_memset(&cfg, 0, sizeof(cfg));
wps->wps_state = hapd->conf->wps_state;
wps->ap_setup_locked = hapd->conf->ap_setup_locked;
- os_memcpy(wps->uuid, hapd->conf->uuid, UUID_LEN);
+ if (is_nil_uuid(hapd->conf->uuid)) {
+ uuid_gen_mac_addr(hapd->own_addr, wps->uuid);
+ wpa_hexdump(MSG_DEBUG, "WPS: UUID based on MAC address",
+ wps->uuid, UUID_LEN);
+ } else
+ os_memcpy(wps->uuid, hapd->conf->uuid, UUID_LEN);
wps->ssid_len = hapd->conf->ssid.ssid_len;
os_memcpy(wps->ssid, hapd->conf->ssid.ssid, wps->ssid_len);
wps->ap = 1;
os_memcpy(wps->dev.mac_addr, hapd->own_addr, ETH_ALEN);
- wps->dev.device_name = hapd->conf->device_name;
- wps->dev.manufacturer = hapd->conf->manufacturer;
- wps->dev.model_name = hapd->conf->model_name;
- wps->dev.model_number = hapd->conf->model_number;
- wps->dev.serial_number = hapd->conf->serial_number;
+ wps->dev.device_name = os_strdup(hapd->conf->device_name);
+ wps->dev.manufacturer = os_strdup(hapd->conf->manufacturer);
+ wps->dev.model_name = os_strdup(hapd->conf->model_name);
+ wps->dev.model_number = os_strdup(hapd->conf->model_number);
+ wps->dev.serial_number = os_strdup(hapd->conf->serial_number);
if (hapd->conf->config_methods) {
char *m = hapd->conf->config_methods;
if (os_strstr(m, "label"))
wps->dev.sub_categ = atoi(pos);
}
wps->dev.os_version = WPA_GET_BE32(hapd->conf->os_version);
+ wps->dev.rf_bands = hapd->iconf->hw_mode == HOSTAPD_MODE_IEEE80211A ?
+ WPS_RF_50GHZ : WPS_RF_24GHZ; /* FIX: dualband AP */
if (conf->wpa & WPA_PROTO_RSN) {
if (conf->wpa_key_mgmt & WPA_KEY_MGMT_PSK)
return;
wps_registrar_deinit(hapd->wps->registrar);
os_free(hapd->wps->network_key);
+ wps_device_data_free(&hapd->wps->dev);
os_free(hapd->wps);
hapd->wps = NULL;
hostapd_wps_clear_ies(hapd);
const char *pin)
{
u8 u[UUID_LEN];
- if (hapd->wps == NULL || uuid_str2bin(uuid, u))
+ int any = 0;
+
+ if (hapd->wps == NULL)
+ return -1;
+ if (os_strcmp(uuid, "any") == 0)
+ any = 1;
+ else if (uuid_str2bin(uuid, u))
return -1;
- return wps_registrar_add_pin(hapd->wps->registrar, u,
+ return wps_registrar_add_pin(hapd->wps->registrar, any ? NULL : u,
(const u8 *) pin, os_strlen(pin));
}