Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/net80211 Even more changes to the new 802.11 layer:
details: https://anonhg.NetBSD.org/src/rev/7337344c2de0
branches: trunk
changeset: 553220:7337344c2de0
user: dyoung <dyoung%NetBSD.org@localhost>
date: Mon Oct 13 04:22:55 2003 +0000
description:
Even more changes to the new 802.11 layer:
* Add Kevin Lahey's power-saving support from the old 802.11 layer
* Add a FHPARMS or DSPARMS info element to probe responses and beacons
as appropriate.
diffstat:
sys/net80211/ieee80211_output.c | 64 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 62 insertions(+), 2 deletions(-)
diffs (101 lines):
diff -r 03f3ea8ea25b -r 7337344c2de0 sys/net80211/ieee80211_output.c
--- a/sys/net80211/ieee80211_output.c Mon Oct 13 04:20:23 2003 +0000
+++ b/sys/net80211/ieee80211_output.c Mon Oct 13 04:22:55 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ieee80211_output.c,v 1.5 2003/09/28 02:35:20 dyoung Exp $ */
+/* $NetBSD: ieee80211_output.c,v 1.6 2003/10/13 04:22:55 dyoung Exp $ */
/*-
* Copyright (c) 2001 Atsushi Onoe
* Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
@@ -35,11 +35,15 @@
#ifdef __FreeBSD__
__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_output.c,v 1.5 2003/09/01 02:55:09 sam Exp $");
#else
-__KERNEL_RCSID(0, "$NetBSD: ieee80211_output.c,v 1.5 2003/09/28 02:35:20 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ieee80211_output.c,v 1.6 2003/10/13 04:22:55 dyoung Exp $");
#endif
#include "opt_inet.h"
+#ifdef __NetBSD__
+#include "bpfilter.h"
+#endif /* __NetBSD__ */
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
@@ -73,7 +77,9 @@
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_compat.h>
+#if NBPFILTER > 0
#include <net/bpf.h>
+#endif
#ifdef INET
#include <netinet/in.h>
@@ -409,6 +415,35 @@
ic->ic_bss->ni_esslen);
frm = ieee80211_add_rates(frm, &ic->ic_bss->ni_rates);
+ switch (ic->ic_phytype) {
+ case IEEE80211_T_FH:
+ *frm++ = IEEE80211_ELEMID_FHPARMS;
+ *frm++ = 5;
+ *frm++ = ni->ni_fhdwell & 0x00ff;
+ *frm++ = (ni->ni_fhdwell >> 8) & 0x00ff;
+ *frm++ = IEEE80211_FH_CHANSET(
+ ieee80211_chan2ieee(ic, ni->ni_chan));
+ *frm++ = IEEE80211_FH_CHANPAT(
+ ieee80211_chan2ieee(ic, ni->ni_chan));
+ *frm++ = ni->ni_fhindex;
+ break;
+ case IEEE80211_T_OFDM: /* probably multi-mode */
+ default:
+ if (ieee80211_chan2mode(ic, ni->ni_chan) !=
+ IEEE80211_MODE_11B) {
+ if_printf(ifp, "unhandled mode %d for %s\n",
+ ieee80211_chan2mode(ic, ni->ni_chan),
+ ether_sprintf(ni->ni_macaddr));
+ break;
+ }
+ /*FALLTHROUGH*/
+ case IEEE80211_T_DS:
+ *frm++ = IEEE80211_ELEMID_DSPARMS;
+ *frm++ = 1;
+ *frm++ = ieee80211_chan2ieee(ic, ni->ni_chan);
+ break;
+ }
+
if (ic->ic_opmode == IEEE80211_M_IBSS) {
*frm++ = IEEE80211_ELEMID_IBSSPARMS;
*frm++ = 2;
@@ -576,3 +611,28 @@
return ret;
#undef senderr
}
+
+void
+ieee80211_pwrsave(struct ieee80211com *ic, struct ieee80211_node *ni,
+ struct mbuf *m)
+{
+ /* Store the new packet on our queue, changing the TIM if necessary */
+
+ if (IF_IS_EMPTY(&ni->ni_savedq)) {
+ ic->ic_set_tim(ic, ni->ni_associd, 1);
+ }
+ if (ni->ni_savedq.ifq_len >= IEEE80211_PS_MAX_QUEUE) {
+ IF_DROP(&ni->ni_savedq);
+ m_freem(m);
+ if (ic->ic_if.if_flags & IFF_DEBUG)
+ printf("%s: station %s power save queue overflow"
+ " of size %d drops %d\n",
+ ic->ic_if.if_xname,
+ ether_sprintf(ni->ni_macaddr),
+ IEEE80211_PS_MAX_QUEUE,
+ ni->ni_savedq.ifq_drops);
+ } else {
+ IF_ENQUEUE(&ni->ni_savedq, m);
+ }
+}
+
Home |
Main Index |
Thread Index |
Old Index