Date: Wed, 27 Oct 2004 01:56:35 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 63810 for review Message-ID: <200410270156.i9R1uZhs047948@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=63810 Change 63810 by sam@sam_ebb on 2004/10/27 01:56:25 o allow setting the optional ie in any mode o implement IEEE80211_IOC_WPAIE Affected files ... .. //depot/projects/wifi/sys/net80211/ieee80211_ioctl.c#4 edit Differences ... ==== //depot/projects/wifi/sys/net80211/ieee80211_ioctl.c#4 (text+ko) ==== @@ -884,6 +884,32 @@ } static int +ieee80211_ioctl_getwpaie(struct ieee80211com *ic, struct ieee80211req *ireq) +{ + struct ieee80211_node *ni; + struct ieee80211req_wpaie wpaie; + int error; + + if (ireq->i_len != sizeof(wpaie)) + return EINVAL; + error = copyin(ireq->i_data, &wpaie, sizeof(wpaie)); + if (error != 0) + return error; + ni = ieee80211_find_node(ic, wpaie.wpa_macaddr); + if (ni == NULL) + return EINVAL; /* XXX */ + memset(wpaie.wpa_ie, 0, sizeof(wpaie.wpa_ie)); + if (ni->ni_wpa_ie != NULL) { + int ielen = ni->ni_wpa_ie[1] + 2; + if (ielen > sizeof(wpaie.wpa_ie)) + ielen = sizeof(wpaie.wpa_ie); + memcpy(wpaie.wpa_ie, ni->ni_wpa_ie, ielen); + } + ieee80211_free_node(ic, ni); + return copyout(&wpaie, ireq->i_data, sizeof(wpaie)); +} + +static int ieee80211_ioctl_getscanresults(struct ieee80211com *ic, struct ieee80211req *ireq) { union { @@ -1103,7 +1129,7 @@ /* NB: truncate, caller can check length */ if (ireq->i_len > ic->ic_opt_ie_len) ireq->i_len = ic->ic_opt_ie_len; - error = copyout(ic->ic_opt_ie, ireq->i_data, ireq->i_len); + error = copyout(ireq->i_data, ic->ic_opt_ie, ireq->i_len); break; case IEEE80211_IOC_WPAKEY: error = ieee80211_ioctl_getkey(ic, ireq); @@ -1120,6 +1146,9 @@ ic->ic_des_bssid, ireq->i_len); break; + case IEEE80211_IOC_WPAIE: + error = ieee80211_ioctl_getwpaie(ic, ireq); + break; case IEEE80211_IOC_SCAN_RESULTS: error = ieee80211_ioctl_getscanresults(ic, ireq); break; @@ -1601,8 +1630,6 @@ /* XXXX reset? */ break; case IEEE80211_IOC_PRIVACY: - if (ic->ic_opmode != IEEE80211_M_STA) - return EINVAL; if (ireq->i_val) { /* XXX check for key state? */ ic->ic_flags |= IEEE80211_F_PRIVACY;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200410270156.i9R1uZhs047948>