atm1 revision 165683
1249261Sdim#!/bin/sh
2249261Sdim#
3249261Sdim# Copyright (c) 2000  The FreeBSD Project
4249261Sdim# All rights reserved.
5249261Sdim#
6249261Sdim# Redistribution and use in source and binary forms, with or without
7249261Sdim# modification, are permitted provided that the following conditions
8249261Sdim# are met:
9249261Sdim# 1. Redistributions of source code must retain the above copyright
10249261Sdim#    notice, this list of conditions and the following disclaimer.
11249261Sdim# 2. Redistributions in binary form must reproduce the above copyright
12249261Sdim#    notice, this list of conditions and the following disclaimer in the
13249261Sdim#    documentation and/or other materials provided with the distribution.
14249261Sdim#
15249261Sdim# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16249261Sdim# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17249261Sdim# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18249261Sdim# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19249261Sdim# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20249261Sdim# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21249261Sdim# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22249261Sdim# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23249261Sdim# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24249261Sdim# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25249261Sdim# SUCH DAMAGE.
26249261Sdim#
27249261Sdim# $FreeBSD: head/etc/rc.d/atm1 165683 2006-12-31 10:37:18Z yar $
28249261Sdim#
29249261Sdim
30249261Sdim# PROVIDE: atm1
31249261Sdim# REQUIRE: root
32249261Sdim# BEFORE: netif
33249261Sdim# KEYWORD: nojail
34249261Sdim
35249261Sdim. /etc/rc.subr
36249261Sdim
37249261Sdimname="atm"
38249261Sdimrcvar="atm_enable"
39249261Sdimstart_cmd="atm_start"
40249261Sdimstop_cmd=":"
41249261Sdim
42249261Sdim# ATM networking startup script
43249261Sdim#
44249261Sdim# Initial interface configuration.
45249261Sdim# N.B. /usr is not mounted.
46249261Sdim#
47249261Sdimatm_start()
48249261Sdim{
49249261Sdim	if [ -n "${natm_interfaces}" ] ; then
50249261Sdim		# Load the HARP pseudo interface
51249261Sdim		load_kld if_harp || return 1
52249261Sdim
53249261Sdim		# Load all the NATM drivers that we need
54249261Sdim		for natm in ${natm_interfaces} ; do
55249261Sdim			ifconfig ${natm} up
56249261Sdim		done
57249261Sdim	fi
58249261Sdim
59249261Sdim	# Load loadable HARP drivers
60249261Sdim	for dev in ${atm_load} ; do
61249261Sdim		load_kld ${dev} || return 1
62249261Sdim	done
63249261Sdim
64249261Sdim	# Locate all probed ATM adapters
65249261Sdim	atmdev=`atm sh stat int | while read dev junk; do
66249261Sdim		case ${dev} in
67249261Sdim		hea[0-9] | hea[0-9][0-9])
68249261Sdim			echo "${dev} "
69249261Sdim			;;
70249261Sdim		hfa[0-9] | hfa[0-9][0-9])
71249261Sdim			echo "${dev} "
72249261Sdim			;;
73249261Sdim		idt[0-9] | idt[0-9][0-9])
74249261Sdim			echo "${dev} "
75249261Sdim			;;
76249261Sdim
77249261Sdim		# NATM interfaces per pseudo driver
78249261Sdim		en[0-9] | en[0-9][0-9])
79249261Sdim			echo "${dev} "
80249261Sdim			;;
81249261Sdim		fatm[0-9] | fatm[0-9][0-9])
82249261Sdim			echo "${dev} "
83249261Sdim			;;
84249261Sdim		hatm[0-9] | hatm[0-9][0-9])
85249261Sdim			echo "${dev} "
86249261Sdim			;;
87249261Sdim		patm[0-9] | patm[0-9][0-9])
88249261Sdim			echo "${dev} "
89249261Sdim			;;
90249261Sdim		*)
91249261Sdim			continue
92249261Sdim			;;
93249261Sdim		esac
94249261Sdim	done`
95249261Sdim
96249261Sdim	if [ -z "${atmdev}" ]; then
97249261Sdim		echo 'No ATM adapters found'
98249261Sdim		return 0
99249261Sdim	fi
100249261Sdim
101249261Sdim	# Load microcode into FORE adapters (if needed)
102249261Sdim	if [ `expr "${atmdev}" : '.*hfa.*'` -ne 0 ]; then
103249261Sdim		fore_dnld
104249261Sdim	fi
105249261Sdim
106249261Sdim	# Configure physical interfaces
107249261Sdim	ilmid=0
108249261Sdim	for phy in ${atmdev}; do
109249261Sdim		echo -n "Configuring ATM device ${phy}:"
110249261Sdim
111249261Sdim		# Define network interfaces
112249261Sdim		eval netif_args=\$atm_netif_${phy}
113249261Sdim		if [ -n "${netif_args}" ]; then
114249261Sdim			atm set netif ${phy} ${netif_args} || continue
115249261Sdim		else
116249261Sdim			echo ' missing network interface definition'
117249261Sdim			continue
118249261Sdim		fi
119249261Sdim
120249261Sdim		# Override physical MAC address
121249261Sdim		eval macaddr_args=\$atm_macaddr_${phy}
122249261Sdim		if [ -n "${macaddr_args}" ]; then
123249261Sdim			case ${macaddr_args} in
124249261Sdim			[Nn][Oo] | '')
125249261Sdim				;;
126249261Sdim			*)
127249261Sdim				atm set mac ${phy} ${macaddr_args} || continue
128249261Sdim				;;
129249261Sdim			esac
130249261Sdim		fi
131249261Sdim
132249261Sdim		# Configure signalling manager
133249261Sdim		eval sigmgr_args=\$atm_sigmgr_${phy}
134249261Sdim		if [ -n "${sigmgr_args}" ]; then
135249261Sdim			atm attach ${phy} ${sigmgr_args} || continue
136249261Sdim		else
137249261Sdim			echo ' missing signalling manager definition'
138249261Sdim			continue
139249261Sdim		fi
140249261Sdim
141249261Sdim		# Configure UNI NSAP prefix
142249261Sdim		eval prefix_args=\$atm_prefix_${phy}
143249261Sdim		if [ `expr "${sigmgr_args}" : '[uU][nN][iI].*'` -ne 0 ]; then
144249261Sdim			if [ -z "${prefix_args}" ]; then
145249261Sdim				echo ' missing NSAP prefix for UNI interface'
146249261Sdim				continue
147249261Sdim			fi
148249261Sdim
149249261Sdim			case ${prefix_args} in
150249261Sdim			ILMI)
151249261Sdim				ilmid=1
152249261Sdim				;;
153249261Sdim			*)
154249261Sdim				atm set prefix ${phy} ${prefix_args} || continue
155249261Sdim				;;
156249261Sdim			esac
157249261Sdim		fi
158249261Sdim
159249261Sdim		atm_phy="${atm_phy} ${phy}"
160249261Sdim		echo '.'
161249261Sdim	done
162249261Sdim
163249261Sdim	echo -n 'Starting initial ATM daemons:'
164249261Sdim	# Start ILMI daemon (if needed)
165249261Sdim	case ${ilmid} in
166249261Sdim	1)
167249261Sdim		echo -n ' ilmid'
168249261Sdim		ilmid
169249261Sdim		;;
170249261Sdim	esac
171249261Sdim
172249261Sdim	echo '.'
173249261Sdim}
174249261Sdim
175249261Sdimload_rc_config $name
176249261Sdimrun_rc_command "$1"
177249261Sdim