Commit Graph

481 Commits

Author SHA1 Message Date
sam
a839de9034 Fix handling of shortgi: use the local configuration (and implicitly
device capabilities) to decide whether to use short gi.  Drivers
inspect ni_flags to decide whether to send a frame w/ short sgi.
2008-09-22 00:14:50 +00:00
sam
03a86e7507 RIFS support; needs driver callback for dynamic state change 2008-09-22 00:10:22 +00:00
sam
7b36216c91 MIMO power save support; still needs callbacks for notifying drivers
of dynamic state change in station mode.
2008-09-21 23:59:14 +00:00
sam
b823d18ca4 Revamp ht ie handling:
o change ieee80211_parse_htcap and ieee80211_parse_htinfo to save only
  internal state obtained from the ie's; no dynamic state such as
  ni_chw is altered
o add ieee80211_ht_updateparams to parse ht cap+info ie's and update
  dynamic node state
o change ieee80211_ht_node_init to not take an htcap ie that is parsed;
  instead have the caller make a separate call as one caller wants to
  parse the ie while another wants to parse both cap+info ie's and
  update state so can better do this with ieee80211_ht_updateparams

These changes fix sta mode state handling where the node's channel
width was shifted to ht20/ht40 prematurely.
2008-09-21 23:44:15 +00:00
sam
40f433ee35 don't propagate ht bss occupancy changes to legacy vaps;
they won't have an htinfo ie to update
2008-09-21 23:32:48 +00:00
sam
54cdf28d66 o widen ni_flags as it's going to be full shortly
o shuffle members to minimize holes
2008-09-21 23:31:17 +00:00
sam
6c3e3155ea Add current transmit parameters for fixed rate handling so drivers
don't duplicate this.  These are setup according to the role of the
node--the bss node for ap and adhoc modes need to use parameters
that are the least common denomimator of all nodes in the bss;
otherwise we are setting up params for a station joining a bss and
we select those according to the capabilities of the station.

This stuff needs more work as we do extra work due to having setup
in common code paths shared by nodes using both roles.
2008-09-21 23:25:33 +00:00
sam
da7cd2bfa5 change ieee80211_ampdu_stop to take an explicit reason code 2008-09-21 23:20:04 +00:00
sam
643a17d6c8 simplify debug msg 2008-09-21 23:18:36 +00:00
sam
bc3be4b34c Crypto api changes:
o don't use the key index to identify when the driver has been
  asked to allocate a key slot, use an explicit flag; allows
  drivers to force s/w fallback for entries in the global table
o change callback api to allocate driver resources for a crypto key:
  - de-const the key parameter so drivers can muck with the flags
  - on callback failure don't automatically try to setup s/w crypto;
    instead the driver must now mark the key entry for s/w crypto and
    the caller will re-attach the cipher module

NB: api change permits drivers more control over fallback to s/w
    crypto (e.g. based on a limited number of h/w key slots)
2008-09-21 23:16:19 +00:00
sam
7a8139bec3 Cleanup AMPDU handling:
For receive:
o explicitly tag rx frames w/ M_AMPDU instead of passing frames through
  the reorder processing according to the node having HT and the frame
  being QoS data
o relax ieee80211_ampdu_reorder asserts to allow any frame to be passed
  in, unsuitable frames are returned to the caller for normal processing;
  this permits drivers that cannot inspect the PLCP to mark all data
  frames as potential ampdu candidates with only a small penalty
o add M_AMPDU_MPDU to identify frames resubmitted from the reorder q

For transmit:
o tag aggregation candidates with M_AMPDU_MPDU
o fix the QoS ack policy set in ampdu subframes; we only support immediate
  BA streams which should be marked for "normal ack" to get implicit block
  ack behaviour; interestingly certain vendor parts BA'd frames with the
  11e BA ack policy set
o do not assign a sequence # to aggregation candidates; this must be done
  when frames are submitted for transmit (NB: this can/will be handled
  better when aggregation is pulled up to net80211)
2008-09-21 23:00:19 +00:00
sam
50dd888a5f Always update ic_lastnonht so we track overlapping legacy bss
properly; was doing this only on a change in the protection mode
so the advertised protection mode in the beacon would oscillate.

Submitted by:	Chris Zimmermann
2008-09-21 22:24:07 +00:00
sam
662f17f3f0 Cleanup starting seq# for tx ampdu:
o use txa_start to form the addba request and purge txa_seqstart
o fill txa_start before calling ic_addba_request to permit drivers
  to override when they handle seq# generation (e.g. mwl)
2008-09-21 22:22:28 +00:00
sam
22b48e4c3d o fix spelling of EOSP
o correct SMPS values
2008-09-21 22:09:18 +00:00
thompsa
40cfead11a Fix clone destruction, can't use the simple api because that does not remove
the ifnet from cloner's list.  Expose if_clone_destroyif api to do this.

Submitted by:	sam
2008-09-20 19:38:37 +00:00
sam
c4ae3cf4b0 make all checks if ni_chw consistent 2008-09-06 17:51:02 +00:00
sam
4ee6c7ffc4 use c99 syntax for initializers; this silences
warnings with picky compiler settings
2008-09-06 17:48:25 +00:00
sam
869a1cd476 only return the negotiated ampdu density for sta mode 2008-09-06 17:43:47 +00:00
sam
61ad737144 o kill IEEE80211_NODE_PSUPDATE; it was never used
o kill IEEE80211_NODE_CHWUPDATE; it's use was pointless and it was defined
  wrong (overlap w/ existing flags)
2008-09-06 17:42:51 +00:00
sam
9b8a0a7556 put back placeholder comment 2008-09-06 17:39:31 +00:00
sam
9db405bfbd o validate the ba policy in addba response
o leave a check for the max ba window disabled; we accept out of range
  values and just truncate them but may want to act differently in the future
2008-09-06 17:38:20 +00:00
sam
7923b9382d add IEEE80211_NODE_HT_ALL to collect up all the HT-related node flags 2008-09-06 17:33:46 +00:00
sam
d4815d5b74 don't do ampdu reordering of fragments; they should never happen 2008-09-06 17:31:55 +00:00
sam
5379b08ec2 moreve the aggregation q; it's not being used and
there's a better way to do this
2008-09-06 17:29:11 +00:00
sam
75452e6eca o show key indices w/o adjustment
o display all key flags symbolically
2008-09-06 17:18:38 +00:00
sam
69a79cd4cd purge ni_reqcw; not used and never will be 2008-09-06 17:15:55 +00:00
sam
a5a78bb230 o fix BAR definitions
o add 11e reason codes
2008-09-06 17:14:27 +00:00
sam
84b45b57bc fix age calculations (yet again); entries in the q have values
relative to the head

MFC after:	3 days
2008-09-06 17:04:44 +00:00
brooks
3cded34283 Replace a line matching /^ $/ with one matching /^$/.
Obtained from:	//depot/projects/vimage-commit2/...
2008-09-03 20:33:11 +00:00
weongyo
7ec33e687c free ifp allocated at ieee80211_vap_setup.
Reviewed by:	sam, thompsa
2008-09-02 04:49:35 +00:00
avatar
7b8996a88b Fixing INVARIANTS build by adding 'z' format prefix for size_t typed
variable.

Reminded by:	tinderbox
2008-08-29 08:44:51 +00:00
sam
e920342cd4 Fix mic calculation when final data is entirely in a trailing mbuf;
it's unclear if this can happen on freebsd but does appear on netbsd.
Identified by Matthias Drochner who came up with an initial change
that we then revised together.

Reviewed by:	thompsa, sephe, avatar
MFC after:	2 weeks
2008-08-29 05:02:10 +00:00
julian
d908a854a8 This instance of ifnet got forgotten. 2008-08-25 05:20:29 +00:00
imp
38a3b8ee43 Verify that the WPA flags set are actually compatible with the
driver's set of valid flags.  Otherwise, wpa_supplicant wouldn't
report an error for old wi cards that can't do WPA.

Reviewed by:	sam@
2008-08-09 05:46:01 +00:00
sam
f31fde5e39 add WPS oui
Submitted by:	"Chuck Tuffli" <chuck@tuffli.net>
MFC after:	3 days
2008-08-06 15:54:59 +00:00
sam
64e56d4fb3 add missing lock for htinfo update
Submitted by:	Chris Zimmermann
2008-08-02 18:04:09 +00:00
sam
23d2075246 correct decap of of AppleTalk and IPX frames; don't strip the SNAP
header as they have one natively

Submitted by:	Chris Zimmermann
2008-08-02 18:02:57 +00:00
sam
a3bf7f3405 add a sysctl to deliver a radar event for testing 2008-08-02 18:00:33 +00:00
sam
3ca07b6391 schedule the correct timer when receiving a radar event during CAC 2008-08-02 17:58:39 +00:00
sam
1fc2ef0208 don't deauth a station because it sends a ps-poll w/ a bogus aid in it;
turns out some devices do this and since we otherwise validate the station
is associated and don't use the aid for anything being lenient here allows
them to function

Submitted by:	Chris Zimmermann
MFC after:	2 weeks
2008-07-26 23:50:27 +00:00
sam
53c174be32 reorder RSN/WPA2 ie in beacon and probe response frames to comply
with IEEE802.11-2007 spec

Submitted by:	Chris Zimmermann
2008-07-07 17:24:55 +00:00
sam
f53bcee721 correct construction of delba action frame; don't shift+mask the initiator
argument

Submitted by:	Marvell
2008-07-05 19:56:47 +00:00
sam
87278ff58a Change the calling convention for ic_node_alloc to deal with
some longstanding issues:
o pass the vap since it's now the "coin of the realm" and required
  to do things like set initial tx parameters in private node
  state for use prior to association
o pass the mac address as cards that maintain outboard station
  tables require this to create an entry (e.g. in ibss mode)
o remove the node table reference, we only have one node table
  and it's unlikely this will change so this is not needed to
  find the com structure
2008-06-07 18:38:02 +00:00
sam
cbfc222a85 Split ieee80211_notify_erp into locked and unlocked variants
and use the locked version to handle the hostap input path
case where the com lock is not already held.

Noticed by:	Jared Go
2008-06-07 17:51:41 +00:00
sam
9def6ee8e7 Fix node cleanup issues when the last reference is held by
the driver (e.g. in the tx q); ni_vap may not be valid, we
must carefully check before using it.
2008-06-07 17:50:24 +00:00
sam
1926cf2176 correct code returned in AsssocResp; the previous code is spec'd for use
only in deauth+disassoc frames

Submitted by:	Chris Zimmermann
MFC after:	1 month
2008-06-07 17:43:41 +00:00
sam
a881f390cd Add ieee80211_crypto_reload_keys to push all keys known
to net80211 back into the device; intended for use on resume
by devices that lose the contents of their h/w key table.
2008-05-28 23:33:29 +00:00
sam
7aa0974e2b Add a mac address to the key definition as otherwise we lose the
address specified in the ioctl and for drivers that need the address
to locate a key (e.g. for delete).

Note this changes net80211-private api's but not the driver callback;
may want to change that in the future.

Reviewed by:	sephe, thompsa
2008-05-28 23:32:00 +00:00
sam
6be5c5b31d Split s/w crypt/mic attributes to allow future hackery; this change
should be a noop.
2008-05-28 23:25:36 +00:00
sam
fae2bc8246 missing piece of last commit; add RESUME flag bit definition 2008-05-28 23:20:27 +00:00
sam
9d56b1ea54 Add ieee80211_suspend_all and ieee80211_resume_all for
brute force suspend/resume handling of vaps.
2008-05-28 23:19:20 +00:00
sam
74db96e06d Don't override the txpower cap installed by ieee80211_alloc_node;
we use ic_txpowlimit (for now) to initialize all new sta entries.
2008-05-28 23:18:17 +00:00
sam
7c9c77d9fb Simplify some contorted logic that wrongly left ISCAN_DISCARD set
in certain cases causing the current ap to be lost from the scan cache.

Obtained from:	Atheros (original bug)
2008-05-28 23:15:24 +00:00
sam
24e6f87d1f Revise lock name handling:
o construct a name for the com lock as done for other locks
o pass the device name to IEEE80211_LOCK_INIT so the mtx name
  is constructed as foo_com_lock
o introduce *_LOCK_OBJ macro's to hide the lock contents and
  minimize redundant code
2008-05-28 23:10:53 +00:00
sam
d352221a97 special-case broadcast probe request in ieee80211_find_rxnode; we need
to spam all vaps and this won't happen if the frame comes from a station
that is associated to an ap vap (and so has an entry in the table)

Noticed by:	Jared Go
Reviewed by:	thompsa
2008-05-22 22:22:10 +00:00
sam
bcc592e44d ignore sw beacon miss while scanning, just reset the beacon count and timer
Reviewed by:	thompsa
2008-05-22 22:17:27 +00:00
sam
f8640d7746 no need to stop the sw beacon miss timer; it's not used with adhoc or wds 2008-05-22 22:14:58 +00:00
sam
d9c0a1e65f declare ieee80211_phymode_name with an array size 2008-05-12 00:34:28 +00:00
sam
84c4dbca4f Update PLCP<->rate mapping support:
o correct mapping of CCK rates to PLCP; was using nonstandard Ralink
  values which just happened to also be used by Zydas (so went unnoticed)
o change ieee80211_plcp2rate api to take a phy type instead of a flag
  that indicates ofdm/!ofdm
o update drivers to match (restore per-driver code to map rate->PLCP)

Reviewed by:	sephe, weongyo, thompsa
2008-05-12 00:32:52 +00:00
sam
f663b62128 Minor cleanup of vap create work:
o add IEEE80211_C_STA capability to indicate sta mode is supported
  (was previously assumed) and mark drivers as capable
o add ieee80211_opcap array to map an opmode to the equivalent capability bit
o move IEEE80211_C_OPMODE definition to where capabilities are defined so it's
  clear it should be kept in sync (on future additions)
o check device capabilities in clone create before trying to create a vap;
  this makes driver checks unneeded
o make error codes return on failed clone request unique
o temporarily add console printfs on clone request failures to aid in
  debugging; these will move under DIAGNOSTIC or similar before release
2008-05-12 00:15:30 +00:00
sam
544a240c14 we have a DFS capability now so enable check 2008-05-11 23:36:58 +00:00
sam
7e908fb72f use c99-style initialization for ieee80211_phymode_name 2008-05-11 23:33:56 +00:00
sam
2aec73fe96 add DFS capability bit and use it to auto-enable DFS support 2008-05-11 23:32:07 +00:00
sam
d58b2a7dc0 use the current left edge of the BA window when forming ADDBA request
so an existing session is re-established with the correct seq#
2008-05-11 23:27:57 +00:00
sam
e78391fb48 add PLCP service bit definitions 2008-05-11 23:20:26 +00:00
sam
b7f174118d move inline keyword to silence compiler complaints 2008-05-11 23:18:11 +00:00
sam
4122c8ed69 fix build w/ IEEE80211_DEBUG_REFCNT enabled 2008-05-01 20:26:25 +00:00
sam
baf49360e8 re-enable WME by default; after a full day of testing on iwi I see no
issues and the only way we'll identify them is for people to use it
2008-05-01 03:49:59 +00:00
sam
75309f9315 disable default enabling of WME until we resolve driver regressions 2008-04-30 16:05:57 +00:00
sam
bc02c73d03 hookup the parent device's if_input and if_output to stub routines
to catch unintended use (one might argue about if_output but it's
behaviour is ill-defined without vap context)

Noticed by:	Paul B. Mahol
2008-04-25 19:45:42 +00:00
sam
3569e353ca Multi-bss (aka vap) support for 802.11 devices.
Note this includes changes to all drivers and moves some device firmware
loading to use firmware(9) and a separate module (e.g. ral).  Also there
no longer are separate wlan_scan* modules; this functionality is now
bundled into the wlan module.

Supported by:	Hobnob and Marvell
Reviewed by:	many
Obtained from:	Atheros (some bits)
2008-04-20 20:35:46 +00:00
sam
c125e780ea Fix adhoc mode to scan all available channels for a bss to join
while still restricting auto-channel select to only those channels
permitted by regulatory constraints (sorta, we're still missing the
checks to honor radar and noadhoc status on channels).  This somehow
got lost in the initial merge of the revised scanning code.

Reviewed by:	jhay
MFC after:	2 weeks
2008-02-29 04:07:07 +00:00
sephe
f42ebbd1b7 - Correctly handle ALTQ in ieee80211_deliver_data()
- Add comment from sam that ALTQ probably does not work well with WME

PR: kern/119548
Approved by: sam (mentor)
2008-02-03 12:00:03 +00:00
sam
3a6b566d92 add opaque pointer to tx ampdu state for drivers
MFC after:	3 days
2008-02-02 00:38:02 +00:00
sam
a0c183dcb8 o correct typo that broke check when handling addba response
o add a comment about the ht rates being for 20MHz channels w/ long GI;
  needs a separate fix after more thought

MFC after:	3 days
2008-02-01 21:31:10 +00:00
sam
40492a0edf update channel flag defs to match _ieee80211.h so cpp doesn't complain
about redefinitions

MFC after:	1 week
2007-12-13 01:23:40 +00:00
kmacy
12b5f9c8c9 Add padding for anticipated functionality
- vimage
 - TOE
 - multiq
 - host rtentry caching

Rename spare used by 80211 to if_llsoftc

Reviewed by: rwatson, gnn
MFC after: 1 day
2007-12-07 01:46:13 +00:00
sam
ae8014822b Be more careful handling off-channel frames: if the driver (wrongly)
sends frames up the stack after changing the current channel then
the lookup by ieee channel number may fail leaving a null ptr in
se_chan; if this happens fallback to the channel recorded when the
frame is processed (curchan).  Since the frame doesn't contribute
to scan results for the sta this is acceptable.

Reviewed by:	thompsa
MFC after:	3 days
2007-11-26 21:28:18 +00:00
sam
c5a1cf34b3 correct WMM packet classification:
o use TID_TO_WME_AC on vlan tag priority
o ignore ECN bits in DSCP when mapping IP TOS and use TID_TO_WME_AC

MFC after:	3 days
2007-11-23 06:24:57 +00:00
sam
9b58c99e95 o correct re-association indicator dispatched in node join event
o remove misleading "reassociation" msg on sta join

MFC after:	3 days
2007-11-23 06:23:12 +00:00
sam
47d976145c correct sta mode setup: adopt ap's ampdu density and max ampdu size
instead of using local settings

MFC after:	3 days
2007-11-23 06:14:32 +00:00
sam
f8024545e2 parse htcap ie early so ampdu density and max rx size are available
for constructing the AssocReq frame

MFC after:	3 days
2007-11-23 06:13:39 +00:00
sam
6b8e7c4c3b correct TID_TO_WME_AC handling of BE
MFC after:	3 days
2007-11-23 06:12:46 +00:00
sam
d7af353cad use the DSPARMS ie to find the home channel for off-channel frames
Reviewed by:	thompsa
MFC after:	1 week
2007-11-23 05:58:37 +00:00
sam
7af41a1053 add ieee80211_find_channel_byieee to lookup a channel by ieee channel #
Reviewed by:	thompsa
MFC after:	1 week
2007-11-23 05:57:20 +00:00
sam
8e16a578b8 update default wme parameters to latest WiFi test plans
Reviewed by:	Allan Lim
MFC after:	3 days
2007-11-23 05:55:06 +00:00
sam
48737e6e4f correct MIMO power save action frame format;
this one really is from the D2.04 spec

MFC after:	3 days
2007-11-14 21:28:48 +00:00
sam
2543bc5606 correct termination check doing amsdu de-aggregation
MFC after:	3 days
2007-11-08 17:11:40 +00:00
sam
41cdb14400 Correct handling of off-channel frames:
o do not override the home channel recorded for the sta when the frame is
  received off-channel; this fixes a problem where we might think the sta
  was operating on the channel the frame was received on causing association
  requests to be ignored/rejected (likely cause of kern/99036)
o don't include rssi of off-channel frames in the avg rssi used to select
  a bss; this gives us a better estimate of the signal we will see for the
  station when on-channel

PR:		kern/99036
Found by:	Yubin Gong
Reviewed by:	sephe
MFC after:	1 week
2007-11-05 17:24:28 +00:00
sam
e6720edef5 sync 11n support with vap code base; many changes based on interop
testing with all major vendors

MFC after:	1 week
2007-11-02 05:22:25 +00:00
sam
141114012a correct channel flags returned by IEEE80211_IOC_STA_INFO; we need
to return all 32-bits to identify stations operating with HT

MFC after:	1 week
2007-11-02 05:19:14 +00:00
sam
bea2dd5a06 don't try to re-associate after a parameter change, too many ap's
don't do this right; instead go to the scan cache so we pass through
auth state (if the cache is warm we can do this w/o an actual scan)

MFC after:	1 week
2007-11-02 05:11:45 +00:00
sam
e7f2b8665c silence complaint about not loading the wlan_scan_monitor module;
it does not exist and is not needed as monitor mode operation has
always required setting the current channel

Reviewed by:	thompsa
MFC after:	1 week
2007-10-24 20:20:41 +00:00
sam
8faa6081c7 invalidate ic_prevchan when constructing a new channel list
Approved by:	re (blanket wireless)
2007-09-18 21:54:27 +00:00
sam
6c988f9d11 honor IEEE80211_C_TXFRAG; drivers should never get fragmented packets
unless they indicate they're able to handle them

Approved by:	re (blanket wireless)
2007-09-18 21:09:26 +00:00
sam
70cb2f8614 tag mgmt and null data frames w/ a WME priority so drivers can assume
only data frames require classification

Approved by:	re (blanket wireless)
2007-09-18 21:07:41 +00:00
sam
a965065ed5 mgmt subtype 13 is action
Approved by:	re (blanket wireless)
MFC after:	2 weeks
2007-09-18 21:02:23 +00:00
sam
27063b31a0 Close longstanding race dropping inactive stations; grab a reference
to the node before starting the work, otherwise the node may go
away before a reference is made in ieee80211_send_mgmt.

Approved by:	re (blanket wireless)
Obtained from:	Atheros
2007-09-18 21:01:04 +00:00
sam
ce0001ed04 Safeguard count of stations in power save; don't touch it unless we're
operating in a mode where it should be maintained.

Approved by:	re (blanket wireless)
MFC after:	2 weeks
2007-09-18 20:55:51 +00:00
sam
c5c86cd09d skip IEEE80211_MODE_AUTO in announcing supported rates in ieee80211_announce;
there won't be any

Approved by:	re (blanket wireless)
2007-09-18 20:51:55 +00:00