freebsd with flexible iflib nic queues
Go to file
Adrian Chadd c79f192c09 Begin plumbing ieee80211_rx_stats through the receive path.
Smart NICs with firmware (eg wpi, iwn, the new atheros parts, the intel 7260
series, etc) support doing a lot of things in firmware.  This includes but
isn't limited to things like scanning, sending probe requests and receiving
probe responses.  However, net80211 doesn't know about any of this - it still
drives the whole scan/probe infrastructure itself.

In order to move towards suppoting smart NICs, the receive path needs to
know about the channel/details for each received packet.  In at least
the iwn and 7260 firmware (and I believe wpi, but I haven't tried it yet)
it will do the scanning, power-save and off-channel buffering for you -
all you need to do is handle receiving beacons and probe responses on
channels that aren't what you're currently on.  However the whole receive
path is peppered with ic->ic_curchan and manual scan/powersave handling.
The beacon parsing code also checks ic->ic_curchan to determine if the
received beacon is on the correct channel or not.[1]

So:

* add freq/ieee values to ieee80211_rx_stats;
* change ieee80211_parse_beacon() to accept the 'current' channel
  as an argument;
* modify the iv_input() and iv_recv_mgmt() methods to include the rx_stats;
* add a new method - ieee80211_lookup_channel_rxstats() - that looks up
  a channel based on the contents of ieee80211_rx_stats;
* if it exists, use it in the mgmt path to switch the current channel
  (which still defaults to ic->ic_curchan) over to something determined
  by rx_stats.

This is enough to kick-start scan offload support in the Intel 7260
driver that Rui/I are working on.  It also is a good start for scan
offload support for a handful of existing NICs (wpi, iwn, some USB
parts) and it'll very likely dramatically improve stability/performance
there.  It's not the whole thing - notably, we don't need to do powersave,
we should not scan all channels, and we should leave probe request sending
to the firmware and not do it ourselves.  But, this allows for continued
development on the above features whilst actually having a somewhat
working NIC.

TODO:

* Finish tidying up how the net80211 input path works.
  Right now ieee80211_input / ieee80211_input_all act as the top-level
  that everything feeds into; it should change so the MIMO input routines
  are those and the legacy routines are phased out.

* The band selection should be done by the driver, not by the net80211
  layer.

* ieee80211_lookup_channel_rxstats() only determines 11b or 11g channels
  for now - this is enough for scanning, but not 100% true in all cases.
  If we ever need to handle off-channel scan support for things like
  static-40MHz or static-80MHz, or turbo-G, or half/quarter rates,
  then we should extend this.

[1] This is a side effect of frequency-hopping and CCK modes - you
    can receive beacons when you think you're on a different channel.
    In particular, CCK (which is used by the low 11b rates, eg beacons!)
    is decodable from adjacent channels - just at a low SNR.
    FH is a side effect of having the hardware/firmware do the frequency
    hopping - it may pick up beacons transmitted from other FH networks
    that are in a different phase of hopping frequencies.
2015-05-25 16:37:41 +00:00
bin Convert to use libxo. Document use of libxo as well. 2015-05-22 23:07:55 +00:00
cddl lockstat(1): document the -V option. 2015-05-25 01:18:46 +00:00
contrib Upgrade our copy of clang and llvm to 3.6.1 release. 2015-05-25 13:43:03 +00:00
crypto Use proper CHAN_TCP_PACKET_DEFAULT for agent forwarding when HPN disabled. 2015-04-02 18:43:25 +00:00
etc Upgrade our copy of clang and llvm to 3.6.1 release. 2015-05-25 13:43:03 +00:00
games fortune/tools/do_uniq.py 2015-04-02 22:42:23 +00:00
gnu Unbreak build where WANT_GDB == "no', as libreadline is also used by ntpdc. 2015-05-25 10:51:40 +00:00
include Remove clause 3 and 4 from the license 2015-05-21 08:38:25 +00:00
kerberos5 Make kerberos use the same sqlite libraries as other sqlite consumer. 2015-05-20 18:56:29 +00:00
lib Upgrade our copy of clang and llvm to 3.6.1 release. 2015-05-25 13:43:03 +00:00
libexec Remove historical GNUC test 2015-05-06 15:29:11 +00:00
release Use mkimg(1) to create the i386 memstick images, similar to 2015-05-23 00:32:58 +00:00
rescue Significant upgrades to sa(4) and mt(1). 2015-02-23 21:59:30 +00:00
sbin Bring back support for checking tables via "ipfw -n". 2015-05-19 18:29:13 +00:00
secure Add the openssl header for arm64. As it is based on MACHINE_CPUARCH it 2015-03-24 14:16:14 +00:00
share sfxge: add 7xxx NICs family support 2015-05-25 08:34:55 +00:00
sys Begin plumbing ieee80211_rx_stats through the receive path. 2015-05-25 16:37:41 +00:00
tests Only reparent a traced process to its old parent if the tracing process is 2015-05-22 11:04:54 +00:00
tools Upgrade our copy of clang and llvm to 3.6.1 release. 2015-05-25 13:43:03 +00:00
usr.bin Teach kdump to understand both linux emulation. 2015-05-24 16:22:03 +00:00
usr.sbin Fix a syntax error in bsdinstall/zfsboot 2015-05-22 15:57:42 +00:00
.arcconfig Phabricator: enable "history.immutable": 2015-04-30 00:27:53 +00:00
.arclint phabricator related changes: 2015-04-20 20:33:22 +00:00
COPYRIGHT Bump copyright year. 2014-12-31 10:00:43 +00:00
LOCKS Explicitly require Security Officer's approval for kernel PRNG bits. 2013-09-17 14:19:05 +00:00
MAINTAINERS Remove cokane@ from MAINTAINERS for 3dfx(4)/tdfx(4) because their email 2014-11-25 05:25:12 +00:00
Makefile Import openresolv 3.7.0. 2015-05-04 20:51:27 +00:00
Makefile.inc1 _Really_, _Really_ fix buildworld by moving the conditionals down, fixing some 2015-05-21 05:02:08 +00:00
ObsoleteFiles.inc Upgrade our copy of clang and llvm to 3.6.1 release. 2015-05-25 13:43:03 +00:00
README README: changes and fixups 2015-04-19 07:16:44 +00:00
UPDATING Upgrade our copy of clang and llvm to 3.6.1 release. 2015-05-25 13:43:03 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree.  See build(7)
and http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html
for more information, including setting make(1) variables.

The `buildkernel` and `installkernel` targets build and install
the kernel and the modules (see below).  Please see the top of
the Makefile in this directory for more information on the
standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process.  See build(7), config(8),
and http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html
for more information.

Note: If you want to build and install the kernel with the
`buildkernel` and `installkernel` targets, you might need to build
world before.  More information is available in the handbook.

The kernel configuration files reside in the sys/<arch>/conf
sub-directory.  GENERIC is the default configuration used in release builds.
NOTES contains entries and documentation for all possible
devices, not just those commonly used.


Source Roadmap:
---------------

bin		System/user commands.

cddl		Various commands and libraries under the Common Development
		and Distribution License.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

rescue		Build system for statically linked /rescue utilities.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

sys		Kernel sources.

tests		Regression tests which can be run by Kyua.  See tests/README
		for additional information.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html