summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/defaults/rc.conf3
-rwxr-xr-xetc/rc.d/Makefile2
-rw-r--r--etc/rc.d/bridge93
-rw-r--r--etc/rc.d/netif3
-rw-r--r--share/man/man5/rc.conf.518
5 files changed, 118 insertions, 1 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf
index 8a5f436..6da8487 100644
--- a/etc/defaults/rc.conf
+++ b/etc/defaults/rc.conf
@@ -159,6 +159,9 @@ ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration.
#ifconfig_fxp0_name="net0" # Change interface name from fxp0 to net0.
#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
+#autobridge_bridge0="tap* vlan0" # Interface glob to automatically add to the bridge
+#
# If you have any sppp(4) interfaces above, you might also want to set
# the following parameters. Refer to spppcontrol(8) for their meaning.
sppp_interfaces="" # List of sppp interfaces.
diff --git a/etc/rc.d/Makefile b/etc/rc.d/Makefile
index 7df38ce..6c314a1 100755
--- a/etc/rc.d/Makefile
+++ b/etc/rc.d/Makefile
@@ -6,7 +6,7 @@
FILES= DAEMON LOGIN NETWORKING SERVERS \
abi accounting addswap adjkerntz amd \
apm apmd archdep atm1 atm2 atm3 auditd \
- bgfsck bluetooth bootparams bsnmpd \
+ bgfsck bluetooth bootparams bridge bsnmpd \
ccd cleanvar cleartmp cron \
devd devfs dhclient \
dmesg dumpon \
diff --git a/etc/rc.d/bridge b/etc/rc.d/bridge
new file mode 100644
index 0000000..e2908db
--- /dev/null
+++ b/etc/rc.d/bridge
@@ -0,0 +1,93 @@
+#!/bin/sh
+#
+# Copyright (c) 2006 The FreeBSD Project. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE PROJECT ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# PROVIDE: bridge
+# REQUIRE: netif
+# KEYWORD: nojail
+
+. /etc/rc.subr
+. /etc/network.subr
+
+name="bridge"
+start_cmd="bridge_start"
+stop_cmd="bridge_stop"
+_cmd=""
+
+glob_int () {
+ case "$1" in
+ $2 ) true ;;
+ * ) false ;;
+ esac
+}
+
+bridge_test () {
+ bridge=$1
+ iface=$2
+
+ eval interfaces=\$autobridge_${bridge}
+ if [ -n "${interfaces}" ]; then
+ for i in ${interfaces}; do
+ if glob_int $iface $i ; then
+ ifconfig $bridge $_cmd $iface > /dev/null 2>&1
+ return
+ fi
+ done
+ fi
+}
+
+autobridge()
+{
+ if [ -n "${autobridge_interfaces}" ]; then
+ if [ -z "$_iflist" ]; then
+ # We're operating as a general network start routine.
+ _iflist="`list_net_interfaces`"
+ fi
+
+ for br in ${autobridge_interfaces}; do
+ for i in $_iflist; do
+ bridge_test $br $i
+ done
+ done
+ fi
+}
+
+bridge_start()
+{
+ _cmd="addm"
+ autobridge
+}
+
+bridge_stop()
+{
+ _cmd="deletem"
+ autobridge
+}
+
+_iflist=$2
+
+load_rc_config $name
+run_rc_command "$1"
diff --git a/etc/rc.d/netif b/etc/rc.d/netif
index 99b5eb8..36b4596 100644
--- a/etc/rc.d/netif
+++ b/etc/rc.d/netif
@@ -71,6 +71,9 @@ network_start()
# Resync ipfilter
/etc/rc.d/ipfilter resync
fi
+ if [ -f /etc/rc.d/bridge -a -n "$_cmdifn" ] ; then
+ /etc/rc.d/bridge start $_cmdifn
+ fi
}
network_stop()
diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5
index de9b3f7..5ea091b 100644
--- a/share/man/man5/rc.conf.5
+++ b/share/man/man5/rc.conf.5
@@ -3573,6 +3573,23 @@ has been mounted.
Both the
.Xr md 4
device and the mount point will be changed.
+.It Va autobridge_interfaces
+.Pq Vt str
+Set to the list of bridge interfaces that will have newly arriving interfaces
+checked against to be automatically added.
+If not set to
+.Dq Li NO
+then for each whitespace separated
+.Ar element
+in the value, a
+.Va autobridge_ Ns Aq Ar element
+variable is assumed to exist which has a whitespace separated list of interface
+names to match, these names can use wildcards.
+For example:
+.Bd -literal
+autobridge_interfaces="bridge0"
+autobridge_bridge0="tap* dc0 vlan[345]"
+.Ed
.El
.Sh FILES
.Bl -tag -width ".Pa /etc/defaults/rc.conf" -compact
@@ -3590,6 +3607,7 @@ device and the mount point will be changed.
.Xr sh 1 ,
.Xr vi 1 ,
.Xr vidcontrol 1 ,
+.Xr bridge 4 ,
.Xr ip 4 ,
.Xr ipf 4 ,
.Xr ipfw 4 ,
OpenPOWER on IntegriCloud