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# $FreeBSD$ 26# 27 28# PROVIDE: bridge 29# REQUIRE: netif ppp stf 30# KEYWORD: nojail 31 32. /etc/rc.subr 33. /etc/network.subr 34 35name="bridge" 36desc="Network bridge setup" 37start_cmd="bridge_start" 38stop_cmd="bridge_stop" 39cmd="" 40 41glob_int() { 42 case "$1" in 43 $2 ) true ;; 44 * ) false ;; 45 esac 46} 47 48bridge_test() { 49 bridge=$1 50 iface=$2 51 52 eval interfaces=\$autobridge_${bridge} 53 if [ -n "${interfaces}" ]; then 54 for i in ${interfaces}; do 55 if glob_int $iface $i ; then 56 ifconfig $bridge $cmd $iface > /dev/null 2>&1 57 return 58 fi 59 done 60 fi 61} 62 63autobridge() 64{ 65 if [ -n "${autobridge_interfaces}" ]; then 66 if [ -z "$iflist" ]; then 67 # We're operating as a general network start routine. 68 iflist="`list_net_interfaces`" 69 fi 70 71 for br in ${autobridge_interfaces}; do 72 for i in $iflist; do 73 bridge_test $br $i 74 done 75 done 76 fi 77} 78 79bridge_start() 80{ 81 cmd="addm" 82 autobridge 83} 84 85bridge_stop() 86{ 87 cmd="deletem" 88 autobridge 89} 90 91iflist=$2 92 93load_rc_config $name 94run_rc_command "$1" 95