rc support for vaps
This commit is contained in:
parent
67591c284e
commit
5bd720a7c2
etc
@ -184,6 +184,7 @@ ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration.
|
||||
#ifconfig_lo0_alias0="inet 127.0.0.254 netmask 0xffffffff" # Sample alias entry.
|
||||
#ifconfig_ed0_ipx="ipx 0x00010010" # Sample IPX address family entry.
|
||||
#ifconfig_fxp0_name="net0" # Change interface name from fxp0 to net0.
|
||||
#vaps_ath0="wlan0" # VAP interfaces for ath0 device
|
||||
#ipv4_addrs_fxp0="192.168.0.1/24 192.168.1.1-5/28" # example IPv4 address entry.
|
||||
#
|
||||
#autobridge_interfaces="bridge0" # List of bridges to check
|
||||
|
@ -30,6 +30,56 @@
|
||||
# Requires that rc.conf be loaded first.
|
||||
#
|
||||
|
||||
# ifn_start ifn
|
||||
# Bring up and configure an interface. If some configuration is applied
|
||||
# print the interface configuration.
|
||||
#
|
||||
ifn_start()
|
||||
{
|
||||
local ifn cfg
|
||||
ifn="$1"
|
||||
cfg=1
|
||||
|
||||
[ -z "$ifn" ] && err 1 "ifn_start called without an interface"
|
||||
|
||||
ifscript_up ${ifn} && cfg=0
|
||||
ifconfig_up ${ifn} && cfg=0
|
||||
ipv4_up ${ifn} && cfg=0
|
||||
ipx_up ${ifn} && cfg=0
|
||||
childif_create ${ifn} && cfg=0
|
||||
|
||||
if [ "$cfg" -eq 0 ]; then
|
||||
ifconfig ${ifn}
|
||||
fi
|
||||
|
||||
return $cfg
|
||||
}
|
||||
|
||||
# ifn_start ifn
|
||||
# Shutdown and de-configure an interface. If action is taken print the
|
||||
# interface name.
|
||||
#
|
||||
ifn_stop()
|
||||
{
|
||||
local ifn cfg
|
||||
ifn="$1"
|
||||
cfg=1
|
||||
|
||||
[ -z "$ifn" ] && return 1
|
||||
|
||||
ipx_down ${ifn} && cfg=0
|
||||
ipv4_down ${ifn} && cfg=0
|
||||
ifconfig_down ${ifn} && cfg=0
|
||||
ifscript_down ${ifn} && cfg=0
|
||||
childif_destroy ${ifn} && cfg=0
|
||||
|
||||
if [ "$cfg" -eq 0 ]; then
|
||||
echo -n " ${ifn}"
|
||||
fi
|
||||
|
||||
return $cfg
|
||||
}
|
||||
|
||||
# ifconfig_up if
|
||||
# Evaluate ifconfig(8) arguments for interface $if and
|
||||
# run ifconfig(8) with those arguments. It returns 0 if
|
||||
@ -43,8 +93,8 @@ ifconfig_up()
|
||||
|
||||
ifconfig_args=`ifconfig_getargs $1`
|
||||
if [ -n "${ifconfig_args}" ]; then
|
||||
ifconfig $1 up
|
||||
ifconfig $1 ${ifconfig_args}
|
||||
ifconfig $1 up
|
||||
_cfg=0
|
||||
fi
|
||||
|
||||
@ -452,6 +502,44 @@ clone_down()
|
||||
debug "Destroyed clones: ${_list}"
|
||||
}
|
||||
|
||||
# Create and configure child interfaces.
|
||||
# Return 0 if child interfaces are created.
|
||||
#
|
||||
childif_create()
|
||||
{
|
||||
local cfg child child_vaps create_args ifn i
|
||||
cfg=1
|
||||
|
||||
ifn=$1
|
||||
|
||||
# Create VAPs
|
||||
child_vaps=`get_if_var $ifn vaps_IF`
|
||||
for child in ${child_vaps}; do
|
||||
create_args="wlandev $ifn `get_if_var $child vap_create_IF`"
|
||||
if expr $child : 'wlan[0-9][0-9]*$' >/dev/null 2>&1; then
|
||||
ifconfig $child create ${create_args} && cfg=0
|
||||
else
|
||||
i=`ifconfig wlan create ${create_args}`
|
||||
ifconfig $i name $child && cfg=0
|
||||
fi
|
||||
ifn_start $child
|
||||
done
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
# Destroy child interfaces.
|
||||
#
|
||||
childif_destroy()
|
||||
{
|
||||
local cfg child child_vaps ifn
|
||||
|
||||
child_vaps=`get_if_var $ifn vaps_IF`
|
||||
for child in ${child_vaps}; do
|
||||
ifconfig $child destroy && cfg=0
|
||||
done
|
||||
}
|
||||
|
||||
# Create netgraph nodes.
|
||||
#
|
||||
ng_mkpeer() {
|
||||
|
@ -18,6 +18,7 @@ pidfile="/var/run/${name}.pid"
|
||||
|
||||
command_args="-P ${pidfile} -B ${conf_file}"
|
||||
required_files="${conf_file}"
|
||||
required_modules="wlan_xauth wlan_wep wlan_tkip wlan_ccmp"
|
||||
extra_commands="reload"
|
||||
|
||||
load_rc_config ${name}
|
||||
|
@ -68,7 +68,7 @@ network_start()
|
||||
fi
|
||||
|
||||
# Configure the interface(s).
|
||||
network_common ifn_start verbose
|
||||
network_common ifn_start
|
||||
|
||||
if [ -f /etc/rc.d/ipfilter ] ; then
|
||||
# Resync ipfilter
|
||||
@ -92,34 +92,31 @@ network_stop()
|
||||
echo '.'
|
||||
}
|
||||
|
||||
# network_common routine verbose
|
||||
# network_common routine
|
||||
# Common configuration subroutine for network interfaces. This
|
||||
# routine takes all the preparatory steps needed for configuriing
|
||||
# an interface and then calls $routine. If $verbose is specified,
|
||||
# it will call ifconfig(8) to show, in long format, the configured
|
||||
# interfaces. If $verbose is not given, it will simply output the
|
||||
# configured interface(s).
|
||||
# an interface and then calls $routine.
|
||||
network_common()
|
||||
{
|
||||
local _cooked_list _fail _func _verbose
|
||||
local _cooked_list _fail _func
|
||||
|
||||
_func=
|
||||
_verbose=
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
err 1 "network_common(): No function name specified."
|
||||
else
|
||||
_func="$1"
|
||||
fi
|
||||
[ -n "$2" ] && _verbose=yes
|
||||
|
||||
# Set the scope of the command (all interfaces or just one).
|
||||
#
|
||||
_cooked_list=
|
||||
if [ -n "$cmdifn" ]; then
|
||||
# Don't check that the interfaces exist. We need to run
|
||||
# Don't check that the interface(s) exist. We need to run
|
||||
# the down code even when the interface doesn't exist to
|
||||
# kill off wpa_supplicant.
|
||||
# XXXBED: is this really true or does wpa_supplicant die?
|
||||
# if so, we should get rid of the devd entry
|
||||
_cooked_list="$cmdifn"
|
||||
else
|
||||
_cooked_list="`list_net_interfaces`"
|
||||
@ -127,59 +124,13 @@ network_common()
|
||||
|
||||
_fail=
|
||||
for ifn in ${_cooked_list}; do
|
||||
if ${_func} ${ifn} ; then
|
||||
eval showstat_$ifn=1
|
||||
else
|
||||
_fail="$_fail $ifn"
|
||||
if ! ${_func} ${ifn} $2; then
|
||||
_fail="${_fail} ${ifn}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Display interfaces configured by this script
|
||||
#
|
||||
for ifn in ${_cooked_list}; do
|
||||
eval showstat=\$showstat_${ifn}
|
||||
if [ ! -z ${showstat} ]; then
|
||||
if [ -n "$_verbose" ]; then
|
||||
ifconfig ${ifn}
|
||||
else
|
||||
echo -n " ${ifn}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
debug "The following interfaces were not configured: $_fail"
|
||||
}
|
||||
|
||||
ifn_start()
|
||||
{
|
||||
local ifn cfg
|
||||
ifn="$1"
|
||||
cfg=1
|
||||
|
||||
[ -z "$ifn" ] && return 1
|
||||
|
||||
ifscript_up ${ifn} && cfg=0
|
||||
ifconfig_up ${ifn} && cfg=0
|
||||
ipv4_up ${ifn} && cfg=0
|
||||
ipx_up ${ifn} && cfg=0
|
||||
|
||||
return $cfg
|
||||
}
|
||||
|
||||
ifn_stop()
|
||||
{
|
||||
local ifn cfg
|
||||
ifn="$1"
|
||||
cfg=1
|
||||
|
||||
[ -z "$ifn" ] && return 1
|
||||
|
||||
ipx_down ${ifn} && cfg=0
|
||||
ipv4_down ${ifn} && cfg=0
|
||||
ifconfig_down ${ifn} && cfg=0
|
||||
ifscript_down ${ifn} && cfg=0
|
||||
|
||||
return $cfg
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
run_rc_command $*
|
||||
|
@ -30,18 +30,21 @@ is_wired_interface()
|
||||
test "$media" = "Ethernet"
|
||||
}
|
||||
|
||||
case ${ifn} in
|
||||
ndis*)
|
||||
is_ndis_interface()
|
||||
{
|
||||
case `sysctl -n net.wlan.${1#wlan}.%parent 2>/dev/null` in
|
||||
ndis*) true ;;
|
||||
*) false ;;
|
||||
esac
|
||||
}
|
||||
|
||||
if is_wired_interface ${ifn} ; then
|
||||
driver="wired"
|
||||
elif is_ndis_interface ${ifn} ; then
|
||||
driver="ndis"
|
||||
;;
|
||||
*)
|
||||
if is_wired_interface ${ifn} ; then
|
||||
driver="wired"
|
||||
else
|
||||
driver="bsd"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
else
|
||||
driver="bsd"
|
||||
fi
|
||||
|
||||
load_rc_config $name
|
||||
|
||||
@ -50,5 +53,6 @@ conf_file=${wpa_supplicant_conf_file}
|
||||
pidfile="/var/run/${name}/${ifn}.pid"
|
||||
command_args="-B -i $ifn -c $conf_file -D $driver -P $pidfile"
|
||||
required_files=$conf_file
|
||||
required_modules="wlan_wep wlan_tkip wlan_ccmp"
|
||||
|
||||
run_rc_command "$1"
|
||||
|
Loading…
x
Reference in New Issue
Block a user