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 1200-1213
handle_read(void *ctx, const u8 *src_addr, const u8 *buf, size_t len)
Link Here
|
1200 |
drv_event_eapol_rx(drv->ctx, src_addr, buf, len); |
1201 |
drv_event_eapol_rx(drv->ctx, src_addr, buf, len); |
1201 |
} |
1202 |
} |
1202 |
|
1203 |
|
|
|
1204 |
static int |
1205 |
wpa_driver_bsd_set_rsn_wpa_ie(struct bsd_driver_data * drv, |
1206 |
struct wpa_driver_associate_params *params, const u8 *ie) |
1207 |
{ |
1208 |
int privacy; |
1209 |
size_t ie_len = ie[1] ? ie[1] + 2 : 0; |
1210 |
|
1211 |
/* XXX error handling is wrong but unclear what to do... */ |
1212 |
if (wpa_driver_bsd_set_wpa_ie(drv, ie, ie_len) < 0) |
1213 |
return -1; |
1214 |
|
1215 |
privacy = !(params->pairwise_suite == WPA_CIPHER_NONE && |
1216 |
params->group_suite == WPA_CIPHER_NONE && |
1217 |
params->key_mgmt_suite == WPA_KEY_MGMT_NONE); |
1218 |
wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__, |
1219 |
privacy); |
1220 |
|
1221 |
if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) |
1222 |
return -1; |
1223 |
|
1224 |
if (ie_len && |
1225 |
set80211param(drv, IEEE80211_IOC_WPA, |
1226 |
ie[0] == WLAN_EID_RSN ? 2 : 1) < 0) |
1227 |
return -1; |
1228 |
|
1229 |
return 0; |
1230 |
} |
1231 |
|
1203 |
static int |
1232 |
static int |
1204 |
wpa_driver_bsd_associate(void *priv, struct wpa_driver_associate_params *params) |
1233 |
wpa_driver_bsd_associate(void *priv, struct wpa_driver_associate_params *params) |
1205 |
{ |
1234 |
{ |
1206 |
struct bsd_driver_data *drv = priv; |
1235 |
struct bsd_driver_data *drv = priv; |
1207 |
struct ieee80211req_mlme mlme; |
1236 |
struct ieee80211req_mlme mlme; |
1208 |
u32 mode; |
1237 |
u32 mode; |
1209 |
int privacy; |
|
|
1210 |
int ret = 0; |
1238 |
int ret = 0; |
|
|
1239 |
const u8 *wpa_ie, *rsn_ie; |
1211 |
|
1240 |
|
1212 |
wpa_printf(MSG_DEBUG, |
1241 |
wpa_printf(MSG_DEBUG, |
1213 |
"%s: ssid '%.*s' wpa ie len %u pairwise %u group %u key mgmt %u" |
1242 |
"%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; |
1285 |
ret = -1; |
1257 |
if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0) |
1286 |
if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0) |
1258 |
ret = -1; |
1287 |
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 |
|
1288 |
|
1263 |
privacy = !(params->pairwise_suite == WPA_CIPHER_NONE && |
1289 |
if (params->wpa_ie_len) { |
1264 |
params->group_suite == WPA_CIPHER_NONE && |
1290 |
rsn_ie = get_ie(params->wpa_ie, params->wpa_ie_len, |
1265 |
params->key_mgmt_suite == WPA_KEY_MGMT_NONE && |
1291 |
WLAN_EID_RSN); |
1266 |
params->wpa_ie_len == 0); |
1292 |
if (rsn_ie) { |
1267 |
wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__, privacy); |
1293 |
if (wpa_driver_bsd_set_rsn_wpa_ie(drv, params, |
1268 |
|
1294 |
rsn_ie) < 0) |
1269 |
if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) |
1295 |
return -1; |
1270 |
return -1; |
1296 |
} |
1271 |
|
1297 |
else { |
1272 |
if (params->wpa_ie_len && |
1298 |
wpa_ie = get_vendor_ie(params->wpa_ie, |
1273 |
set80211param(drv, IEEE80211_IOC_WPA, |
1299 |
params->wpa_ie_len, WPA_IE_VENDOR_TYPE); |
1274 |
params->wpa_ie[0] == WLAN_EID_RSN ? 2 : 1) < 0) |
1300 |
if (wpa_ie) { |
1275 |
return -1; |
1301 |
if (wpa_driver_bsd_set_rsn_wpa_ie(drv, params, |
|
|
1302 |
wpa_ie) < 0) |
1303 |
return -1; |
1304 |
} |
1305 |
} |
1306 |
} |
1276 |
|
1307 |
|
1277 |
/* |
1308 |
/* |
1278 |
* NB: interface must be marked UP for association |
1309 |
* NB: interface must be marked UP for association |