PERFORCE change 63810 for review
Sam Leffler
sam at FreeBSD.org
Tue Oct 26 18:56:37 PDT 2004
http://perforce.freebsd.org/chv.cgi?CH=63810
Change 63810 by sam at 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;
More information about the p4-projects
mailing list