Commit Graph

172 Commits

Author SHA1 Message Date
sam
097175bde2 Handle encrypt of arbitarily fragmented mbuf chains: previously
we bailed if we couldn't collect the 16-bytes of data required
for an aes block cipher in 2 mbufs; now we deal with it.  While
here make space accounting signed so a sanity check does the
right thing for malformed mbuf chains.

Approved by:	re (scottl)
2005-07-11 03:06:23 +00:00
sam
e1d30f6c56 nuke assert that duplicates real check
Reviewed by:	avatar
Approved by:	re (scottl)
2005-07-11 03:00:20 +00:00
sam
aa33c1cc86 Change default key allocation method to do the right thing for
legacy parts (i.e. those that have 4 global key slots).  We
blindly assign unicast keys to key slot 0.  Devices that need
alternate allocation logic must override this method.

Reviewed by:	avatar
Approved by:	re (scottl)
2005-07-09 23:15:30 +00:00
sam
514091a2b5 correct check for high priority wme traffic
Noticed by:	Ralf Assmann
Reviewed by:	apatti
Approved by:	re (scottl)
2005-07-08 22:49:26 +00:00
sam
20d38d6afa fix another instance of the MORE_DATA bit handling for frames on the
power save queue (missed in previous commit)

Submitted by:	Bruno Randolf
Approved by:	re (scottl)
2005-07-08 16:36:02 +00:00
sam
61cabe0353 add "pureg" mode for ap operation: reject association requests from
11b-only stations when operating in 11g

Reviewed by:	avatar
Approved by:	re (scottl)
2005-07-06 15:38:27 +00:00
sam
636341c188 Fix handling of data frames queued for a station in power save mode:
don't mark the MORE_DATA bit when taking it off the ps queue, there's
no 802.11 header then; we must wait to do this at encap time so
mark the mbuf instead.

Reviewed by:	avatar
Approved by:	re (scottl)
Obtained from:	Atheros
2005-07-06 01:55:17 +00:00
sam
42be4e8353 Fix race condition in handling node reference counts for authenticating
stations in ap mode.  Track when a node's first auth frame is
received and use this to decide whether or not to bump the refcnt.
This insures we only ever bump the refcnt once.

Reviewed by:	avatar
Approved by:	re (scottl)
2005-07-06 01:51:44 +00:00
avatar
9fb6cc8fde Only update the scan entry state based on newly received frames.
This fixes duplicative BSS entries(memory leaks as well) listed in
"ifconfig dev list scan" when a station fails to associate with an AP.

Reviewed by:	sam
Approved by:	re (scottl)
2005-07-06 01:31:34 +00:00
sam
89b6b99eed remove auto-add of IEEE80211_KEY_GROUP; all the apps that need to
set it have been fixed

Reviewed by:	avatar
Approved by:	re (scottl)
2005-07-05 18:05:25 +00:00
sam
b19edfa1af o when setting a wpa key, hold a ref on the bss node;
fixes a ref cnt leak
o make unicast key handling on delete identical to set
o change legacy wep key api to reset the 802.11 state
  machine for backwards compatibility

Reviewed by:	avatar
Approved by:	re (scottl)
2005-07-05 17:35:35 +00:00
sam
01de859665 when operating in ap mode, explicitly drop associated/authenticated
stations when transitioning to INIT state (e.g. as a result of
changing state at the 802.11 level)

Approved by:	re (scottl)
2005-07-04 01:29:41 +00:00
sam
4e4b8392b5 revert 1.53; it breaks ibss merge
Noticed by:	Bruno Randolf
Approved by:	re (dwhite)
2005-06-13 21:01:06 +00:00
sam
105387b318 don't look at the wme ie in a beacon unless we negotiated use 2005-06-10 21:30:29 +00:00
brooks
567ba9b00a Stop embedding struct ifnet at the top of driver softcs. Instead the
struct ifnet or the layer 2 common structure it was embedded in have
been replaced with a struct ifnet pointer to be filled by a call to the
new function, if_alloc(). The layer 2 common structure is also allocated
via if_alloc() based on the interface type. It is hung off the new
struct ifnet member, if_l2com.

This change removes the size of these structures from the kernel ABI and
will allow us to better manage them as interfaces come and go.

Other changes of note:
 - Struct arpcom is no longer referenced in normal interface code.
   Instead the Ethernet address is accessed via the IFP2ENADDR() macro.
   To enforce this ac_enaddr has been renamed to _ac_enaddr.
 - The second argument to ether_ifattach is now always the mac address
   from driver private storage rather than sometimes being ac_enaddr.

Reviewed by:	sobomax, sam
2005-06-10 16:49:24 +00:00
sam
3eaa67c3ad validate the bssid for non-data frames too when operating in
adhoc/ahdemo/hostap modes
2005-06-10 16:14:48 +00:00
sam
6ee6d88916 o fix wpa w/ wme: don't strip the QoS header on recv as tkip requires
it; instead pass the space occupied by the header down into the
  crypto modules (except in the demic case which needs it only when
  doing int in s/w)
o while here fix defrag to strip the header from 2nd and later frames
o teach decap code how to handle 4-address frames
2005-06-10 16:11:24 +00:00
sam
836efd552e mark stations authorized during recv processing instead of doing it
as a side effect of sending an auth success frame; sending mgmt
frames should not have side effects
2005-06-10 05:04:42 +00:00
sam
a161b6a7bc move AID implementation defines from the protocol definitions to
where they are used
2005-06-10 04:42:34 +00:00
sam
d6dd7e9d2a accept diassoc frame in ASSOC state 2005-06-10 04:37:05 +00:00
sam
f524fb8e7d pull some debug msgs up so they're seen more often 2005-06-10 01:48:57 +00:00
sam
6bac24f11a kick the state machine when we receive failure notice from an ap (when
operating in sta mode); this speeds up the state machine, previously
we were acting on a timeout
2005-06-10 01:47:28 +00:00
sam
78c35576de discard open auth requests in adhoc mode 2005-06-10 01:43:28 +00:00
sam
afe76ba36a reject open auth requests when shared key auth is configured
Obtained from:	Atheros
2005-06-10 01:41:59 +00:00
sam
87f793a9fe add ieee80211_send_error to encapsulate an idiom 2005-06-10 01:40:58 +00:00
sam
07fc2e05e9 o always check if ic_set_tim is !NULL before using it
o add missing call to clear tim after flushing ps q
2005-06-10 01:38:02 +00:00
sam
e32bb658a4 mark state for protection only when operating in 11g 2005-06-10 01:35:21 +00:00
sam
cbf7030d15 don't reject station based on the PRIVACY bit in the capabilities;
the 802.11 spec says not to

Obtained from:	Atheros
2005-06-10 01:33:47 +00:00
sam
adbfe7192e correct checks for rate set compatibility 2005-06-10 01:31:28 +00:00
sam
7b2e90955c record tstamp from beacons received in station mode when associated;
this is needed by drivers that want to resync their timers based on
the tsf of the last recv'd beacon frame
2005-06-10 01:29:21 +00:00
sam
0a48913a6f o collect dtim period+count from beacons in station mode so drivers
can better program beacon timers
o leave placeholder in com structure for future ap/adhoc mode tim support

Reviewed by:	avatar
2005-06-09 04:05:43 +00:00
sam
2a3c2a37f6 Change the MLME ASSOCIATE ioctl to accept either a ssid, a bssid,
or a bssid+ssid. This is needed for later versions of wpa_supplicant
and for forthcoming addons to wpa_supplicant.

Note this is an api change and applications must be rebuilt.
2005-06-07 23:37:49 +00:00
sam
b04dca4ae5 Don't clock the state machine in various cases when roaming is set
to manual; this helps keep wpa_supplicant in sync.
2005-06-07 23:31:36 +00:00
sam
24d4beb312 WPA/802.11i interoperability fixes:
o only include capabilities word in the WPA ie when non-zero and
  not preauth
o always include the capabilities in the RSN ie

Obtained from:	Atheros
2005-06-07 00:08:48 +00:00
sam
5bab97118d add force flag to enmic/demic crypto api for use in xmit fragmentation
and h/w mic verification

Reviewed by:	avatar
2005-06-06 04:04:38 +00:00
sam
8ace9dabca Revise crypto api lightly to improve group key handling:
o don't pre-assign key index to the global key table entries so device
  has a chance to decide what to use
o make ieee80211_crypto_newkey take the desired flags as an argument
  instead of wacking the key structure directly; this eliminates a
  bunch of code warts
o add a new flag IEEE80211_KEY_GROUP to indicate a key is a WPA Group
  key so devices don't need to guess (temporarily add this flag in the
  ioctl code until we can get wpa_supplicant+hostapd updated)
o shuffle IEEE80211_KEY_* bits to move flags used internally to the high
  nibble of the flags word

Reviewed by:	Tai-hwa Liang
2005-04-12 17:55:13 +00:00
sam
4a61af733a remove extern from function decls 2005-04-04 04:27:20 +00:00
sam
2425695845 change ieee80211_input to return the frame type or -1 2005-04-04 02:32:56 +00:00
sam
50f9633899 pass re-association events up using a new message type 2005-03-29 19:36:42 +00:00
sam
eabc12aec2 when WPA is enabled discard association requests w/o a WPA ie
Submitted by:	Divy Le Ray
2005-03-26 07:15:34 +00:00
sam
262d235182 don't include wme ie in probe request frames; it was meant for probe response
frames--move it there

Noticed by:	Ghislain Mary
Submitted by:	Michael Wong
2005-03-26 07:11:31 +00:00
sam
c0c5a03a41 correct comparison for null ptr
Noticed by:	Coverity Prevent analysis tool
2005-03-16 20:42:00 +00:00
sam
9b7f94f833 avoid potential array index by -1
Noticed by:	Coverity Prevent analysis tool
2005-03-16 20:40:48 +00:00
sam
0ea8247d55 eliminate use after free in debug code
Noticed by:	Coverity Prevent analysis tool
2005-03-16 20:39:05 +00:00
sam
bddcc80ceb kill dead code
Noticed by:	Coverity Prevent analysis tool
2005-03-16 20:35:23 +00:00
sam
228aadaa15 honor any desired bssid when creating an ibss
Prodded by:	David Young
Obtained from:	netbsd
2005-03-08 17:04:14 +00:00
wpaul
8afa2c4c26 Recently, it was reported to me that you could provoke a double fault
panic with the NDISulator if you did "ifconfig ndis0 10.0.0.1/24,"
whereas "ifconfig ndis0 10.0.0.1/24 up" worked fine. The double fault
was caused by the ifconfig thread running out of kernel stack space.
(This was partly due to the NDIsulator using a couple of big buffers on
the stack, but even after fixing that the double fault persisted.)

It turns out that ndis_init() is called in both cases, but in the first
case the code path passes through ieee80211_ioctl(), and it turns out
ieee80211_ioctl() consumes a whopping 2400 bytes of stack space.
Apparently, gcc -O2 causes the ieee80211_ioctl_get80211() routine to
be inlined into ieee80211_ioctl(), and for some reason which I do not
fully understand, this causes ieee80211_ioctl() to consume an extra 2K
of stack space.

To prevent this overly agressive optimization, ieee80211_ioctl_get80211()
is now declared with __attribute__ ((noinline)). With this change,
ieee80211_ioctl() now only reserves about 200 bytes of stack instead of 2400.
2005-03-03 17:35:05 +00:00
sam
9b2bcce14f mark timestamp for pending fragments
Noticed by:	Jeffrey D. Chung
2005-02-23 04:52:30 +00:00
sam
bfba17efd6 rev 1.19 fixed wpa supplicant but broke wpa authenticator; when operating
as an authenticator need to always check for the unicast key in the node
(as was the case before)

Submitted by:	Divy Le Ray
2005-02-10 17:00:48 +00:00
sam
9b44db51a1 propagate state kept in the bss node when re-creating the node
on state transitions; this is a stopgap measure, need to rethink
how we do management of this state

Identified by:	Divy Le Ray
2005-02-10 16:59:04 +00:00