From owner-p4-projects@FreeBSD.ORG Wed Oct 27 01:56:37 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C5BB816A4D0; Wed, 27 Oct 2004 01:56:35 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9332516A4CE for ; Wed, 27 Oct 2004 01:56:35 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6E4BD43D2D for ; Wed, 27 Oct 2004 01:56:35 +0000 (GMT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id i9R1uZOs047951 for ; Wed, 27 Oct 2004 01:56:35 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id i9R1uZhs047948 for perforce@freebsd.org; Wed, 27 Oct 2004 01:56:35 GMT (envelope-from sam@freebsd.org) Date: Wed, 27 Oct 2004 01:56:35 GMT Message-Id: <200410270156.i9R1uZhs047948@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 63810 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 27 Oct 2004 01:56:37 -0000 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;