diff options
author | sam <sam@FreeBSD.org> | 2009-07-05 18:17:37 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2009-07-05 18:17:37 +0000 |
commit | 9f7eae50beb38e763f8614fed575eec619707621 (patch) | |
tree | ffdb2fa7b2375a389404116eb68c653e193a6558 /sys/net80211/ieee80211_var.h | |
parent | 488931f6d96dba8045a1f97876133c24072f46e9 (diff) | |
download | FreeBSD-src-9f7eae50beb38e763f8614fed575eec619707621.zip FreeBSD-src-9f7eae50beb38e763f8614fed575eec619707621.tar.gz |
Add ieee80211_ageq; a facility for staging packets that require
long-term work before they can be serviced. Packets are tagged and
assigned an age (in seconds) at the point they are added to the
queue. If a packet is not retrieved before it's age expires it is
reclaimed. Tagging can take two forms: a reference to an ieee80211_node
(as happens in the tx path) or an opaque token in cases where there
is no reference or the node structure is not stable (i.e. it's going
to be destroyed).
o add ic_stageq to replace the per-node wds staging queue used for
dynamic wds
o add ieee80211_mac_hash for building ageq tokens; this computes a
32-bit hash from an 802.11 mac address (copied from the bridge)
o while here fix a stray ';' noticed in IEEE80211_PSQ_INIT
Reviewed by: rpaulo
Approved by: re (kensmith)
Diffstat (limited to 'sys/net80211/ieee80211_var.h')
-rw-r--r-- | sys/net80211/ieee80211_var.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h index 8859c2f..833c696 100644 --- a/sys/net80211/ieee80211_var.h +++ b/sys/net80211/ieee80211_var.h @@ -44,6 +44,7 @@ #include <net80211/_ieee80211.h> #include <net80211/ieee80211.h> +#include <net80211/ieee80211_ageq.h> #include <net80211/ieee80211_crypto.h> #include <net80211/ieee80211_dfs.h> #include <net80211/ieee80211_ioctl.h> /* for ieee80211_stats */ @@ -194,6 +195,8 @@ struct ieee80211com { /* NB: this is the union of all vap stations/neighbors */ int ic_max_keyix; /* max h/w key index */ struct ieee80211_node_table ic_sta; /* stations/neighbors */ + struct ieee80211_ageq ic_stageq; /* frame staging queue */ + uint32_t ic_hash_key; /* random key for mac hash */ /* XXX multi-bss: split out common/vap parts */ struct ieee80211_wme_state ic_wme; /* WME/WMM state */ @@ -659,6 +662,8 @@ struct ieee80211_channel *ieee80211_find_channel_byieee(struct ieee80211com *, int ieee, int flags); int ieee80211_setmode(struct ieee80211com *, enum ieee80211_phymode); enum ieee80211_phymode ieee80211_chan2mode(const struct ieee80211_channel *); +uint32_t ieee80211_mac_hash(const struct ieee80211com *, + const uint8_t addr[IEEE80211_ADDR_LEN]); void ieee80211_radiotap_attach(struct ieee80211com *, struct ieee80211_radiotap_header *th, int tlen, |