atm2 revision 66830
1284990Scy#!/bin/sh
2284990Scy#
3284990Scy# Copyright (c) 2000  The FreeBSD Project
4284990Scy# All rights reserved.
5284990Scy#
6284990Scy# Redistribution and use in source and binary forms, with or without
7284990Scy# modification, are permitted provided that the following conditions
8284990Scy# are met:
9284990Scy# 1. Redistributions of source code must retain the above copyright
10284990Scy#    notice, this list of conditions and the following disclaimer.
11284990Scy# 2. Redistributions in binary form must reproduce the above copyright
12284990Scy#    notice, this list of conditions and the following disclaimer in the
13284990Scy#    documentation and/or other materials provided with the distribution.
14284990Scy#
15284990Scy# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16284990Scy# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17284990Scy# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18284990Scy# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19284990Scy# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20284990Scy# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21284990Scy# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22284990Scy# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23284990Scy# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24284990Scy# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25284990Scy# SUCH DAMAGE.
26284990Scy#
27284990Scy# $FreeBSD: head/etc/rc.d/atm2 66830 2000-10-08 19:20:36Z obrien $
28284990Scy#
29284990Scy
30284990Scy#
31284990Scy# ATM networking startup script
32284990Scy#
33284990Scy# Initial interface configuration.
34284990Scy# N.B. /usr is not mounted.
35284990Scy#
36284990Scyatm_pass1() {
37284990Scy	# Locate all probed ATM adapters
38284990Scy	atmdev=`atm sh stat int | while read dev junk; do
39284990Scy		case ${dev} in
40284990Scy		hea[0-9] | hea[0-9][0-9])
41284990Scy			echo "${dev} "
42284990Scy			;;
43284990Scy		hfa[0-9] | hfa[0-9][0-9])
44284990Scy			echo "${dev} "
45284990Scy			;;
46284990Scy		*)
47284990Scy			continue
48284990Scy			;;
49284990Scy		esac
50284990Scy	done`
51284990Scy
52284990Scy	if [ -z "${atmdev}" ]; then
53284990Scy		echo "No ATM adapters found."
54284990Scy		return 0
55284990Scy	fi
56284990Scy
57284990Scy	# Load microcode into FORE adapters (if needed)
58284990Scy	if [ `expr "${atmdev}" : '.*hfa.*'` -ne 0 ]; then
59284990Scy		fore_dnld
60284990Scy	fi
61284990Scy
62284990Scy	# Configure physical interfaces
63284990Scy	ilmid=0
64284990Scy	for phy in ${atmdev}; do
65284990Scy		echo -n "Configuring ATM device ${phy}:"
66284990Scy
67284990Scy		# Define network interfaces
68284990Scy		eval netif_args=\$atm_netif_${phy}
69284990Scy		if [ -n "${netif_args}" ]; then
70284990Scy			atm set netif ${phy} ${netif_args} || continue
71284990Scy		else
72284990Scy			echo "missing network interface definition"
73284990Scy			continue
74284990Scy		fi
75284990Scy
76284990Scy		# Override physical MAC address
77284990Scy		eval macaddr_args=\$atm_macaddr_${phy}
78284990Scy		if [ -n "${macaddr_args}" ]; then
79284990Scy			case ${macaddr_args} in
80284990Scy			[Nn][Oo] | '')
81284990Scy				;;
82284990Scy			*)
83284990Scy				atm set mac ${phy} ${macaddr_args} || continue
84284990Scy				;;
85284990Scy			esac
86284990Scy		fi
87284990Scy
88284990Scy		# Configure signalling manager
89284990Scy		eval sigmgr_args=\$atm_sigmgr_${phy}
90284990Scy		if [ -n "${sigmgr_args}" ]; then
91284990Scy			atm attach ${phy} ${sigmgr_args} || continue
92284990Scy		else
93284990Scy			echo "missing signalling manager definition"
94284990Scy			continue
95284990Scy		fi
96284990Scy
97284990Scy		# Configure UNI NSAP prefix
98284990Scy		eval prefix_args=\$atm_prefix_${phy}
99284990Scy		if [ `expr "${sigmgr_args}" : '[uU][nN][iI].*'` -ne 0 ]; then
100284990Scy			if [ -z "${prefix_args}" ]; then
101284990Scy				echo "missing NSAP prefix for UNI interface"
102284990Scy				continue
103284990Scy			fi
104284990Scy
105284990Scy			case ${prefix_args} in
106284990Scy			ILMI)
107284990Scy				ilmid=1
108284990Scy				;;
109284990Scy			*)
110284990Scy				atm set prefix ${phy} ${prefix_args} || continue
111284990Scy				;;
112284990Scy			esac
113284990Scy		fi
114284990Scy
115284990Scy		atm_phy="${atm_phy} ${phy}"
116284990Scy		echo "."
117284990Scy	done
118284990Scy
119284990Scy	echo -n "Starting initial ATM daemons:"
120284990Scy	# Start ILMI daemon (if needed)
121284990Scy	case ${ilmid} in
122284990Scy	1)
123284990Scy		echo -n " ilmid"
124284990Scy		ilmid
125284990Scy		;;
126284990Scy	esac
127284990Scy
128284990Scy	echo "."
129284990Scy	atm_pass1_done=YES
130284990Scy}
131284990Scy
132284990Scy#
133284990Scy# Finish up configuration.
134284990Scy# N.B. /usr is not mounted.
135284990Scy#
136284990Scyatm_pass2() {
137284990Scy	echo -n "Configuring ATM network interfaces:"
138284990Scy
139284990Scy	atm_scspd=0
140284990Scy	atm_atmarpd=""
141284990Scy
142284990Scy	# Configure network interfaces
143284990Scy	for phy in ${atm_phy}; do
144284990Scy		eval netif_args=\$atm_netif_${phy}
145284990Scy		set -- ${netif_args}
146284990Scy		netname=$1
147284990Scy		netcnt=$2
148284990Scy		netindx=0
149284990Scy		while [ ${netindx} -lt ${netcnt} ]; do
150284990Scy			net="${netname}${netindx}"
151284990Scy			netindx=`expr ${netindx} + 1`
152284990Scy			echo -n " ${net}"
153284990Scy
154284990Scy			# Configure atmarp server
155284990Scy			eval atmarp_args=\$atm_arpserver_${net}
156284990Scy			if [ -n "${atmarp_args}" ]; then
157284990Scy				atm set arpserver ${net} ${atmarp_args} ||
158284990Scy					continue
159284990Scy			fi
160284990Scy			eval scsparp_args=\$atm_scsparp_${net}
161284990Scy
162284990Scy			case ${scsparp_args} in
163284990Scy			[Yy][Ee][Ss])
164284990Scy				case ${atmarp_args} in
165284990Scy				local)
166284990Scy					;;
167284990Scy				*)
168284990Scy					echo "local arpserver required for SCSP"
169284990Scy					continue
170284990Scy					;;
171284990Scy				esac
172284990Scy
173284990Scy				atm_atmarpd="${atm_atmarpd} ${net}"
174284990Scy				atm_scspd=1
175284990Scy			esac
176284990Scy		done
177284990Scy	done
178284990Scy	echo "."
179284990Scy
180284990Scy	# Define any PVCs.
181284990Scy	if [ -n "${atm_pvcs}" ]; then
182284990Scy		for i in ${atm_pvcs}; do
183284990Scy			eval pvc_args=\$atm_pvc_${i}
184284990Scy			atm add pvc ${pvc_args}
185284990Scy		done
186284990Scy	fi
187284990Scy
188284990Scy	# Define any permanent ARP entries.
189284990Scy	if [ -n "${atm_arps}" ]; then
190284990Scy		for i in ${atm_arps}; do
191284990Scy			eval arp_args=\$atm_arp_${i}
192284990Scy			atm add arp ${arp_args}
193284990Scy		done
194284990Scy	fi
195284990Scy	atm_pass2_done=YES
196284990Scy}
197284990Scy
198284990Scy#
199284990Scy# Start any necessary daemons.
200284990Scy#
201284990Scyatm_pass3() {
202284990Scy	# Start SCSP daemon (if needed)
203284990Scy	case ${atm_scspd} in
204284990Scy	1)
205284990Scy		echo -n " scspd"
206284990Scy		scspd
207284990Scy		;;
208284990Scy	esac
209284990Scy
210284990Scy	# Start ATMARP daemon (if needed)
211284990Scy	if [ -n "${atm_atmarpd}" ]; then
212284990Scy		echo -n " atmarpd"
213284990Scy		atmarpd ${atm_atmarpd}
214284990Scy	fi
215284990Scy
216284990Scy	atm_pass3_done=YES
217284990Scy}
218284990Scy