1#!/bin/sh 2# 3# Copyright (c) 2006 The FreeBSD Project. All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 14# THIS SOFTWARE IS PROVIDED BY THE PROJECT ``AS IS'' AND ANY EXPRESS OR 15# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17# IN NO EVENT SHALL THE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, 18# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24# 25# 26 27# PROVIDE: bridge 28# REQUIRE: netif ppp stf 29# KEYWORD: nojail 30 31. /etc/rc.subr 32. /etc/network.subr 33 34name="bridge" 35desc="Network bridge setup" 36start_cmd="bridge_start" 37stop_cmd="bridge_stop" 38cmd="" 39 40glob_int() { 41 case "$1" in 42 $2 ) true ;; 43 * ) false ;; 44 esac 45} 46 47bridge_test() { 48 bridge=$1 49 iface=$2 50 51 eval interfaces=\$autobridge_${bridge} 52 if [ -n "${interfaces}" ]; then 53 for i in ${interfaces}; do 54 if glob_int $iface $i ; then 55 ifconfig $bridge $cmd $iface > /dev/null 2>&1 56 return 57 fi 58 done 59 fi 60} 61 62autobridge() 63{ 64 if [ -n "${autobridge_interfaces}" ]; then 65 if [ -z "$iflist" ]; then 66 # We're operating as a general network start routine. 67 iflist="`list_net_interfaces`" 68 fi 69 70 for br in ${autobridge_interfaces}; do 71 for i in $iflist; do 72 bridge_test $br $i 73 done 74 done 75 fi 76} 77 78bridge_start() 79{ 80 cmd="addm" 81 autobridge 82} 83 84bridge_stop() 85{ 86 cmd="deletem" 87 autobridge 88} 89 90iflist=$2 91 92load_rc_config $name 93run_rc_command "$1" 94