Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Oct 2003 12:31:35 -0700 (PDT)
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 39851 for review
Message-ID:  <200310171931.h9HJVZYS028045@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=39851

Change 39851 by sam@sam_ebb on 2003/10/17 12:31:32

	o add capability to indicate if device receives all management frames
	o use recv mgmt capability to decide if outbound frames should be
	  discarded if no node table entry is present
	o add missing \n in debug msg

Affected files ...

.. //depot/projects/netperf/sys/net80211/ieee80211_output.c#9 edit
.. //depot/projects/netperf/sys/net80211/ieee80211_var.h#8 edit

Differences ...

==== //depot/projects/netperf/sys/net80211/ieee80211_output.c#9 (text+ko) ====

@@ -165,14 +165,23 @@
 		ni = ieee80211_find_node(ic, eh.ether_dhost);
 		if (ni == NULL) {
 			/*
-			 * When not in station mode the
-			 * destination address should always be
-			 * in the node table unless this is a
-			 * multicast/broadcast frame.
+			 * When not in station mode the destination
+			 * address should always be in the node table
+			 * if the device sends management frames to us,
+			 * unless this is a multicast/broadcast frame.
+			 * For devices that don't send management frames
+			 * to the host we have to cheat; use the bss
+			 * node instead; the card will/should clobber
+			 * the bssid address as necessary.
+			 *
+			 * XXX this handles AHDEMO because all devices
+			 *     that support it don't send mgmt frames;
+			 *     but it might be better to test explicitly
 			 */
-			if (!IEEE80211_IS_MULTICAST(eh.ether_dhost)) {
+			if (!IEEE80211_IS_MULTICAST(eh.ether_dhost) &&
+			    (ic->ic_caps & IEEE80211_C_RCVMGT)) {
 				IEEE80211_DPRINTF(("%s: no node for dst %s, "
-					"discard frame", __func__,
+					"discard frame\n", __func__,
 					ether_sprintf(eh.ether_dhost)));
 				ic->ic_stats.is_tx_nonode++; 
 				goto bad;

==== //depot/projects/netperf/sys/net80211/ieee80211_var.h#8 (text+ko) ====

@@ -219,7 +219,7 @@
 #define	IEEE80211_F_SHSLOT	0x00020000	/* CONF: short slot time */
 #define	IEEE80211_F_SHPREAMBLE	0x00040000	/* CONF: short preamble */
 
-/* ic_capabilities */
+/* ic_caps */
 #define	IEEE80211_C_WEP		0x00000001	/* CAPABILITY: WEP available */
 #define	IEEE80211_C_IBSS	0x00000002	/* CAPABILITY: IBSS available */
 #define	IEEE80211_C_PMGT	0x00000004	/* CAPABILITY: Power mgmt */
@@ -230,6 +230,7 @@
 #define	IEEE80211_C_SHSLOT	0x00000080	/* CAPABILITY: short slottime */
 #define	IEEE80211_C_SHPREAMBLE	0x00000100	/* CAPABILITY: short preamble */
 #define	IEEE80211_C_MONITOR	0x00000200	/* CAPABILITY: monitor mode */
+#define	IEEE80211_C_RCVMGT	0x00000400	/* CAPABILITY: rcv mgt frames */
 
 /* flags for ieee80211_fix_rate() */
 #define	IEEE80211_F_DOSORT	0x00000001	/* sort rate list */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200310171931.h9HJVZYS028045>