Fix dynamic attach/detach of 802.11 devices after r287197:

o In pccard_ether add code to start children of a 802.11
  device, that are configured in rc.conf.
o In devd.conf provide a regex matching all 802.11 devices,
  and on match run pccard_ether to spawn children.

PR:		202784
Submitted by:	<vidwer gmail.com>
In collaboration with:	"Oleg V. Nauman" <oleg opentransfer.com>
This commit is contained in:
Gleb Smirnoff 2015-09-02 12:46:42 +00:00
parent 9c10871d75
commit e560791028
2 changed files with 28 additions and 9 deletions

View File

@ -22,6 +22,9 @@ options {
"(aac|adv|adw|aha|ahb|ahc|ahd|aic|amd|amr|asr|bt|ciss|ct|dpt|\
esp|ida|iir|ips|isp|mlx|mly|mpt|ncr|ncv|nsp|stg|sym|trm|wds)\
[0-9]+";
set wifi-driver-regex
"(ath|bwi|bwn|ipw|iwi|iwn|malo|mwl|ral|rsu|rum|run|uath|upgt|\
ural|urtw|urtwn|wi|wpi|wtap|zyd)[0-9]+";
};
# Note that the attach/detach with the highest value wins, so that one can
@ -57,17 +60,16 @@ notify 0 {
};
#
# Like Ethernet devices, but separate because
# they have a different media type. We may want
# to exploit this later.
# Like Ethernet devices, but separate because 802.11 require spawning
# wlan(4) interface.
#
detach 0 {
media-type "802.11";
action "/etc/pccard_ether $device-name stop";
};
attach 0 {
media-type "802.11";
action "/etc/pccard_ether $device-name start";
device-name "$wifi-driver-regex";
action "/etc/pccard_ether $device-name startchildren";
};
detach 0 {
device-name "$wifi-driver-regex";
action "/etc/pccard_ether $device-name stopchildren";
};
notify 0 {
match "system" "IFNET";

View File

@ -17,6 +17,9 @@ stop_precmd="checkauto"
stop_cmd="pccard_ether_stop"
restart_precmd="checkauto"
restart_cmd="pccard_ether_restart"
startchildren_cmd="pccard_ether_startchildren"
stopchildren_cmd="pccard_ether_stopchildren"
extra_commands="startchildren stopchildren"
setup_routes()
{
@ -114,6 +117,20 @@ pccard_ether_restart()
pccard_ether_start
}
pccard_ether_startchildren()
{
for child in `get_if_var $ifn wlans_IF`; do
/etc/rc.d/netif quietstart $child
done
}
pccard_ether_stopchildren()
{
for child in `get_if_var $ifn wlans_IF`; do
/etc/rc.d/netif quietstop $child
done
}
ifn=$1
shift
if [ -z "$*" ]; then