View | Details | Raw Unified | Return to bug 264238 | Differences between
and this patch

Collapse All | Expand All

(-)b/contrib/wpa/src/drivers/driver_bsd.c (-17 / +48 lines)
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

Return to bug 264238