From owner-p4-projects@FreeBSD.ORG Sun Mar 11 04:47:58 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id F00FC16A403; Sun, 11 Mar 2007 04:47:57 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9118E16A404 for ; Sun, 11 Mar 2007 04:47:57 +0000 (UTC) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 7F70913C4A6 for ; Sun, 11 Mar 2007 04:47:57 +0000 (UTC) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id l2B4lvn1054113 for ; Sun, 11 Mar 2007 04:47:57 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l2B4lv8c054110 for perforce@freebsd.org; Sun, 11 Mar 2007 04:47:57 GMT (envelope-from sam@freebsd.org) Date: Sun, 11 Mar 2007 04:47:57 GMT Message-Id: <200703110447.l2B4lv8c054110@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 Cc: Subject: PERFORCE change 115689 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Mar 2007 04:47:58 -0000 http://perforce.freebsd.org/chv.cgi?CH=115689 Change 115689 by sam@sam_ebb on 2007/03/11 04:47:26 IFC Affected files ... .. //depot/projects/wifi/sys/net80211/_ieee80211.h#18 integrate .. //depot/projects/wifi/sys/net80211/ieee80211_freebsd.h#24 integrate .. //depot/projects/wifi/sys/net80211/ieee80211_input.c#94 integrate .. //depot/projects/wifi/sys/net80211/ieee80211_node.c#87 integrate .. //depot/projects/wifi/sys/net80211/ieee80211_power.c#5 edit .. //depot/projects/wifi/sys/net80211/ieee80211_proto.c#49 integrate .. //depot/projects/wifi/sys/net80211/ieee80211_proto.h#32 integrate Differences ... ==== //depot/projects/wifi/sys/net80211/_ieee80211.h#18 (text+ko) ==== @@ -29,7 +29,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/net80211/_ieee80211.h,v 1.7 2007/02/02 02:45:33 sam Exp $ + * $FreeBSD: src/sys/net80211/_ieee80211.h,v 1.8 2007/03/07 04:35:07 sam Exp $ */ #ifndef _NET80211__IEEE80211_H_ #define _NET80211__IEEE80211_H_ @@ -63,6 +63,7 @@ IEEE80211_M_MONITOR = 8, /* Monitor mode */ IEEE80211_M_WDS = 2 /* WDS link */ }; +#define IEEE80211_OPMODE_MAX (IEEE80211_M_MONITOR+1) /* * 802.11g protection mode. ==== //depot/projects/wifi/sys/net80211/ieee80211_freebsd.h#24 (text+ko) ==== @@ -24,7 +24,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/net80211/ieee80211_freebsd.h,v 1.10 2007/01/09 04:37:05 sam Exp $ + * $FreeBSD: src/sys/net80211/ieee80211_freebsd.h,v 1.11 2007/03/07 04:42:22 sam Exp $ */ #ifndef _NET80211_IEEE80211_FREEBSD_H_ #define _NET80211_IEEE80211_FREEBSD_H_ @@ -127,6 +127,21 @@ (_qlen) = ++(_ni)->ni_savedq.ifq_len; \ } while (0) +#ifndef IF_PREPEND_LIST +#define _IF_PREPEND_LIST(ifq, mhead, mtail, mcount) do { \ + (mtail)->m_nextpkt = (ifq)->ifq_head; \ + if ((ifq)->ifq_tail == NULL) \ + (ifq)->ifq_tail = (mtail); \ + (ifq)->ifq_head = (mhead); \ + (ifq)->ifq_len += (mcount); \ +} while (0) +#define IF_PREPEND_LIST(ifq, mhead, mtail, mcount) do { \ + IF_LOCK(ifq); \ + _IF_PREPEND_LIST(ifq, mhead, mtail, mcount); \ + IF_UNLOCK(ifq); \ +} while (0) +#endif /* IF_PREPEND_LIST */ + /* * 802.1x MAC ACL database locking definitions. */ ==== //depot/projects/wifi/sys/net80211/ieee80211_input.c#94 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_input.c,v 1.99 2007/02/04 05:49:16 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_input.c,v 1.100 2007/03/07 04:42:22 sam Exp $"); #include #include ==== //depot/projects/wifi/sys/net80211/ieee80211_node.c#87 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_node.c,v 1.78 2007/01/15 01:12:28 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_node.c,v 1.79 2007/03/07 04:31:49 sam Exp $"); #include #include @@ -303,8 +303,11 @@ ni->ni_capinfo |= IEEE80211_CAPINFO_IBSS; /* XXX */ if (ic->ic_flags & IEEE80211_F_DESBSSID) IEEE80211_ADDR_COPY(ni->ni_bssid, ic->ic_des_bssid); - else - ni->ni_bssid[0] |= 0x02; /* local bit for IBSS */ + else { + get_random_bytes(ni->ni_bssid, IEEE80211_ADDR_LEN); + /* clear group bit, add local bit */ + ni->ni_bssid[0] = (ni->ni_bssid[0] &~ 0x01) | 0x02; + } } else if (ic->ic_opmode == IEEE80211_M_AHDEMO) { if (ic->ic_flags & IEEE80211_F_DESBSSID) IEEE80211_ADDR_COPY(ni->ni_bssid, ic->ic_des_bssid); ==== //depot/projects/wifi/sys/net80211/ieee80211_power.c#5 (text+ko) ==== @@ -228,7 +228,8 @@ ieee80211_node_pwrsave(struct ieee80211_node *ni, int enable) { struct ieee80211com *ic = ni->ni_ic; - struct mbuf *m; + struct mbuf *m, *mhead, *mtail; + int mcount; if (enable) { if ((ni->ni_flags & IEEE80211_NODE_PWR_MGT) == 0) @@ -256,24 +257,32 @@ } IEEE80211_NOTE(ic, IEEE80211_MSG_POWER, ni, "flush ps queue, %u packets queue", IEEE80211_NODE_SAVEQ_QLEN(ni)); + /* + * Unload the frames from the ps q but don't send them + * to the driver yet. We do this in two stages to minimize + * locking but also because there's no easy way to preserve + * ordering given the existing ifnet access mechanisms. + * XXX could be optimized + */ + IEEE80211_NODE_SAVEQ_LOCK(ni); + mcount = IEEE80211_NODE_SAVEQ_QLEN(ni); + mhead = mtail = NULL; for (;;) { - int qlen; - - IEEE80211_NODE_SAVEQ_DEQUEUE(ni, m, qlen); + _IEEE80211_NODE_SAVEQ_DEQUEUE_HEAD(ni, m); if (m == NULL) break; - /* - * If this is the last packet, turn off the TIM bit. - * If there are more packets, set the more packets bit - * in the mbuf so ieee80211_encap will mark the 802.11 - * head to indicate more data frames will follow. - */ - m->m_flags |= M_PWR_SAV; - if (qlen != 0) - m->m_flags |= M_MORE_DATA; + if (mhead == NULL) { + mhead = m; + m->m_nextpkt = NULL; + } else + mtail->m_nextpkt = m; + mtail = m; + } + IEEE80211_NODE_SAVEQ_UNLOCK(ni); + if (mhead != NULL) { /* XXX need different driver interface */ /* XXX bypasses q max */ - IF_ENQUEUE(&ic->ic_ifp->if_snd, m); + IF_PREPEND_LIST(&ic->ic_ifp->if_snd, mhead, mtail, mcount); } if (ic->ic_set_tim != NULL) ic->ic_set_tim(ni, 0); ==== //depot/projects/wifi/sys/net80211/ieee80211_proto.c#49 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_proto.c,v 1.34 2007/01/08 18:23:43 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_proto.c,v 1.35 2007/03/07 04:35:07 sam Exp $"); /* * IEEE 802.11 protocol support. @@ -69,6 +69,16 @@ "reserved#8", "reserved#9", "ps_poll", "rts", "cts", "ack", "cf_end", "cf_end_ack" }; +const char *ieee80211_opmode_name[IEEE80211_OPMODE_MAX] = { + "IBSS", /* IEEE80211_M_IBSS */ + "STA", /* IEEE80211_M_STA */ + "#2", + "AHDEMO", /* IEEE80211_M_AHDEMO */ + "#4", "#5", + "HOSTAP", /* IEEE80211_M_HOSTAP */ + "#7", + "MONITOR" /* IEEE80211_M_MONITOR */ +}; const char *ieee80211_state_name[IEEE80211_S_MAX] = { "INIT", /* IEEE80211_S_INIT */ "SCAN", /* IEEE80211_S_SCAN */ ==== //depot/projects/wifi/sys/net80211/ieee80211_proto.h#32 (text+ko) ==== @@ -29,7 +29,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/net80211/ieee80211_proto.h,v 1.20 2007/01/08 17:24:51 sam Exp $ + * $FreeBSD: src/sys/net80211/ieee80211_proto.h,v 1.21 2007/03/07 04:35:07 sam Exp $ */ #ifndef _NET80211_IEEE80211_PROTO_H_ #define _NET80211_IEEE80211_PROTO_H_ @@ -237,6 +237,7 @@ void ieee80211_dump_pkt(struct ieee80211com *, const u_int8_t *, int, int, int); +extern const char *ieee80211_opmode_name[]; extern const char *ieee80211_state_name[IEEE80211_S_MAX]; extern const char *ieee80211_wme_acnames[];