netif revision 128714
1314076Sadrian#!/bin/sh 2314076Sadrian# 3314076Sadrian# Copyright (c) 2003 The FreeBSD Project. All rights reserved. 4314076Sadrian# 5314076Sadrian# Redistribution and use in source and binary forms, with or without 6314076Sadrian# modification, are permitted provided that the following conditions 7314076Sadrian# are met: 8314076Sadrian# 1. Redistributions of source code must retain the above copyright 9314076Sadrian# notice, this list of conditions and the following disclaimer. 10314076Sadrian# 2. Redistributions in binary form must reproduce the above copyright 11314076Sadrian# notice, this list of conditions and the following disclaimer in the 12314076Sadrian# documentation and/or other materials provided with the distribution. 13314076Sadrian# 14314076Sadrian# THIS SOFTWARE IS PROVIDED BY THE PROJECT ``AS IS'' AND ANY EXPRESS OR 15314076Sadrian# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16314076Sadrian# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17314076Sadrian# IN NO EVENT SHALL THE PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, 18314076Sadrian# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19314076Sadrian# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20314076Sadrian# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21314076Sadrian# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22314076Sadrian# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23314076Sadrian# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24314076Sadrian# 25314076Sadrian# $FreeBSD: head/etc/rc.d/netif 128714 2004-04-28 13:20:15Z phk $ 26314076Sadrian# 27314076Sadrian 28314076Sadrian# PROVIDE: netif 29314076Sadrian# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl 30314076Sadrian# KEYWORD: FreeBSD nojail 31314076Sadrian 32314076Sadrian. /etc/rc.subr 33314076Sadrian. /etc/network.subr 34314076Sadrian 35314076Sadrianname="network" 36314076Sadrianstart_cmd="network_start" 37314076Sadrianstop_cmd="network_stop" 38314076Sadriancloneup_cmd="clone_up" 39314076Sadrianclonedown_cmd="clone_down" 40314076Sadrianextra_commands="cloneup clonedown" 41314076Sadrian_cmdifn= 42314076Sadrian 43314076Sadriannetwork_start() 44314076Sadrian{ 45314076Sadrian if [ -z "$_cmdifn" ]; then 46314076Sadrian # 47314076Sadrian # We're operating as a general network start routine. 48314076Sadrian # 49314076Sadrian 50314076Sadrian # Create cloned interfaces 51314076Sadrian clone_up 52314076Sadrian 53314076Sadrian # Create IPv6<-->IPv4 tunnels 54314076Sadrian gif_up 55314076Sadrian fi 56314076Sadrian 57314076Sadrian # Configure the interface(s). 58314076Sadrian network_common ifn_start verbose 59314076Sadrian 60314076Sadrian if [ -f /etc/rc.d/ipfilter ] ; then 61314076Sadrian # Resync ipfilter 62314076Sadrian /etc/rc.d/ipfilter resync 63314076Sadrian fi 64314076Sadrian} 65314076Sadrian 66314076Sadriannetwork_stop() 67314076Sadrian{ 68314076Sadrian echo -n "Stopping network:" 69314076Sadrian 70314076Sadrian # Deconfigure the interface(s) 71314076Sadrian network_common ifn_stop 72314076Sadrian echo '.' 73314076Sadrian} 74330455Seadler 75330455Seadler# network_common routine verbose 76330455Seadler# Common configuration subroutine for network interfaces. This 77314076Sadrian# routine takes all the preparatory steps needed for configuriing 78314076Sadrian# an interface and then calls $routine. If $verbose is specified, 79314076Sadrian# it will call ifconfig(8) to show, in long format, the configured 80314076Sadrian# interfaces. If $verbose is not given, it will simply output the 81314076Sadrian# configured interface(s). 82330227Seadlernetwork_common() 83314076Sadrian{ 84314076Sadrian _func= 85314076Sadrian _verbose= 86314076Sadrian 87314076Sadrian if [ -z "$1" ]; then 88314076Sadrian err "network_common(): No function name specified." 89314076Sadrian else 90314076Sadrian _func="$1" 91314076Sadrian fi 92314076Sadrian [ -n "$2" ] && _verbose=yes 93314076Sadrian 94314076Sadrian # Get a list of network interfaces. Do not include dhcp interfaces. 95314076Sadrian _ifn_list="`list_net_interfaces nodhcp`" 96314076Sadrian 97330227Seadler # Set the scope of the command (all interfaces or just one). 98330227Seadler # 99330227Seadler _cooked_list="$_ifn_list" 100330227Seadler if [ -n "$_cmdifn" ]; then 101330227Seadler eval _cooked_list=\"`expr "$_ifn_list" : ".*\($_cmdifn\).*"`\" 102330227Seadler if [ -z "$_cooked_list" ]; then 103330227Seadler err "No such network interface: $_cmdifn" 104 return 1 105 fi 106 fi 107 108 for ifn in ${_cooked_list}; do 109 if ${_func} ${ifn} ; then 110 eval showstat_$ifn=1 111 else 112 _fail="$_fail $ifn" 113 fi 114 done 115 116 # Display interfaces configured by this script 117 # 118 for ifn in ${_cooked_list}; do 119 eval showstat=\$showstat_${ifn} 120 if [ ! -z ${showstat} ]; then 121 if [ -n "$_verbose" ]; then 122 ifconfig ${ifn} 123 else 124 echo -n " ${ifn}" 125 fi 126 fi 127 done 128 debug "The following interfaces were not configured: $_fail" 129} 130 131ifn_start() 132{ 133 local ifn cfg 134 ifn="$1" 135 cfg=1 136 137 [ -z "$ifn" ] && return 1 138 139 ifscript_up ${ifn} && cfg=0 140 ifconfig_up ${ifn} && cfg=0 141 ifalias_up ${ifn} && cfg=0 142 ipx_up ${ifn} && cfg=0 143 144 return $cfg 145} 146 147ifn_stop() 148{ 149 local ifn cfg 150 ifn="$1" 151 cfg=1 152 153 [ -z "$ifn" ] && return 1 154 155 ipx_down ${ifn} && cfg=0 156 ifalias_down ${ifn} && cfg=0 157 ifconfig_down ${ifn} && cfg=0 158 ifscript_down ${ifn} && cfg=0 159 160 return $cfg 161} 162 163if [ -n "$2" ]; then 164 _cmdifn="$2" 165fi 166 167load_rc_config $name 168run_rc_command "$1" 169