Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Aug 2015 18:13:55 +0300
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        current@FreeBSD.org, net@FreeBSD.org
Subject:   [head up!] WiFi drivers changes
Message-ID:  <20150806151355.GL889@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
  Hi!

  As part of the "opaque ifnet project" [1], all 802.11 (WiFi) drivers
undergo change of not being an interface anymore. Historically in FreeBSD
802.11 stack, 802.11 devices called if_attach() and created an interface.
Later this was generalized and real functioning interface is created by
net80211 stack. However, remnant of parent interface remained. If you
are running Intel Centrino wireless, then you got iwn0 interface and
wlan0 interface. However, the former doesn't do anything. You can't
assign addresses to it or modify any of it parameters. Or you can
modify them, but that affects nothing.

This superfluous ifnet on the list entangles the net80211 stack and
also is on the way of [1]. So, decision was made to remove it. I
already did preparatory commits back in May, and now it is time to
finish that.

The patch is:

https://reviews.freebsd.org/D2655

And the Wiki page for it is:

https://wiki.freebsd.org/projects/ifnet/net80211

The patch modifies every driver, and diff is bulky. However, changes
are mechanical and simple, most drivers appeared to work after first
run. Most converted drivers are tested to work.

This is list of drivers that are not tested, due to lack of testers:

	mwl, ipw, bwn, wi, upgt, uath.

But, as said, changes are mechanical and probability is 95% that
they will work.

The only complex one is ndis(4). It could be broken by conversion.
Since I already got a tester volunteer, I will fix it quickly if
anything happens.

Another untrivial one is wtap(4), which is not connected to the
build and appeared to be broken even before conversion. Anyway,
I made it compilable.

Now, for the configuration. The sequence of commands you need
to run to configure a WiFi interface doesn't change. As before
it is:

ifconfig wlan0 create wlandev iwn0
ifconfig wlan0 $foo

Your rc.conf doesn't need any changes. As before:

wlans_iwn0="wlan0"
ifconfig_wlan0="DHCP WPA"

However, iwn0 disappeared from the 'ifconfig -l'. It is still
in devinfo, or in dmesg. For the sake of installers or other
configuration software, a sysctl is provided:

net.wlan.devices: iwn0

The /etc subsystem needs to be tweaked. Previously the wlan(4)
interfaces were created in childif_create(), and the script
did check for presence of parent interface. In my patch I
provided wlans_up(), that doesn't check. The code in D2655
now works correctly both on patched and on unpatched kernel.

Alternatively, I could tweak childif_create() to use net.wlan.devices
instead of 'ifconfig -l'. Or, to use them both, to work on older
and on newer kernels?

I am not sure which path with /etc is better, so seeking for
help with that.

-- 
Totus tuus, Glebius.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150806151355.GL889>