aboutsummaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2010-01-12 19:55:07 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2010-01-12 19:55:07 +0000
commitd46150d4321ccf67d0fbb74cee004fe2f8aecd0f (patch)
tree954e8e3b4833691923914de6132afa7ad9c2f766 /etc
parentbd048c87c0bfbbbd34d209e2b563901726562c38 (diff)
Notes
Diffstat (limited to 'etc')
-rw-r--r--etc/defaults/rc.conf2
-rw-r--r--etc/network.subr56
2 files changed, 54 insertions, 4 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf
index c1dc00078bf9..dd5c0b35bed3 100644
--- a/etc/defaults/rc.conf
+++ b/etc/defaults/rc.conf
@@ -198,6 +198,8 @@ 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.
+#vlans_fxp0="101 vlan0" # vlan(4) interfaces for fxp0 device
+#create_arg_vlan0="vlan 102" # vlan tag for vlan0 device
#wlans_ath0="wlan0" # wlan(4) interfaces for ath0 device
#wlandebug_wlan0="scan+auth+assoc" # Set debug flags with wlanddebug(8)
#ipv4_addrs_fxp0="192.168.0.1/24 192.168.1.1-5/28" # example IPv4 address entry.
diff --git a/etc/network.subr b/etc/network.subr
index 5f02714e44ca..497cc5b75206 100644
--- a/etc/network.subr
+++ b/etc/network.subr
@@ -46,7 +46,7 @@ ifn_start()
ifconfig_up ${ifn} && cfg=0
ipv4_up ${ifn} && cfg=0
ipx_up ${ifn} && cfg=0
- childif_create ${ifn}
+ childif_create ${ifn} && cfg=0
return $cfg
}
@@ -67,7 +67,7 @@ ifn_stop()
ipv4_down ${ifn} && cfg=0
ifconfig_down ${ifn} && cfg=0
ifscript_down ${ifn} && cfg=0
- childif_destroy ${ifn}
+ childif_destroy ${ifn} && cfg=0
return $cfg
}
@@ -530,7 +530,7 @@ clone_down()
#
childif_create()
{
- local cfg child child_wlans create_args debug_flags ifn i
+ local cfg child child_vlans child_wlans create_args debug_flags ifn i
cfg=1
ifn=$1
@@ -559,6 +559,32 @@ childif_create()
fi
done
+ # Create vlan interfaces
+ child_vlans=`get_if_var $ifn vlans_IF`
+
+ if [ -n "${child_vlans}" ]; then
+ load_kld if_vlan
+ fi
+
+ for child in ${child_vlans}; do
+ if expr $child : '[1-9][0-9]*$' >/dev/null 2>&1; then
+ child="${ifn}.${child}"
+ create_args=`get_if_var $child create_args_IF`
+ ifconfig $child create ${create_args} && cfg=0
+ else
+ create_args="vlandev $ifn `get_if_var $child create_args_IF`"
+ if expr $child : 'vlan[0-9][0-9]*$' >/dev/null 2>&1; then
+ ifconfig $child create ${create_args} && cfg=0
+ else
+ i=`ifconfig vlan create ${create_args}`
+ ifconfig $i name $child && cfg=0
+ fi
+ fi
+ if autoif $child; then
+ ifn_start $child
+ fi
+ done
+
return ${cfg}
}
@@ -566,12 +592,34 @@ childif_create()
#
childif_destroy()
{
- local cfg child child_wlans ifn
+ local cfg child child_vlans child_wlans ifn
child_wlans=`get_if_var $ifn wlans_IF`
for child in ${child_wlans}; do
+ if ! ifexists $child; then
+ continue
+ fi
+ if autoif $child; then
+ ifn_stop $child
+ fi
ifconfig $child destroy && cfg=0
done
+
+ child_vlans=`get_if_var $ifn vlans_IF`
+ for child in ${child_vlans}; do
+ if expr $child : '[1-9][0-9]*$' >/dev/null 2>&1; then
+ child="${ifn}.${child}"
+ fi
+ if ! ifexists $child; then
+ continue
+ fi
+ if autoif $child; then
+ ifn_stop $child
+ fi
+ ifconfig $child destroy && cfg=0
+ done
+
+ return ${cfg}
}
# Create netgraph nodes.