diff options
-rw-r--r-- | etc/defaults/rc.conf | 3 | ||||
-rwxr-xr-x | etc/rc.d/Makefile | 2 | ||||
-rw-r--r-- | etc/rc.d/bridge | 93 | ||||
-rw-r--r-- | etc/rc.d/netif | 3 | ||||
-rw-r--r-- | share/man/man5/rc.conf.5 | 18 |
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 , |