| | 1287 | /* |
|---|
| | 1288 | Cancel any existing active scan, so that any new parameters |
|---|
| | 1289 | in this scan ioctl (or the defaults) can be honored. |
|---|
| | 1290 | */ |
|---|
| | 1291 | (void) ieee80211_cancel_scan(vap); |
|---|
| | 1292 | mdelay(10); |
|---|
| | 1293 | #ifdef IW_SCAN_THIS_ESSID |
|---|
| | 1294 | if (data && (data->flags & IW_SCAN_THIS_ESSID)) { |
|---|
| | 1295 | struct iw_scan_req req; |
|---|
| | 1296 | struct ieee80211_scan_ssid ssid; |
|---|
| | 1297 | int copyLength; |
|---|
| | 1298 | IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, |
|---|
| | 1299 | "%s: SCAN_THIS_ESSID requested\n", __func__); |
|---|
| | 1300 | if (data->length > sizeof req) { |
|---|
| | 1301 | copyLength = sizeof req; |
|---|
| | 1302 | } else { |
|---|
| | 1303 | copyLength = data->length; |
|---|
| | 1304 | } |
|---|
| | 1305 | memset(&req, 0, sizeof req); |
|---|
| | 1306 | if (copy_from_user(&req, data->pointer, copyLength)) |
|---|
| | 1307 | return -EFAULT; |
|---|
| | 1308 | memcpy(&ssid.ssid, req.essid, sizeof ssid.ssid); |
|---|
| | 1309 | ssid.len = req.essid_len; |
|---|
| | 1310 | IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, |
|---|
| | 1311 | "%s: requesting scan of essid '%s'\n", __func__, ssid.ssid); |
|---|
| | 1312 | (void) ieee80211_start_scan(vap, |
|---|
| | 1313 | IEEE80211_SCAN_ACTIVE | |
|---|
| | 1314 | IEEE80211_SCAN_NOPICK | |
|---|
| | 1315 | IEEE80211_SCAN_ONCE, IEEE80211_SCAN_FOREVER, |
|---|
| | 1316 | 1, &ssid); |
|---|
| | 1317 | return 0; |
|---|
| | 1318 | } |
|---|
| | 1319 | #endif |
|---|