static int wpa_driver_hostap_scan(void *priv, const u8 *ssid, size_t ssid_len) { struct wpa_driver_hostap_data *drv = priv; struct prism2_hostapd_param param; int ret; if (ssid == NULL) { /* Use standard Linux Wireless Extensions ioctl if possible * because some drivers using hostap code in wpa_supplicant * might not support Host AP specific scan request (with SSID * info). */ return wpa_driver_wext_scan(drv->wext, ssid, ssid_len); } if (ssid_len > 32) ssid_len = 32; memset(¶m, 0, sizeof(param)); param.cmd = PRISM2_HOSTAPD_SCAN_REQ; param.u.scan_req.ssid_len = ssid_len; memcpy(param.u.scan_req.ssid, ssid, ssid_len); ret = hostapd_ioctl(drv, ¶m, sizeof(param), 1); /* Not all drivers generate "scan completed" wireless event, so try to * read results after a timeout. */ eloop_register_timeout(3, 0, wpa_driver_wext_scan_timeout, drv->wext, drv->ctx); return ret; }
/*----------------------------------------------------------------------------- Routine Name: wpa_driver_tista_scan Routine Description: request scan from driver Arguments: priv - pointer to private data structure ssid - ssid buffer ssid_len - length of ssid Return Value: 0 on success, -1 on failure -----------------------------------------------------------------------------*/ static int wpa_driver_tista_scan( void *priv, const u8 *ssid, size_t ssid_len ) { struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv; struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)(drv->ctx); struct wpa_ssid *issid; scan_Params_t scanParams; int scan_type, res, timeout, scan_probe_flag = 0; wpa_printf(MSG_DEBUG, "%s", __func__); TI_CHECK_DRIVER( drv->driver_is_loaded, -1 ); #if 1 os_memset(&scanParams, 0, sizeof(scan_Params_t)); /* Initialize scan parameters */ scan_type = drv->scan_type; if (wpa_s->prev_scan_ssid != BROADCAST_SSID_SCAN) { if (wpa_s->prev_scan_ssid->scan_ssid) { scan_type = SCAN_TYPE_NORMAL_ACTIVE; scan_probe_flag = 1; } } scanParams.scanType = scan_type; scanParams.numOfChannels = drv->scan_channels; scanParams.probeReqNumber = SCAN_DEFAULT_PROBE_REQUEST_NUM; scanParams.probeRequestRate = RATE_MASK_UNSPECIFIED; /* Let the FW select */; scanParams.desiredSsid.len = 0; drv->force_merge_flag = 0; /* Set merge flag */ if ((scan_probe_flag && ssid) && (ssid_len > 0 && ssid_len <= sizeof(scanParams.desiredSsid.str))) { os_memcpy(scanParams.desiredSsid.str, ssid, ssid_len); if (ssid_len < sizeof(scanParams.desiredSsid.str)) scanParams.desiredSsid.str[ssid_len] = '\0'; scanParams.desiredSsid.len = ssid_len; drv->force_merge_flag = 1; } drv->last_scan = scan_type; /* Remember scan type for last scan */ res = wpa_driver_tista_private_send(priv, TIWLN_802_11_START_OS_SCAN_SET, &scanParams, sizeof(scanParams), NULL, 0); if (0 != res) wpa_printf(MSG_ERROR, "ERROR - Failed to do tista scan!"); else wpa_printf(MSG_DEBUG, "wpa_driver_tista_scan OS_SCAN success"); timeout = 30; wpa_printf(MSG_DEBUG, "Scan requested (ret=%d) - scan timeout %d sec", res, timeout); eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv->wext, drv->ctx); eloop_register_timeout(timeout, 0, wpa_driver_wext_scan_timeout, drv->wext, drv->ctx); return res; #else return wpa_driver_wext_scan(drv->wext, ssid, ssid_len); #endif }
static int wpa_driver_ipw_scan(void *priv, struct wpa_driver_scan_params *params) { struct wpa_driver_ipw_data *drv = priv; return wpa_driver_wext_scan(drv->wext, params); }
static int wpa_ndiswrapper_scan(void *priv, const u8 *ssid, size_t ssid_len) { struct wpa_driver_ndiswrapper_data *drv = priv; return wpa_driver_wext_scan(drv->wext, ssid, ssid_len); }
int wpa_driver_awext_scan(void *priv, const u8 *ssid, size_t ssid_len) { struct wpa_driver_awext_data *drv = priv; return wpa_driver_wext_scan(drv->wext, ssid, ssid_len); }