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