Lines 14-19
Link Here
|
14 |
#include "driver.h" |
14 |
#include "driver.h" |
15 |
#include "eloop.h" |
15 |
#include "eloop.h" |
16 |
#include "common/ieee802_11_defs.h" |
16 |
#include "common/ieee802_11_defs.h" |
|
|
17 |
#include "common/ieee802_11_common.h" |
17 |
#include "common/wpa_common.h" |
18 |
#include "common/wpa_common.h" |
18 |
|
19 |
|
19 |
#include <ifaddrs.h> |
20 |
#include <ifaddrs.h> |
Lines 1208-1213
wpa_driver_bsd_associate(void *priv, struct wpa_driver_associate_params *params)
Link Here
|
1208 |
u32 mode; |
1209 |
u32 mode; |
1209 |
int privacy; |
1210 |
int privacy; |
1210 |
int ret = 0; |
1211 |
int ret = 0; |
|
|
1212 |
const u8 *wpa_ie, *rsn_ie; |
1213 |
size_t wpa_ie_len, rsn_ie_len; |
1211 |
|
1214 |
|
1212 |
wpa_printf(MSG_DEBUG, |
1215 |
wpa_printf(MSG_DEBUG, |
1213 |
"%s: ssid '%.*s' wpa ie len %u pairwise %u group %u key mgmt %u" |
1216 |
"%s: ssid '%.*s' wpa ie len %u pairwise %u group %u key mgmt %u" |
Lines 1256-1278
wpa_driver_bsd_associate(void *priv, struct wpa_driver_associate_params *params)
Link Here
|
1256 |
ret = -1; |
1259 |
ret = -1; |
1257 |
if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0) |
1260 |
if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0) |
1258 |
ret = -1; |
1261 |
ret = -1; |
1259 |
/* XXX error handling is wrong but unclear what to do... */ |
|
|
1260 |
if (wpa_driver_bsd_set_wpa_ie(drv, params->wpa_ie, params->wpa_ie_len) < 0) |
1261 |
return -1; |
1262 |
|
1263 |
privacy = !(params->pairwise_suite == WPA_CIPHER_NONE && |
1264 |
params->group_suite == WPA_CIPHER_NONE && |
1265 |
params->key_mgmt_suite == WPA_KEY_MGMT_NONE && |
1266 |
params->wpa_ie_len == 0); |
1267 |
wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__, privacy); |
1268 |
|
1269 |
if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) |
1270 |
return -1; |
1271 |
|
1262 |
|
1272 |
if (params->wpa_ie_len && |
1263 |
if (params->wpa_ie_len) { |
1273 |
set80211param(drv, IEEE80211_IOC_WPA, |
1264 |
rsn_ie = get_ie(params->wpa_ie, params->wpa_ie_len, WLAN_EID_RSN); |
1274 |
params->wpa_ie[0] == WLAN_EID_RSN ? 2 : 1) < 0) |
1265 |
wpa_ie = get_vendor_ie(params->wpa_ie, params->wpa_ie_len, |
1275 |
return -1; |
1266 |
WPA_IE_VENDOR_TYPE); |
|
|
1267 |
if (rsn_ie) { |
1268 |
rsn_ie_len = rsn_ie[1] ? rsn_ie[1] + 2 : 0; |
1269 |
/* XXX error handling is wrong but unclear what to do... */ |
1270 |
if (wpa_driver_bsd_set_wpa_ie(drv, rsn_ie, rsn_ie_len) < 0) |
1271 |
return -1; |
1272 |
|
1273 |
privacy = !(params->pairwise_suite == WPA_CIPHER_NONE && |
1274 |
params->group_suite == WPA_CIPHER_NONE && |
1275 |
params->key_mgmt_suite == WPA_KEY_MGMT_NONE); |
1276 |
wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__, |
1277 |
privacy); |
1278 |
|
1279 |
if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) |
1280 |
return -1; |
1281 |
|
1282 |
if (rsn_ie_len && |
1283 |
set80211param(drv, IEEE80211_IOC_WPA, 2) < 0) |
1284 |
return -1; |
1285 |
} |
1286 |
else if (wpa_ie) { |
1287 |
wpa_ie_len = wpa_ie[1] ? wpa_ie[1] + 2 : 0; |
1288 |
/* XXX error handling is wrong but unclear what to do... */ |
1289 |
if (wpa_driver_bsd_set_wpa_ie(drv, wpa_ie, wpa_ie_len) < 0) |
1290 |
return -1; |
1291 |
|
1292 |
privacy = !(params->pairwise_suite == WPA_CIPHER_NONE && |
1293 |
params->group_suite == WPA_CIPHER_NONE && |
1294 |
params->key_mgmt_suite == WPA_KEY_MGMT_NONE); |
1295 |
wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__, |
1296 |
privacy); |
1297 |
|
1298 |
if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) |
1299 |
return -1; |
1300 |
|
1301 |
if (wpa_ie_len && |
1302 |
set80211param(drv, IEEE80211_IOC_WPA, 1) < 0) |
1303 |
return -1; |
1304 |
} |
1305 |
} |
1276 |
|
1306 |
|
1277 |
/* |
1307 |
/* |
1278 |
* NB: interface must be marked UP for association |
1308 |
* NB: interface must be marked UP for association |