atm2 revision 50472
140006Sphk#!/bin/sh
240006Sphk#
340006Sphk
440006Sphk# ATM networking startup script
540006Sphk#
650472Speter# $FreeBSD: head/etc/rc.d/atm2 50472 1999-08-27 23:37:10Z peter $
740006Sphk
840006Sphk#
940006Sphk# Initial interface configuration.
1040006Sphk# N.B. /usr is not mounted.
1140006Sphk#
1240006Sphkatm_pass1() {
1340056Sphk    # Locate all probed ATM adapters
1440056Sphk    atmdev=`atm sh stat int | while read dev junk; do
1540006Sphk	case ${dev} in
1640006Sphk	hea[0-9]|hea[0-9][0-9])
1740006Sphk		echo "${dev} "
1840006Sphk		;;
1940006Sphk	hfa[0-9]|hfa[0-9][0-9])
2040006Sphk		echo "${dev} "
2140006Sphk		;;
2240006Sphk	*)
2340006Sphk		continue
2440006Sphk		;;
2540006Sphk	esac
2640006Sphk    done`
2740006Sphk
2840006Sphk    if [ -z "${atmdev}" ]; then
2940006Sphk	echo "No ATM adapters found."
3040006Sphk	return 0
3140006Sphk    fi
3240006Sphk
3340006Sphk    # Load microcode into FORE adapters (if needed)
3440006Sphk    if [ `expr "${atmdev}" : '.*hfa.*'` -ne 0 ]; then
3540006Sphk	fore_dnld -d /etc
3640006Sphk    fi
3740006Sphk
3840006Sphk    # Configure physical interfaces
3940006Sphk    ilmid=0
4040006Sphk    for phy in ${atmdev}; do
4140006Sphk	echo -n "Configuring ATM device ${phy}:"
4240006Sphk
4340006Sphk	# Define network interfaces
4440006Sphk	eval netif_args=\$atm_netif_${phy}
4540006Sphk	if [ -n "${netif_args}" ]; then
4640006Sphk		atm set netif ${phy} ${netif_args} || continue
4740006Sphk	else
4840006Sphk		echo "missing network interface definition"
4940006Sphk		continue
5040006Sphk	fi
5140006Sphk
5240006Sphk	# Override physical MAC address
5340006Sphk	eval macaddr_args=\$atm_macaddr_${phy}
5440006Sphk	if [ -n "${macaddr_args}" -a "${macaddr_args}" != "NO" ]; then
5540006Sphk		atm set mac ${phy} ${macaddr_args} || continue
5640006Sphk	fi
5740006Sphk
5840006Sphk	# Configure signalling manager
5940006Sphk	eval sigmgr_args=\$atm_sigmgr_${phy}
6040006Sphk	if [ -n "${sigmgr_args}" ]; then
6140006Sphk		atm attach ${phy} ${sigmgr_args} || continue
6240006Sphk	else
6340006Sphk		echo "missing signalling manager definition"
6440006Sphk		continue
6540006Sphk	fi
6640006Sphk
6740006Sphk	# Configure UNI NSAP prefix
6840006Sphk	eval prefix_args=\$atm_prefix_${phy}
6940006Sphk	if [ `expr "${sigmgr_args}" : '[uU][nN][iI].*'` -ne 0 ]; then
7040006Sphk		if [ -z "${prefix_args}" ]; then
7140006Sphk			echo "missing NSAP prefix for UNI interface"
7240006Sphk			continue
7340006Sphk		fi
7440006Sphk		if [ "${prefix_args}" = "ILMI" ]; then
7540006Sphk			ilmid=1
7640006Sphk		else
7740006Sphk			atm set prefix ${phy} ${prefix_args} || continue
7840006Sphk		fi
7940006Sphk	fi
8040006Sphk
8140006Sphk	atm_phy="${atm_phy} ${phy}"
8240006Sphk	echo "."
8340006Sphk    done
8440006Sphk
8540006Sphk    echo -n "Starting initial ATM daemons:"
8640006Sphk    # Start ILMI daemon (if needed)
8740006Sphk    if [ ${ilmid} -eq 1 ]; then
8840006Sphk	echo -n " ilmid"
8940006Sphk	ilmid
9040006Sphk    fi
9140006Sphk
9240006Sphk    echo "."
9340006Sphk    atm_pass1_done=YES
9440006Sphk}
9540006Sphk
9640006Sphk#
9740006Sphk# Finish up configuration.
9840006Sphk# N.B. /usr is not mounted.
9940006Sphk#
10040006Sphkatm_pass2() {
10140006Sphk    echo -n "Configuring ATM network interfaces:"
10240006Sphk
10340006Sphk    atm_scspd=0
10440006Sphk    atm_atmarpd=""
10540006Sphk
10640006Sphk    # Configure network interfaces
10740006Sphk    for phy in ${atm_phy}; do
10840006Sphk	eval netif_args=\$atm_netif_${phy}
10940006Sphk	set -- ${netif_args}
11040006Sphk	netname=$1
11140006Sphk	netcnt=$2
11240006Sphk	netindx=0
11340006Sphk	while [ ${netindx} -lt ${netcnt} ]; do
11440006Sphk
11540006Sphk		net="${netname}${netindx}"
11640006Sphk		netindx=`expr ${netindx} + 1`
11740006Sphk		echo -n " ${net}"
11840006Sphk
11940006Sphk		# Configure atmarp server
12040006Sphk		eval atmarp_args=\$atm_arpserver_${net}
12140006Sphk		if [ -n "${atmarp_args}" ]; then
12240006Sphk			atm set arpserver ${net} ${atmarp_args} || continue
12340006Sphk		fi
12440006Sphk		eval scsparp_args=\$atm_scsparp_${net}
12550357Ssheldonh		if [ "${scsparp_args}" = "YES" ]; then
12640006Sphk			if [ "${atmarp_args}" != "local" ]; then
12740006Sphk				echo "local arpserver required for SCSP"
12840006Sphk				continue
12940006Sphk			fi
13040006Sphk			atm_atmarpd="${atm_atmarpd} ${net}"
13140006Sphk			atm_scspd=1
13240006Sphk		fi
13340006Sphk	done
13440006Sphk    done
13540006Sphk    echo "."
13640006Sphk
13740006Sphk    # Define any PVCs.
13850357Ssheldonh    if [ -n "${atm_pvcs}" ]; then
13940006Sphk	for i in ${atm_pvcs}; do
14040006Sphk		eval pvc_args=\$atm_pvc_${i}
14140006Sphk		atm add pvc ${pvc_args}
14240006Sphk	done
14340006Sphk    fi
14440006Sphk
14540006Sphk    # Define any permanent ARP entries.
14650357Ssheldonh    if [ -n "${atm_arps}" ]; then
14740006Sphk	for i in ${atm_arps}; do
14840006Sphk		eval arp_args=\$atm_arp_${i}
14940006Sphk		atm add arp ${arp_args}
15040006Sphk	done
15140006Sphk    fi
15240006Sphk    atm_pass2_done=YES
15340006Sphk}
15440006Sphk
15540006Sphk#
15640006Sphk# Start any necessary daemons.
15740006Sphk#
15840006Sphkatm_pass3() {
15940006Sphk    # Start SCSP daemon (if needed)
16050357Ssheldonh    if [ "${atm_scspd}" -eq 1 ]; then
16140006Sphk	echo -n " scspd"
16240006Sphk	scspd
16340006Sphk    fi
16440006Sphk
16540006Sphk    # Start ATMARP daemon (if needed)
16640006Sphk    if [ -n "${atm_atmarpd}" ]; then
16740006Sphk	echo -n " atmarpd"
16840006Sphk	atmarpd ${atm_atmarpd}
16940006Sphk    fi
17040006Sphk
17140006Sphk    atm_pass3_done=YES
17240006Sphk}
173