Commit Graph

354 Commits

Author SHA1 Message Date
sam
63f1cc9c73 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
a0ffc08348 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
c8efce1b96 improve debug msg for ie's that are too short
MFC after:	2 weeks
2007-03-11 07:08:04 +00:00
sam
72f9ecd769 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
f159bf3ace 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
de9f5f66c4 disallow re-associate with a slot time mismatch
Obtained from:	Atheros
MFC after:	2 weeks
2007-03-11 06:52:22 +00:00
sam
f6283342b1 move __inline before type to appease gcc 4.x
Obtained from:	netbsd
2007-03-11 06:44:51 +00:00
sam
2cf4e10491 white space diff reduction 2007-03-11 06:38:26 +00:00
sam
b04c5bd382 add IEEE80211_KEY_UNDEFINED and use it instead of local defs
Obtained from:	netbsd
2007-03-11 06:36:10 +00:00
sam
679daf8497 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
0ea08cfa34 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
519f61f995 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
24d9d9d380 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
bf24ed1972 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
7c030f485b 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
369e4f0ba4 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
9f1eaf60b8 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
fe499355a4 add IEEE80211_IS_CHAN_PASSIVE
MFC after:	1 week
2007-02-02 02:45:33 +00:00
sam
a3a275335d 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
5f3fe586c5 reduce user-visible namespace to just what is needed
MFC after:	2 weeks
2007-01-09 04:37:05 +00:00
sam
94eff94524 bandaid to unbreak build (user code includes this file) 2007-01-09 00:33:10 +00:00
sam
12b187d035 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
fae048c859 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
mjacob
6f7fa5b385 Fix compile error. 2007-01-06 05:38:18 +00:00
kmacy
c933a59d56 fix declaration / definition mismatch with ieee80211_chan2ieee 2007-01-06 02:56:41 +00:00
sam
18aaf4be3d 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
4442f89b49 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
imp
2ad752f0ee 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
b49de5db1b 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
012439b03a 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
4d53d1a1f7 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
2b69a396bd add rate control debug msg bit
MFC after:	1 month
2006-11-26 19:55:57 +00:00
sam
c3214b9492 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
rwatson
10d0d9cf47 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
ru
196675b4cb Now that we have COMPAT_FREEBSD6 officially, use it from opt_compat.h. 2006-09-26 12:41:13 +00:00
andre
2d9e7e4a32 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
f478fb3344 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
3e268c1af8 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
1d4a6e38d2 add per-sta ucast/mcast stats
MFC after:	1 week
2006-08-10 05:37:49 +00:00
sam
a245550432 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
21beef2f64 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
0e7f6a5c5f 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
c088f3a6cc correct ie length check; need to include fixed part of ie
MFC after:	2 weeks
2006-07-16 21:19:28 +00:00
sam
26117ad450 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
a8a04e1bee 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
e7b8f52220 remove duplicate ifname in debug msg
MFC after:	1 week
2006-06-24 18:00:17 +00:00
jhb
9af5dd68e4 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
csjp
2c4f67981e 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
dds
09c5e71a92 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
1ab3e7af30 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
c8ffa2a506 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
4d87d66b1c 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
abccf6f3e2 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
b1c2c5a706 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
d851e18329 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
4da3fa06be 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
sam
d3539a10d4 when scanning channels marked passive defer probe request until
802.11 traffic is seen; fixes problems with ap's hiding their ssid

Obtained from:	atheros
MFC after:	1 week
2006-03-06 17:23:26 +00:00
sam
e98053c4cb consolidate calculation of capabilities ie
Reviewed by:	avatar
MFC after:	2 weeks
2006-02-25 05:36:43 +00:00
sam
43320429a8 honor user-specified key index for global key slots
Submitted by:	Joe Love
Reviewed by:	avatar
MFC after:	1 week
2006-02-21 23:51:19 +00:00
sam
076fb6f25e treat setting the optional ie to a zero-length datum to mean "delete
the ie"; this helps drivers that (wrongly) check ic_opt_ie against NULL
when making decisions

Reviewed by:	luigi, avatar
MFC after:	3 days
2006-02-20 17:17:00 +00:00
sam
bb2e6821fa o make driver override of net80211 parameter state consistent
with methods: instead of honoring non-zero values expect drivers
  to write their own values on return from ieee80211_ifattach
o add a define for the default h/w bmiss count

MFC after:	2 weeks
2006-02-14 17:48:56 +00:00
sam
dde9f675ff set the mgt frame tx timer before dispatching the frame to the
driver; this closes a race where a response could be processed
before the timer was started and cause a RUN->SCAN state change
when operating in station mode

Reviewed by:	avatar, dyoung
MFC after:	1 week
2006-02-08 17:30:31 +00:00
sam
90a825465e s/w beacon miss facility; need to add knobs to fiddle with the settings
MFC after:	2 weeks
2006-01-23 21:02:49 +00:00
sam
311f7976bc switch beacon miss threshold from a time to the number of beacon
frames; the time value was implicitly based on the beacon interval
but never being updated so wrong when the negotiated beacon interval
was not 100 TU
2006-01-23 20:57:30 +00:00
sam
1e87b34be9 bounds check each ie's length when parsing
Obtained from:	madwifi
MFC after:	1 week
2006-01-23 19:31:00 +00:00
sam
bf6514997f Rev ioctl to get scan results:
o lock the list walk
o malloc a results buffer instead of copying out one result at a time
  using an on-stack buffer
o fix definition of ieee80211req_scan_result so size of variable-length
  information elements is large enough to hold all possible ie's
  (still only return wpa+wme, at some point may return all)
o make rssi+noise data signed; they should've been so all along
o add a bit more padding for future additions while we're here
o define a new ioctl for new api and add compat code for old ioctl
  under COMPAT_FREEBSD6 (temporarily enabled local to the file)

Reviewed by:	Scott Long
MFC after:	2 weeks
2006-01-18 22:17:50 +00:00
sam
c239d3a5b8 bump the scan generation number before iterating so we're guaranteed
to have a value that's not been used before; this fixes the problem
where the first traversal of the scan list did nothing because the
entries were initialized with the current generation number (a
separate issue)

MFC after:	1 week
2006-01-18 19:56:17 +00:00
cperciva
2fcf51df29 Correct a buffer overflow when scanning for 802.11 wireless networks.
Security:	FreeBSD-SA-06:05.80211
2006-01-18 09:03:15 +00:00
sam
7430294cb8 add flag to tag frames w/ a known bad FCS
Obtained from:	netbsd
MFC after:	1 week
2006-01-09 17:04:56 +00:00
sam
e115c4ac0d enable "aggressive mode" only when operating in ap or station mode; in
particular this fixes use of wme in adhoc demo mode, it wasn't possible
to set the txop limit because the aggressive mode logic would override

Reviewed by:	apatti
MFC after:	2 weeks
2006-01-02 17:16:27 +00:00
sam
f48869decc update erp information element in the beacon frame to reflect
changes in the bss

Reviewed by:	avatar
Obtained from:	atheros
MFC after:	2 weeks
2006-01-02 16:57:20 +00:00
sam
784566928e correct checking for turbo channels: rev 1.24 fixed static turbo channels
but broke handling of the turboG channel; since we aren't ready to revamp
the channel list just check for turboA channels for now so channel 6 is
considered in auto mode

Noticed by:	gibbs
2005-12-30 00:40:36 +00:00
sam
d27cba6029 correct (reversed) ms<->tu macros
Reviewed by:	apatti, kcyu
2005-12-29 19:03:45 +00:00
glebius
175e16aa4d - Fix VLAN_INPUT_TAG() macro, so that it doesn't touch mtag in
case if memory allocation failed.
- Remove fourth argument from VLAN_INPUT_TAG(), that was used
  incorrectly in almost all drivers. Indicate failure with
  mbuf value of NULL.

In collaboration with:	yongari, ru, sam
2005-12-18 18:24:27 +00:00
sam
7fcf256cd8 make packet bursting configurable (default to on if device is capable) 2005-12-14 19:32:53 +00:00
sam
732b0618d0 When creating neighbor entries for an ahdemo bss apply the local
settings.  In particular this allows us to use QoS frames in a
bss and in turn enables disabling ack's.
2005-12-14 01:18:36 +00:00
sam
0ca99df920 when creating an ahdemo bss use any requested bssid; otherwise use zero
Obtained from:	madwifi
2005-12-14 01:16:22 +00:00
sam
9281b20b4c allow setting the bssid in any mode
Obtained from:	netbsd
2005-12-14 01:14:22 +00:00
sam
f051015cb9 disallow module unload when there are dynamic references
MFC after:	1 week
2005-12-12 19:07:48 +00:00
sam
a106e1bec9 propagate current bss state on sta join so, in particular, authmode
is set properly in the new bss node

MFC after:	2 weeks
2005-12-12 18:44:27 +00:00
sam
14e234a70b Bandaid ieee80211_set_chan to handle a channel parameter of "any";
this can happen under certain conditions when scanning.  This logic
will eventually go away with the new scanning code.

While here de-inline the routine.

MFC after:	1 week
2005-12-12 18:42:20 +00:00
sam
85817ec368 o correct auto mode logic for avoiding turbo channels
o correct assumption that a static turbo channel is also
  usable in 11a; the opposite is true

MFC after:	1 week
2005-12-12 18:38:20 +00:00
sam
2911d079c2 Add ieee80211_beacon_miss for processing sta mode beacon miss events
in the 802.11 layer: we send a directed probe request frame to the
current ap bmiss_max times (w/o answer) before scanning for a new ap.

MFC after:	2 weeks
2005-12-12 18:04:44 +00:00
sam
8c5ce57de4 add some useful definitions that'll be used soon 2005-12-12 17:57:00 +00:00
sam
9b57399d9c add fixed rate for sending multicast frames
Obtained from:	atheros
MFC after:	1 week
2005-12-12 17:54:39 +00:00
sam
4c5cf2f0f1 change malloc when setting an optional ie to use M_NOWAIT
MFC after:	3 days
2005-12-12 17:40:49 +00:00
sam
4b58922473 correct parameter check when retrieving the current channel list
MFC after:	3 days
2005-12-12 17:38:53 +00:00
sam
7c824b541b correct handling of dtim for periods > 1
Obtained from:	madwifi
2005-12-05 22:14:13 +00:00
sam
9c83a5df85 Adhoc mode fixups:
o plug memory leak in adhoc mode: on rx the sender may be the
  current master so simply checking against ic_bss is not enough
  to identify if the packet comes from an unknown sender; must
  also check the mac address
o split neighbor node creation into two routines and fillin state
  of nodes faked up on xmit when a beacon or probe response frame
  is later received; this ensures important state like the rate set
  and advertised capabilities are correct

Obtained from:	netbsd
MFC after:	1 week
2005-12-04 04:50:27 +00:00
sam
ef3f2fcd84 fix dynamic changes in short slottime for 11g sta mode: set the
slot time based on the rcvd capabilities, not the existing ones

Obtained from:	atheros
MFC after:	1 week
2005-11-30 19:54:41 +00:00
sam
0bc81b5357 Update ieee80211_mhz2ieee to understand public safety bands and spectrum
that can potentially be mapped to negative ieee #'s.

NB: before operation on the latter can be supported we need to cleanup
    various code that assumes ieee channel #'s are >= 0
2005-11-15 05:56:32 +00:00
ru
f70f525b49 - Store pointer to the link-level address right in "struct ifnet"
rather than in ifindex_table[]; all (except one) accesses are
  through ifp anyway.  IF_LLADDR() works faster, and all (except
  one) ifaddr_byindex() users were converted to use ifp->if_addr.

- Stop storing a (pointer to) Ethernet address in "struct arpcom",
  and drop the IFP2ENADDR() macro; all users have been converted
  to use IF_LLADDR() instead.
2005-11-11 16:04:59 +00:00
andre
0df84f5a83 Retire MT_HEADER mbuf type and change its users to use MT_DATA.
Having an additional MT_HEADER mbuf type is superfluous and redundant
as nothing depends on it.  It only adds a layer of confusion.  The
distinction between header mbuf's and data mbuf's is solely done
through the m->m_flags M_PKTHDR flag.

Non-native code is not changed in this commit.  For compatibility
MT_HEADER is mapped to MT_DATA.

Sponsored by:	TCP/IP Optimization Fundraise 2005
2005-11-02 13:46:32 +00:00
avatar
c2fb68f116 Properly set ic_curchan before calling back to device driver to do channel
switching(ifconfig devX channel Y).  This fix should make channel changing
works again in monitor mode.

Submitted by:	sam
X-MFC-With:	other ic_curchan changes
2005-08-30 14:27:47 +00:00
sam
31519765e7 revert 1.64: we cannot use the channel characteristics to decide when to
do 11g erp sta accounting because b/g channels show up as false positives
when operating in 11b.

Noticed by:	Michal Mertl
2005-08-13 17:50:21 +00:00
sam
8449b25a22 Extend acl support to pass ioctl requests through and use this to
add support for getting the current policy setting and collecting
the list of mac addresses in the acl table.

Submitted by:	Michal Mertl (original version)
MFC after:	2 weeks
2005-08-13 17:31:48 +00:00
sam
68a0fee0bb Don't use ic_curmode to decide when to do 11g station accounting,
use the station channel properties.  Fixes assert failure/bogus
operation when an ap is operating in 11a and has associated stations
then switches to 11g.

Noticed by:	Michal Mertl
Reviewed by:	avatar
MFC after:	2 weeks
2005-08-10 17:42:13 +00:00
sam
7d1366bf6d Clarify/fix handling of the current channel:
o add ic_curchan and use it uniformly for specifying the current
  channel instead of overloading ic->ic_bss->ni_chan (or in some
  drivers ic_ibss_chan)
o add ieee80211_scanparams structure to encapsulate scanning-related
  state captured for rx frames
o move rx beacon+probe response frame handling into separate routines
o change beacon+probe response handling to treat the scan table
  more like a scan cache--look for an existing entry before adding
  a new one; this combined with ic_curchan use corrects handling of
  stations that were previously found at a different channel
o move adhoc neighbor discovery by beacon+probe response frames to
  a new ieee80211_add_neighbor routine

Reviewed by:	avatar
Tested by:	avatar, Michal Mertl
MFC after:	2 weeks
2005-08-10 16:22:30 +00:00
rwatson
5d770a09e8 Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and
IFF_DRV_RUNNING, as well as the move from ifnet.if_flags to
ifnet.if_drv_flags.  Device drivers are now responsible for
synchronizing access to these flags, as they are in if_drv_flags.  This
helps prevent races between the network stack and device driver in
maintaining the interface flags field.

Many __FreeBSD__ and __FreeBSD_version checks maintained and continued;
some less so.

Reviewed by:	pjd, bz
MFC after:	7 days
2005-08-09 10:20:02 +00:00
sam
3215a6e2e3 Split crypto tx+rx key indices and add a key index -> node mapping table:
Crypto changes:
o change driver/net80211 key_alloc api to return tx+rx key indices; a
  driver can leave the rx key index set to IEEE80211_KEYIX_NONE or set
  it to be the same as the tx key index (the former disables use of
  the key index in building the keyix->node mapping table and is the
  default setup for naive drivers by null_key_alloc)
o add cs_max_keyid to crypto state to specify the max h/w key index a
  driver will return; this is used to allocate the key index mapping
  table and to bounds check table loookups
o while here introduce ieee80211_keyix (finally) for the type of a h/w
  key index
o change crypto notifiers for rx failures to pass the rx key index up
  as appropriate (michael failure, replay, etc.)

Node table changes:
o optionally allocate a h/w key index to node mapping table for the
  station table using the max key index setting supplied by drivers
  (note the scan table does not get a map)
o defer node table allocation to lateattach so the driver has a chance
  to set the max key id to size the key index map
o while here also defer the aid bitmap allocation
o add new ieee80211_find_rxnode_withkey api to find a sta/node entry
  on frame receive with an optional h/w key index to use in checking
  mapping table; also updates the map if it does a hash lookup and the
  found node has a rx key index set in the unicast key; note this work
  is separated from the old ieee80211_find_rxnode call so drivers do
  not need to be aware of the new mechanism
o move some node table manipulation under the node table lock to close
  a race on node delete
o add ieee80211_node_delucastkey to do the dirty work of deleting
  unicast key state for a node (deletes any key and handles key map
  references)

Ath driver:
o nuke private sc_keyixmap mechansim in favor of net80211 support
o update key alloc api

These changes close several race conditions for the ath driver operating
in ap mode.  Other drivers should see no change.  Station mode operation
for ath no longer uses the key index map but performance tests show no
noticeable change and this will be fixed when the scan table is eliminated
with the new scanning support.

Tested by:	Michal Mertl, avatar, others
Reviewed by:	avatar, others
MFC after:	2 weeks
2005-08-08 18:46:36 +00:00