Commit Graph

398 Commits

Author SHA1 Message Date
Sam Leffler
8039c240fd 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 Leffler
a557c018f5 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 Leffler
727fe7f862 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 Leffler
12c1df4bc0 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 Leffler
0c99c16b0f correct termination check doing amsdu de-aggregation
MFC after:	3 days
2007-11-08 17:11:40 +00:00
Sam Leffler
5773d80e69 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 Leffler
1b6167d239 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 Leffler
cd9a2dab49 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 Leffler
8279a8ebf2 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 Leffler
b161c30793 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 Leffler
ab562eef00 invalidate ic_prevchan when constructing a new channel list
Approved by:	re (blanket wireless)
2007-09-18 21:54:27 +00:00
Sam Leffler
37c8bda5fa 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 Leffler
bb239ce970 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 Leffler
2949b58fa7 mgmt subtype 13 is action
Approved by:	re (blanket wireless)
MFC after:	2 weeks
2007-09-18 21:02:23 +00:00
Sam Leffler
5698ab1ad3 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 Leffler
e5ac9e91bd 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 Leffler
7edb9e0a7f 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
Sam Leffler
f0ee92d585 o add IEEE80211_RATE_MCS to use instead of naked constant (for marking MCS)
o correct ieee80211_rate2media handling of MCS
o correct rate HT announcements for 11n devices

Approved by:	re (blanket wireless)
2007-09-18 20:46:36 +00:00
Sam Leffler
b337fbc435 o move IEEE80211_NONQOS_TID into a public location
o add IEEE80211_TID_SIZE and replace all the nake constants

Approved by:	re (blanket wireless)
2007-09-18 20:40:21 +00:00
Sam Leffler
95032ab129 remove IFM_IEEE80211_HT40PLUS and IFM_IEEE80211_HT40MINUS; they
never got used so nuke 'em before we branch

Approved by:	re (blanket wireless)
2007-09-18 20:30:40 +00:00
Sam Leffler
b105a06908 Update beacon handling to sync w/ vap code base:
o add driver callback to handle notification of beacon changes;
  this is required for devices that manage beacon frames themselves
  (devices must override the default handler which does nothing)
o move beacon update-related flags from ieee80211com to the beacon
  offsets storage (or handle however a driver wants)
o expand beacon offsets structure with members needed for 11h/dfs
  and appie's
o change calling convention for ieee80211_beacon_alloc and
  ieee80211_beacon_update
o add overlapping bss support for 11g; requires driver to pass
  beacon frames from overlapping bss up to net80211 which is not
  presently done by any driver
o move HT beacon contents update to a routine in the HT code area

Reviewed by:	avatar, thompsa, sephe
Approved by:	re (blanket wireless)
2007-09-17 19:07:24 +00:00
Sam Leffler
5ef9cd6c92 correct netband skip check in constructing a country ie
Approved by:	re (blanket net80211)
2007-09-17 03:48:32 +00:00
Sam Leffler
7595008bb1 oops, add missing bit from last change
Approved by:	re (blanket wireless)
2007-09-06 00:08:02 +00:00
Sam Leffler
c066143c08 Fixup sta inactivity handling:
o reset ni_inact when ni_inact_reload is changed so we're
  assured a valid setting
o never let ni_inact go negative
o add a knob to disable hostap sta idle handling (e.g. so it can be done
  by a user application)
o remove bogus reload on associate

Reviewed by:	avatar
Approved by:	re (blanket wireless)
2007-09-06 00:04:36 +00:00
Sam Leffler
14fb6b8fe2 o add 802.11 state machine states for DFS and client-side power save
o fixup drivers to ignore new states

Reviewed by:	avatar (?)
Approved by:	re (blanket wireless)
2007-09-05 21:31:32 +00:00
Sam Leffler
3f87f68e74 Update channel definition:
o add ic_extieee to hold the HT40 extension channel number
o add ic_state to track dynamic channel state for DFS
o add flags to mark regulatory channel requirements
o add state defs for DFS/radar support

Reviewed by:	avatar
Approved by:	re (blanket wireless)
2007-09-05 20:37:39 +00:00
Sam Leffler
eddedabe31 Miscellaneous fixups to 802.11 defs:
o update 11n definitions to D2.0 spec
o add IEEE80211_CAPINFO_SPECTRUM_MGMT for DFS support
o add CSA ie definition for DFS support
o purge some unused definitions
o correct 802.11 reason and status codes
o correct reason code returned when a sta tries to associate to an
  ap operating with WPA/RSN but without a WPA/RSN ie

Reviewed by:	thompsa, avatar
Approved by:	re (blanket wireless)
2007-09-05 20:29:51 +00:00
Sam Leffler
b1acbdbbbb o add M_WEP mbuf flag so drivers can mark frames that are decrypted by the
device and have had the crypto bits stripped from the 802.11 header
o strip mbuf flags in the rx path before passing up the stack

Reviewed by:	thompsa, sephe, avatar
Approved by:	re (blanket wireless)
2007-09-05 20:22:59 +00:00
Sepherosa Ziehau
f05ba5eeed Off-by-one bug in country ie construction, which will make HOSTAP send out
malformatted beacons.

Reviewed by: sam
Approved by: re (bmah), sam (mentor)
2007-08-26 11:34:51 +00:00
Sepherosa Ziehau
98b335504d Fix following nits:
- Per ieee80211com sysctl ctx leakage on detach
- getmgtframe incorrectly adjusts mbuf.m_data

Reviewed by: sam
Approved by: re (bmah), sam (mentor)
2007-08-26 11:32:56 +00:00
Sam Leffler
d72c72537e drop frames marked for encryption when no key is available
Reviewed by:	avatar
Approved by:	re (kensmith)
Obtained from:	madwifi
2007-08-24 15:44:27 +00:00
Sepherosa Ziehau
7f02e579c5 In add_channel(), search 11g channels if mode is AUTO and corresponding
11b channel is not found, e.g. Atheros 5211.

Reported by: matteo
Problem outlined by: thompsa
Reviewed by: sam, thompsa
Approved by: re (kensmith), sam (mentor)
Tested by: matteo (an early version)
2007-07-20 11:38:12 +00:00
Sam Leffler
c4ed2c08ad revert handling of ssid and bssid to be manadatory instead of advisory
Prodded by:	Kevin Gerry
Reviewed by:	thompsa, sephe
Approved by:	re (kensmith)
2007-07-12 17:22:43 +00:00
Andrew Thompson
d4548f0965 Move the XCHANNEL radiotap definition to a free slot. NetBSD defined some
additional values causing a conflict.

Submitted by:	sam
Approved by:	re (kensmith)
2007-07-01 06:59:30 +00:00
Andrew Thompson
d81b3a5588 Fix scanning issues since the new net80211 code went in
- provide dummy routines for ic_scan_curchan and ic_scan_mindwell, we do not support those operations.
- add ieee80211_scan_done() to tell the scanning module that all channels have been scanned.
- pass IEEE80211_S_SCAN state off to net80211 so it can initiate scanning
- fix overflow in the rates array
- scale the rate value passed back from the firmware scan to the units that net80211 uses.

Submitted by:	Token
Reviewed by:	sam, avatar
Approved by:	re (kensmith)
2007-06-30 21:39:21 +00:00
Andrew Thompson
b54b1bab4b Change the channel number in the scan results struct to be a pointer to the
operating channel and use this in the scan cache rather than directly using
ic_curchan. Some firmware cards can only do a full scan and so ic_curchan does
not have the correct value.

Also add IEEE80211_CHAN2IEEE to directly dereference ic_ieee from the channel
to be used in the fast path.

Reviewed by:	sam, sephe
Approved by:	re (kensmith)
2007-06-30 21:23:23 +00:00
Sam Leffler
b038594e17 Correct msecs_to_ticks macro. This fixes problems when hz is not the
default 1000 setting.

Reviewed by:	thompsa, rpaulo
Approved by:	re (bmah)
2007-06-25 03:26:10 +00:00
Sam Leffler
cb8bac4aee Correct state machine handling of AUTH -> AUTH transitions that pass
through wpa_supplcant.  If a sta is deauth'd (e.g. due to inactivity)
with roaming mode set to manual then a subsequent MLME assoc request
will be incorrectly handled and the station will never reauthenticate.
To fix this interpret a reason code of zero as sufficient to send an
auth request frame.
2007-06-16 05:13:48 +00:00
Warner Losh
820d8b5c5d Prefer __packed to __attribute__((__packed__)).
OK'd by sam@ months ago...
2007-06-11 19:34:53 +00:00
Sam Leffler
68e8e04e93 Update 802.11 wireless support:
o major overhaul of the way channels are handled: channels are now
  fully enumerated and uniquely identify the operating characteristics;
  these changes are visible to user applications which require changes
o make scanning support independent of the state machine to enable
  background scanning and roaming
o move scanning support into loadable modules based on the operating
  mode to enable different policies and reduce the memory footprint
  on systems w/ constrained resources
o add background scanning in station mode (no support for adhoc/ibss
  mode yet)
o significantly speedup sta mode scanning with a variety of techniques
o add roaming support when background scanning is supported; for now
  we use a simple algorithm to trigger a roam: we threshold the rssi
  and tx rate, if either drops too low we try to roam to a new ap
o add tx fragmentation support
o add first cut at 802.11n support: this code works with forthcoming
  drivers but is incomplete; it's included now to establish a baseline
  for other drivers to be developed and for user applications
o adjust max_linkhdr et. al. to reflect 802.11 requirements; this eliminates
  prepending mbufs for traffic generated locally
o add support for Atheros protocol extensions; mainly the fast frames
  encapsulation (note this can be used with any card that can tx+rx
  large frames correctly)
o add sta support for ap's that beacon both WPA1+2 support
o change all data types from bsd-style to posix-style
o propagate noise floor data from drivers to net80211 and on to user apps
o correct various issues in the sta mode state machine related to handling
  authentication and association failures
o enable the addition of sta mode power save support for drivers that need
  net80211 support (not in this commit)
o remove old WI compatibility ioctls (wicontrol is officially dead)
o change the data structures returned for get sta info and get scan
  results so future additions will not break user apps
o fixed tx rate is now maintained internally as an ieee rate and not an
  index into the rate set; this needs to be extended to deal with
  multi-mode operation
o add extended channel specifications to radiotap to enable 11n sniffing

Drivers:
o ath: add support for bg scanning, tx fragmentation, fast frames,
       dynamic turbo (lightly tested), 11n (sniffing only and needs
       new hal)
o awi: compile tested only
o ndis: lightly tested
o ipw: lightly tested
o iwi: add support for bg scanning (well tested but may have some
       rough edges)
o ral, ural, rum: add suppoort for bg scanning, calibrate rssi data
o wi: lightly tested

This work is based on contributions by Atheros, kmacy, sephe, thompsa,
mlaier, kevlo, and others.  Much of the scanning work was supported by
Atheros.  The 11n work was supported by Marvell.
2007-06-11 03:36:55 +00:00
Sam Leffler
ae8b733312 copyright updates:
o update to include 2007
o switch back to a 2-clause bsd-only license

Reviewed by:	onoe
2007-06-06 04:56:04 +00:00
Sepherosa Ziehau
63afe606f8 - Nuke unnecessary header.
- Make wlan_amrr depend on wlan, so that it can find various symbols in
  wlan module if wlan is not compiled into kernel.

Approved by:	sam (mentor)
Tested by:	kevlo
2007-05-05 11:07:52 +00:00
Sam Leffler
6dbd16f1cc change ic_modecaps to a bit vector and use setbit, et. al. 2007-03-11 22:37:32 +00:00
Sam Leffler
c6303b231f Update to reflect correct usage:
o leave IEEE80211_RADIOTAP_HDRLEN for portability to other systems but
  correct comment about radiotap headers being padded to 64-bytes
  (hasn't been true for many years)
o remove reference to IEEE80211_RADIOTAP_FCS; it was never used, instead
  the flags are marked with IEEE80211_RADIOTAP_F_FCS to indicate whether
  or not FCS is present

Might be better to just remove IEEE80211_RADIOTAP_HDRLEN so drivers
don't bogusly pad.

MFC after:	2 weeks
2007-03-11 07:42:02 +00:00
Sam Leffler
70e28b9a2d change ieee80211_fix_rate to take a rate set instead of using
ni_rates; this lets us re-use the code to check 11n HT rates

MFC after:	2 weeks
2007-03-11 07:22:21 +00:00
Sam Leffler
a000d7c202 expose IEEE80211_DISCARD, IEEE80211_DISCARD_IE, and IEEE80211_DISCARD_MAC
so they can be used within net80211 but outside ieee80211_input.c

MFC after:	2 weeks
2007-03-11 07:15:38 +00:00
Sam Leffler
ca700860df improve debug msg for ie's that are too short
MFC after:	2 weeks
2007-03-11 07:08:04 +00:00
Sam Leffler
801df4a58c keep tx/rx seq #'s for non-QoS traffic separate from QoS; stations
aren't supposed mix traffic but if they did frames might be mis-handled

Obtained from:	Atheros
MFC after:	2 weeks
2007-03-11 07:06:08 +00:00
Sam Leffler
0adf0a3b3e split check for rate set mismatch on assoc req away from check
for pure 11g mode so we can give meaningful diagnostic msgs

MFC after:	2 weeks
2007-03-11 06:55:59 +00:00
Sam Leffler
9672f0230f disallow re-associate with a slot time mismatch
Obtained from:	Atheros
MFC after:	2 weeks
2007-03-11 06:52:22 +00:00
Sam Leffler
f597faba37 move __inline before type to appease gcc 4.x
Obtained from:	netbsd
2007-03-11 06:44:51 +00:00
Sam Leffler
7835d71cde white space diff reduction 2007-03-11 06:38:26 +00:00
Sam Leffler
cda15ce18b add IEEE80211_KEY_UNDEFINED and use it instead of local defs
Obtained from:	netbsd
2007-03-11 06:36:10 +00:00
Sam Leffler
b265ac32c2 discard deauth+disassoc frames that are not destined for us; these
can be received when the interface is in promisc mode

Reviewed by:	sephe
Obtained from:	netbsd
2007-03-11 06:35:27 +00:00
Sam Leffler
11df4239a6 change ieee80211_mhz2ieee to use the PSB mapping when the frequency
falls in the proper place, not when we're handed a 1/2 or 1/4-rate channel

MFC after:	2 weeks
2007-03-11 06:24:26 +00:00
Sam Leffler
3c419c1bb5 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
2007-03-07 04:42:22 +00:00
Sam Leffler
49aa47d6c7 add ieee80211_opmode_name array for mapping the opmode to a string
for printing diagnostic msgs

MFC after:	2 weeks
2007-03-07 04:35:07 +00:00
Sam Leffler
fe49f061b4 when starting up an ibss master use a random address for
the bssid; this is required for wifi alliance compliance

Obtained from:	Atheros
MFC after:	2 weeks
2007-03-07 04:31:49 +00:00
Sam Leffler
89f0549d37 correct inital bounds check on returning scan results; this does not
paper over catching an error as the case was already handled, albeit
in a somewhat surprising way (the caller received zero'd data)

Submitted by:	sephe
MFC after:	2 weeks
2007-03-05 19:12:25 +00:00
Sam Leffler
f48ad55ef5 correct conversions between TU and ms/ticks; these are not used
by any code in the tree[1] and are close enough for common values
that this change is a noop

[1] ath uses one macro to calculate a value that is not used
Submitted by:	sephe
MFC after:	1 week
2007-03-05 18:52:35 +00:00
Sam Leffler
f3b179a4b1 clear/reclaim challenge text when switching auth mode and operating as an ap
Obtained from:	Atheros
2007-02-04 05:49:16 +00:00
Sam Leffler
d9ff043726 add IEEE80211_IS_CHAN_PASSIVE
MFC after:	1 week
2007-02-02 02:45:33 +00:00
Sam Leffler
ca4ac7ae14 Add initial support for 900MHz cards like the Ubiquiti SR9:
o add channel flag to enable freq <-> ieee channel # mapping (can
  go away in the future when ieee number is precomputed)
o add mapping between 900mhz freq's and channel #'s that gives a
  unique channel # for each half/quarter/full width channel
o remove assumptions that half/quarter rate channels on happen in 11a
o remove assumptions that all 11g channels are full width
o ensure ic_curchan is reset on mode change so changing the channel
  list (e.g. on countrycode change) doesn't leave curchan set to an
  invalid channel

There is still an issue with switching rate sets; to be fixed separately.

MFC after:	1 month
2007-01-15 01:12:28 +00:00
Sam Leffler
5675bedd40 reduce user-visible namespace to just what is needed
MFC after:	2 weeks
2007-01-09 04:37:05 +00:00
Sam Leffler
37c970e41e bandaid to unbreak build (user code includes this file) 2007-01-09 00:33:10 +00:00
Sam Leffler
915f1482a9 Fix potential node refcnt leak. If mbufs are q'd on ic_mgtq when
the state machine clocks to INIT, node references are not reclaimed.
Add a new routine ieee80211_drain_ifq that does this and use it
instead of IF_DRAIN.

Submitted by:	Sepherosa Ziehau
Obtained from:	DragonFly
MFC after:	1 month
2007-01-08 18:23:43 +00:00
Sam Leffler
79edaebfe4 Correct several issues with rate set negotiation:
o add IEEE80211_F_JOIN flag to ieee80211_fix_rate to indicate a station
  is joining a BSS; this is used to control whether or not we over-write
  the basic rate bit in the calculated rate set
o fix ieee80211_fix_rate to honor IEEE80211_F_DODEL when IEEE80211_F_DONEGO
  is not specified (e.g. when joining an ibss network)
o on sta join always delete unusable rates from the negotiated rate set,
  this was being done only ibss networks but is also needed for 11g bss
  with mixed stations
o on sta join delete unusable rates from the bss node's rate set, not the
  scan table entry's rate set
o when calculating a rate set for new neighbors in an ibss caculate a
  negotiated rate set so drivers are not presented with rates they should
  not use

Submitted by:	Sepherosa Ziehau (w/ modifications)
Obtained from:	DragonFly
MFC after:	1 month
2007-01-08 17:24:51 +00:00
Matt Jacob
38da14963f Fix compile error. 2007-01-06 05:38:18 +00:00
Kip Macy
fe1903bcff fix declaration / definition mismatch with ieee80211_chan2ieee 2007-01-06 02:56:41 +00:00
Sam Leffler
45fa8b0e9a o unbreak rate set defaulting
o mark 11g mode support on finding 11g or pure 11g (OFDM-only)
  channels; was requiring pure 11g which caused some contortions
  in drivers that manually setup their channel lists
2006-12-28 01:31:26 +00:00
Sam Leffler
41b3c790eb First cut at half/quarter-rate 11a channel support (e.g. for use
in the Public Safety Band):
o add channel flags to identify half/quarter-rate operation
o add rate sets (need to check spec on 4Mb/s in 1/4 rate)
o add if_media definitions for new rates
o split net80211 channel setup out into ieee80211_chan_init
o fixup ieee80211_mhz2ieee and ieee80211_ieee2mhz to understand half/quarter
  rate channels: note we temporarily use a nonstandard/hack numbering that
  avoids overlap with 2.4G channels because we don't (yet) have enough
  state to identify and/or map overlapping channel sets
o fixup ieee80211_ifmedia_init so it can be called post attach and will
  recalculate the channel list and associated state; this enables changing
  channel-related state like the regulatory domain after attach (will be
  needed for 802.11d support too)
o add ieee80211_get_suprates to return a reference to the supported rate
  set for a given channel
o add 3, 4.5, and 27 MB/s tx rates to rate <-> media conversion routines
o const-poison channel arg to ieee80211_chan2mode
2006-12-27 18:46:18 +00:00
Warner Losh
f4fcdb0eb5 Fix packing on the country band descriptor. No real change since this
is unused.

Reviewed by: sam
2006-12-01 18:40:51 +00:00
Sam Leffler
ab96db105f back out use of LLC_SNAPFRAMELEN now that sizeof(struct llc) isn't
padded on arm
2006-12-01 17:58:33 +00:00
Sam Leffler
8c86f43df4 sizeof(struct llc) includes padding on arm; use LLC_SNAPFRAMELEN for now
Submitted by:	jhay
MFC after:	2 weeks
2006-12-01 05:48:35 +00:00
Sam Leffler
aadecb1ac8 Default the rate sets for 802.11 operating modes so drivers aren't
required to.  Note this only happens when drivers don't set them
up before calling ieee80211_ifattach so this change is backwards
compatible.

MFC after:	1 month
2006-11-26 22:48:03 +00:00
Sam Leffler
344a9e8c0f add rate control debug msg bit
MFC after:	1 month
2006-11-26 19:55:57 +00:00
Sam Leffler
74828f25db device-independent implementation of AMRR tx rate control algorithm
Obtained from:	openbsd (w/ mods)
MFC after:	1 month
2006-11-26 19:55:26 +00:00
Robert Watson
acd3428b7d Sweep kernel replacing suser(9) calls with priv(9) calls, assigning
specific privilege names to a broad range of privileges.  These may
require some future tweaking.

Sponsored by:           nCircle Network Security, Inc.
Obtained from:          TrustedBSD Project
Discussed on:           arch@
Reviewed (at least in part) by: mlaier, jmg, pjd, bde, ceri,
                        Alex Lyashkov <umka at sevcity dot net>,
                        Skip Ford <skip dot ford at verizon dot net>,
                        Antoine Brodin <antoine dot brodin at laposte dot net>
2006-11-06 13:42:10 +00:00
Ruslan Ermilov
f88b3f22ac Now that we have COMPAT_FREEBSD6 officially, use it from opt_compat.h. 2006-09-26 12:41:13 +00:00
Andre Oppermann
78ba57b9e1 Move ethernet VLAN tags from mtags to its own mbuf packet header field
m_pkthdr.ether_vlan.  The presence of the M_VLANTAG flag on the mbuf
signifies the presence and validity of its content.

Drivers that support hardware VLAN tag stripping fill in the received
VLAN tag (containing both vlan and priority information) into the
ether_vtag mbuf packet header field:

	m->m_pkthdr.ether_vtag = vlan_id;	/* ntohs()? */
	m->m_flags |= M_VLANTAG;

to mark the packet m with the specified VLAN tag.

On output the driver should check the mbuf for the M_VLANTAG flag to
see if a VLAN tag is present and valid:

	if (m->m_flags & M_VLANTAG) {
		... = m->m_pkthdr.ether_vtag;	/* htons()? */
		... pass tag to hardware ...
	}

VLAN tags are stored in host byte order.  Byte swapping may be necessary.

(Note: This driver conversion was mechanic and did not add or remove any
byte swapping in the drivers.)

Remove zone_mtag_vlan UMA zone and MTAG_VLAN definition.  No more tag
memory allocation have to be done.

Reviewed by:	thompsa, yar
Sponsored by:	TCP/IP Optimization Fundraise 2005
2006-09-17 13:33:30 +00:00
Sam Leffler
d1c85dae69 More statistics fixups:
o change rssi to be signed in ieee80211_nodestats
o add noise floor in ieee80211_nodestats (use an implicit hole to
  preserve layout); return it as zero until we can update the api's
  so the driver can provide noise floor data
o add a bandaid so IEEE80211_IOC_STA_STATS works for sta mode; when
  all nodes are in the station table this will no longer be needed
o fix braino in IEEE80211_IOC_STA_INFO implementation; was supposed
  to take a mac address and return info for that sta or all stations
  if ff:ff:ff:ff:ff was supplied--but somehow this didn't get implemented;
  implement the intended semantics and leave a compat shim at the old
  ioctl number for the previous api

Reviewed by:	mlaier
MFC after:	3 weeks
2006-08-10 06:04:00 +00:00
Sam Leffler
06efa2f0eb minor fixups:
o add some missing stats to the global stat structure
o move accounting work for data frame rx into ieee80211_deliver_data
o add per-sta stats for rx ucast/mcast frames
o set rcvif in ieee80211_deliver_data so callers don't need to

MFC after:	2 weeks
2006-08-10 05:54:36 +00:00
Sam Leffler
b6e9b119a2 add per-sta ucast/mcast stats
MFC after:	1 week
2006-08-10 05:37:49 +00:00
Sam Leffler
246b546762 add support for 802.11 packet injection via bpf
Together with:	Andrea Bittau <a.bittau@cs.ucl.ac.uk>
Reviewed by:	arch@
MFC after:	1 month
2006-07-26 03:15:16 +00:00
Sam Leffler
546786c951 add IEEE80211_IOC_BMISSTHRESHOLD for managing the beacon miss
threshold

Submitted by:	Henrik Brix Andersen <henrik@brixandersen.dk>
MFC after:	2 weeks
2006-07-26 03:07:36 +00:00
Sam Leffler
202b0d1101 o move min/max beacon interval and dtim period to public location
o add min/max beacon miss threshold settings
o delete IEEE80211_SWBMISS_THRESHOLD, it was never used

MFC after:	2 weeks
2006-07-26 03:05:34 +00:00
Sam Leffler
5eac3ff784 correct ie length check; need to include fixed part of ie
MFC after:	2 weeks
2006-07-16 21:19:28 +00:00
Sam Leffler
0eda166b8f power save mode state changes should not require clocking the 802.11
state machine; use the reset method instead

MFC after:	2 weeks
2006-07-16 19:10:41 +00:00
Sam Leffler
70326a6eb6 tighten invariant on loops used to parse ie's; this ensures we never
touch data outside the packet (previously we might touch 1 byte); it
also has the happy side effect of working around broken orinoco/agere
firmware that sends malformed association response frames

Help by:	Vladimir Egorin
2006-07-16 16:02:17 +00:00
Sam Leffler
f1bf5adef5 remove duplicate ifname in debug msg
MFC after:	1 week
2006-06-24 18:00:17 +00:00
John Baldwin
edd32c2da2 Use kern_kldload() and kern_kldunload() to load and unload modules when
we intend for the user to be able to unload them later via kldunload(2)
instead of calling linker_load_module() and then directly adjusting the
ref count on the linker file structure.  This makes the resulting
consumer code simpler and cleaner and better hides the linker internals
making it possible to sanely lock the linker.
2006-06-13 21:36:23 +00:00
Christian S.J. Peron
16d878cc99 Fix the following bpf(4) race condition which can result in a panic:
(1) bpf peer attaches to interface netif0
	(2) Packet is received by netif0
	(3) ifp->if_bpf pointer is checked and handed off to bpf
	(4) bpf peer detaches from netif0 resulting in ifp->if_bpf being
	    initialized to NULL.
	(5) ifp->if_bpf is dereferenced by bpf machinery
	(6) Kaboom

This race condition likely explains the various different kernel panics
reported around sending SIGINT to tcpdump or dhclient processes. But really
this race can result in kernel panics anywhere you have frequent bpf attach
and detach operations with high packet per second load.

Summary of changes:

- Remove the bpf interface's "driverp" member
- When we attach bpf interfaces, we now set the ifp->if_bpf member to the
  bpf interface structure. Once this is done, ifp->if_bpf should never be
  NULL. [1]
- Introduce bpf_peers_present function, an inline operation which will do
  a lockless read bpf peer list associated with the interface. It should
  be noted that the bpf code will pickup the bpf_interface lock before adding
  or removing bpf peers. This should serialize the access to the bpf descriptor
  list, removing the race.
- Expose the bpf_if structure in bpf.h so that the bpf_peers_present function
  can use it. This also removes the struct bpf_if; hack that was there.
- Adjust all consumers of the raw if_bpf structure to use bpf_peers_present

Now what happens is:

	(1) Packet is received by netif0
	(2) Check to see if bpf descriptor list is empty
	(3) Pickup the bpf interface lock
	(4) Hand packet off to process

From the attach/detach side:

	(1) Pickup the bpf interface lock
	(2) Add/remove from bpf descriptor list

Now that we are storing the bpf interface structure with the ifnet, there is
is no need to walk the bpf interface list to locate the correct bpf interface.
We now simply look up the interface, and initialize the pointer. This has a
nice side effect of changing a bpf interface attach operation from O(N) (where
N is the number of bpf interfaces), to O(1).

[1] From now on, we can no longer check ifp->if_bpf to tell us whether or
    not we have any bpf peers that might be interested in receiving packets.

In collaboration with:	sam@
MFC after:	1 month
2006-06-02 19:59:33 +00:00
Diomidis Spinellis
132142c572 Move conditional preprocessing out from the IEEE80211_DPRINTF macro
invocation.  Per C99 6.10.3 paragraph 11 preprocessing directives
appearing as macro arguments yield undefined behavior.
2006-06-01 14:06:32 +00:00
Sam Leffler
ee25b8df01 Ensure outbound data packets in hostap mode are delivered only to
stations that are associated by making ieee80211_find_txnode return
NULL when a unicast frame is to be delivered to an unassociated
station.  This will be handled differently in the future but for
now putting the check here allows all drivers to immediately do
the right thing.

Reviewed by:	avatar
MFC after:	1 week
2006-04-28 19:06:15 +00:00
Sam Leffler
9cab5ba3f9 back out public safety-specific channel number mapping; we can't do
it until we know it should be applied as otherwise we can map 11a
channels into the 2.4G range and choose the wrong item from the
chanenl array
2006-04-26 16:00:37 +00:00
Sam Leffler
42568791f9 implement set(IEEE80211_IOC_STA_STATS) for hostapd; for
now just make it clear station statistics (could read
a stat block and assign to caller can do partial changes)

Reviewed by:	avatar (previous version)
MFC after:	1 week
2006-03-27 05:22:35 +00:00
Sam Leffler
83a244dbe0 when doing s/w crypto make sure work is done w/ a writable mbuf chain;
this corrects problems with drivers that rely on the host to do
crypto (iwi, ipw, ral, ural, wi (hostap), awi)

Hard work by:	luigi, mlaier
Reviewed by:	luigi, mlaier
MFC after:	1 week
2006-03-15 21:27:08 +00:00
Sam Leffler
ad26242724 fix switching between agressive and non-agressive wmm modes
Obtained from:	atheros
MFC after:	3 days
2006-03-10 06:18:03 +00:00
Sam Leffler
a8eb5364fe use m_dup instead of m_copypacket when doing internal bridging
in case packets are modified (e.g. encrypted)

MFC after:	1 week
2006-03-07 03:55:05 +00:00
Sam Leffler
66ef39690f deliver an l2uf frame on sta join to prime the bridge
Obtained from:	madwifi
MFC after:	1 week
2006-03-06 17:26:16 +00:00