PERFORCE change 130142 for review

Sam Leffler sam at FreeBSD.org
Mon Dec 3 21:32:37 PST 2007


http://perforce.freebsd.org/chv.cgi?CH=130142

Change 130142 by sam at sam_ebb on 2007/12/04 05:32:26

	sync w/ vap code

Affected files ...

.. //depot/projects/vap/usr.sbin/wpa/wpa_supplicant/driver_freebsd.c#3 edit

Differences ...

==== //depot/projects/vap/usr.sbin/wpa/wpa_supplicant/driver_freebsd.c#3 (text+ko) ====

@@ -32,8 +32,6 @@
 #include <net/if.h>
 #include <net/ethernet.h>
 
-#include <net80211/ieee80211.h>
-#include <net80211/ieee80211_crypto.h>
 #include <net80211/ieee80211_ioctl.h>
 
 struct wpa_driver_bsd_data {
@@ -192,7 +190,21 @@
 wpa_driver_bsd_set_wpa_ie(struct wpa_driver_bsd_data *drv,
 	const char *wpa_ie, size_t wpa_ie_len)
 {
-	return set80211var(drv, IEEE80211_IOC_OPTIE, wpa_ie, wpa_ie_len);
+	struct ieee80211req ireq;
+
+	memset(&ireq, 0, sizeof(ireq));
+	strncpy(ireq.i_name, drv->ifname, IFNAMSIZ);
+	ireq.i_type = IEEE80211_IOC_APPIE;
+	ireq.i_val = IEEE80211_APPIE_WPA;
+	ireq.i_len = wpa_ie_len;
+	ireq.i_data = (void *) wpa_ie;
+	if (ioctl(drv->sock, SIOCS80211, &ireq) < 0) {
+		fprintf(stderr,
+		    "ioctl[IEEE80211_IOC_APPIE:IEEE80211_APPIE_WPA]: %s\n",
+		    strerror(errno));
+		return -1;
+	}
+	return 0;
 }
 
 static int
@@ -441,18 +453,27 @@
 wpa_driver_bsd_scan(void *priv, const u8 *ssid, size_t ssid_len)
 {
 	struct wpa_driver_bsd_data *drv = priv;
+	struct ieee80211_scan_req sr;
 	int flags;
 
+	/* XXX not true but easiest to perpetuate the myth */
 	/* NB: interface must be marked UP to do a scan */
 	if (getifflags(drv, &flags) != 0 || setifflags(drv, flags | IFF_UP) != 0)
 		return -1;
 
-	/* set desired ssid before scan */
-	if (wpa_driver_bsd_set_ssid(drv, ssid, ssid_len) < 0)
-		return -1;
+	memset(&sr, 0, sizeof(sr));
+	sr.sr_flags = IEEE80211_IOC_SCAN_ACTIVE
+		    | IEEE80211_IOC_SCAN_ONCE
+		    | IEEE80211_IOC_SCAN_NOPICK
+		    ;
+	sr.sr_duration = IEEE80211_IOC_SCAN_FOREVER;
+	sr.sr_nssid = 1;
+	/* XXX ssid_len must be <= IEEE80211_NWID_LEN */
+	memcpy(sr.sr_ssid[0].ssid, ssid, ssid_len);
+	sr.sr_ssid[0].len = ssid_len;
 
 	/* NB: net80211 delivers a scan complete event so no need to poll */
-	return set80211param(drv, IEEE80211_IOC_SCAN_REQ, 0);
+	return set80211var(drv, IEEE80211_IOC_SCAN_REQ, &sr, sizeof(sr));
 }
 
 #include <net/route.h>


More information about the p4-projects mailing list