diff options
author | sam <sam@FreeBSD.org> | 2007-03-07 04:42:22 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2007-03-07 04:42:22 +0000 |
commit | 519f61f9957d9a7307fe381d04f1ae9ebbf6137f (patch) | |
tree | 783d971edc20e5ec5dd605945b690d9232c36062 /sys/net80211/ieee80211_freebsd.h | |
parent | 24d9d9d38048472a526ad8fd061b7e5d587ac709 (diff) | |
download | FreeBSD-src-519f61f9957d9a7307fe381d04f1ae9ebbf6137f.zip FreeBSD-src-519f61f9957d9a7307fe381d04f1ae9ebbf6137f.tar.gz |
When dispatching frames saved on the power save queue to a
station exiting power save mode prepend them to the driver's
send q instead of appending them. This insures the packets
are not misordered wrt any packets already q'd for the station.
This corrects a problem noticed when using a VoIP phone talking
to an ath card in ap mode; the misordered packets caused noise.
Submitted by: "J.R. Oldroyd" <jr@opal.com>
MFC after: 2 weeks
Diffstat (limited to 'sys/net80211/ieee80211_freebsd.h')
-rw-r--r-- | sys/net80211/ieee80211_freebsd.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_freebsd.h b/sys/net80211/ieee80211_freebsd.h index 48ffd6e..9880b69 100644 --- a/sys/net80211/ieee80211_freebsd.h +++ b/sys/net80211/ieee80211_freebsd.h @@ -115,6 +115,21 @@ typedef struct mtx ieee80211_scan_lock_t; (_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. */ |