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