netif revision 165664
1215976Sjmallett#!/bin/sh 2232812Sjmallett# 3215976Sjmallett# Copyright (c) 2003 The FreeBSD Project. All rights reserved. 4215976Sjmallett# 5215976Sjmallett# Redistribution and use in source and binary forms, with or without 6215976Sjmallett# modification, are permitted provided that the following conditions 7215976Sjmallett# are met: 8215976Sjmallett# 1. Redistributions of source code must retain the above copyright 9215976Sjmallett# notice, this list of conditions and the following disclaimer. 10215976Sjmallett# 2. Redistributions in binary form must reproduce the above copyright 11215976Sjmallett# notice, this list of conditions and the following disclaimer in the 12215976Sjmallett# documentation and/or other materials provided with the distribution. 13215976Sjmallett# 14215976Sjmallett# THIS SOFTWARE IS PROVIDED BY THE PROJECT ``AS IS'' AND ANY EXPRESS OR 15215976Sjmallett# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16215976Sjmallett# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17215976Sjmallett# IN NO EVENT SHALL THE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, 18232812Sjmallett# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19215976Sjmallett# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20215976Sjmallett# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21215976Sjmallett# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22215976Sjmallett# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23215976Sjmallett# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24215976Sjmallett# 25215976Sjmallett# $FreeBSD: head/etc/rc.d/netif 165664 2006-12-30 22:53:20Z yar $ 26215976Sjmallett# 27215976Sjmallett 28215976Sjmallett# PROVIDE: netif 29232812Sjmallett# REQUIRE: atm1 ipfilter mountcritlocal serial sppp sysctl 30215976Sjmallett# KEYWORD: nojail 31215976Sjmallett 32215976Sjmallett. /etc/rc.subr 33215976Sjmallett. /etc/network.subr 34215976Sjmallett 35215976Sjmallettname="network" 36215976Sjmallettstart_cmd="network_start" 37215976Sjmallettstop_cmd="network_stop" 38215976Sjmallettcloneup_cmd="clone_up" 39215976Sjmallettclonedown_cmd="clone_down" 40215976Sjmallettextra_commands="cloneup clonedown" 41215976Sjmallettcmdifn= 42215976Sjmallett 43215976Sjmallettnetwork_start() 44215976Sjmallett{ 45215976Sjmallett # Set the list of interfaces to work on. 46215976Sjmallett # 47215976Sjmallett cmdifn=$* 48215976Sjmallett 49215976Sjmallett if [ -z "$cmdifn" ]; then 50215976Sjmallett # 51215976Sjmallett # We're operating as a general network start routine. 52232812Sjmallett # 53232812Sjmallett 54215976Sjmallett # disable SIGINT (Ctrl-c) when running at startup 55215976Sjmallett trap : 2 56215976Sjmallett 57215976Sjmallett # Create cloned interfaces 58215976Sjmallett clone_up 59215976Sjmallett 60232812Sjmallett # Create IPv6<-->IPv4 tunnels 61215976Sjmallett gif_up 62215976Sjmallett 63215976Sjmallett # Rename interfaces. 64215976Sjmallett ifnet_rename 65215976Sjmallett fi 66215976Sjmallett 67215976Sjmallett # Configure the interface(s). 68232812Sjmallett network_common ifn_start verbose 69232812Sjmallett 70232812Sjmallett if [ -f /etc/rc.d/ipfilter ] ; then 71232812Sjmallett # Resync ipfilter 72232812Sjmallett /etc/rc.d/ipfilter resync 73232812Sjmallett fi 74232812Sjmallett if [ -f /etc/rc.d/bridge -a -n "$cmdifn" ] ; then 75232812Sjmallett /etc/rc.d/bridge start $cmdifn 76232812Sjmallett fi 77232812Sjmallett} 78232812Sjmallett 79232812Sjmallettnetwork_stop() 80232812Sjmallett{ 81232812Sjmallett # Set the list of interfaces to work on. 82232812Sjmallett # 83232812Sjmallett cmdifn=$* 84232812Sjmallett 85232812Sjmallett echo -n "Stopping network:" 86232812Sjmallett 87232812Sjmallett # Deconfigure the interface(s) 88232812Sjmallett network_common ifn_stop 89232812Sjmallett echo '.' 90232812Sjmallett} 91232812Sjmallett 92232812Sjmallett# network_common routine verbose 93232812Sjmallett# Common configuration subroutine for network interfaces. This 94232812Sjmallett# routine takes all the preparatory steps needed for configuriing 95232812Sjmallett# an interface and then calls $routine. If $verbose is specified, 96232812Sjmallett# it will call ifconfig(8) to show, in long format, the configured 97232812Sjmallett# interfaces. If $verbose is not given, it will simply output the 98232812Sjmallett# configured interface(s). 99232812Sjmallettnetwork_common() 100232812Sjmallett{ 101232812Sjmallett local _cooked_list _fail _func _verbose 102232812Sjmallett 103232812Sjmallett _func= 104232812Sjmallett _verbose= 105232812Sjmallett 106232812Sjmallett if [ -z "$1" ]; then 107232812Sjmallett err 1 "network_common(): No function name specified." 108232812Sjmallett else 109232812Sjmallett _func="$1" 110232812Sjmallett fi 111232812Sjmallett [ -n "$2" ] && _verbose=yes 112232812Sjmallett 113232812Sjmallett # Set the scope of the command (all interfaces or just one). 114232812Sjmallett # 115232812Sjmallett _cooked_list= 116232812Sjmallett if [ -n "$cmdifn" ]; then 117232812Sjmallett # Don't check that the interfaces exist. We need to run 118232812Sjmallett # the down code even when the interface doesn't exist to 119232812Sjmallett # kill off wpa_supplicant. 120232812Sjmallett _cooked_list="$cmdifn" 121232812Sjmallett else 122232812Sjmallett _cooked_list="`list_net_interfaces`" 123232812Sjmallett fi 124232812Sjmallett 125232812Sjmallett _fail= 126232812Sjmallett for ifn in ${_cooked_list}; do 127232812Sjmallett if ${_func} ${ifn} ; then 128232812Sjmallett eval showstat_$ifn=1 129232812Sjmallett else 130232812Sjmallett _fail="$_fail $ifn" 131232812Sjmallett fi 132232812Sjmallett done 133232812Sjmallett 134232812Sjmallett # Display interfaces configured by this script 135232812Sjmallett # 136232812Sjmallett for ifn in ${_cooked_list}; do 137232812Sjmallett eval showstat=\$showstat_${ifn} 138232812Sjmallett if [ ! -z ${showstat} ]; then 139232812Sjmallett if [ -n "$_verbose" ]; then 140232812Sjmallett ifconfig ${ifn} 141232812Sjmallett else 142232812Sjmallett echo -n " ${ifn}" 143232812Sjmallett fi 144232812Sjmallett fi 145232812Sjmallett done 146232812Sjmallett debug "The following interfaces were not configured: $_fail" 147232812Sjmallett} 148232812Sjmallett 149232812Sjmallettifn_start() 150232812Sjmallett{ 151232812Sjmallett local ifn cfg 152232812Sjmallett ifn="$1" 153232812Sjmallett cfg=1 154232812Sjmallett 155232812Sjmallett [ -z "$ifn" ] && return 1 156232812Sjmallett 157232812Sjmallett ifscript_up ${ifn} && cfg=0 158232812Sjmallett ifconfig_up ${ifn} && cfg=0 159232812Sjmallett ipv4_up ${ifn} && cfg=0 160232812Sjmallett ipx_up ${ifn} && cfg=0 161232812Sjmallett 162232812Sjmallett return $cfg 163232812Sjmallett} 164232812Sjmallett 165232812Sjmallettifn_stop() 166232812Sjmallett{ 167232812Sjmallett local ifn cfg 168232812Sjmallett ifn="$1" 169232812Sjmallett cfg=1 170232812Sjmallett 171232812Sjmallett [ -z "$ifn" ] && return 1 172232812Sjmallett 173232812Sjmallett ipx_down ${ifn} && cfg=0 174232812Sjmallett ipv4_down ${ifn} && cfg=0 175232812Sjmallett ifconfig_down ${ifn} && cfg=0 176232812Sjmallett ifscript_down ${ifn} && cfg=0 177232812Sjmallett 178232812Sjmallett return $cfg 179232812Sjmallett} 180232812Sjmallett 181232812Sjmallettload_rc_config $name 182232812Sjmallettrun_rc_command $* 183232812Sjmallett