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