Date: Tue, 4 Dec 2007 05:32:36 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 130142 for review Message-ID: <200712040532.lB45Wa8w059500@repoman.freebsd.org>
index | next in thread | raw e-mail
http://perforce.freebsd.org/chv.cgi?CH=130142 Change 130142 by sam@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>help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200712040532.lB45Wa8w059500>
