:
# @(#)tcp 4.1 SCO Unix 3.2 TCP/IP/NFS source
# SCCS IDENTIFICATION
#
# System V STREAMS TCP - Release 3.0
#
# Copyright 1987, 1988, 1989 Lachman Associates, Incorporated (LAI)
#
# All Rights Reserved.
#
# The copyright above and this notice must be preserved in all
# copies of this source code. The copyright above does not
# evidence any actual or intended publication of this source
# code.
#
# This is unpublished proprietary trade secret source code of
# Lachman Associates. This source code may not be copied,
# disclosed, distributed, demonstrated or licensed except as
# expressly authorized by Lachman Associates.
#
# System V STREAMS TCP was jointly developed by Lachman
# Associates and Convergent Technologies.
#
#
ND=/etc/conf/node.d
E3A_CNT=0
E3B_CNT=0
E3C_CNT=0
TOK_CNT=0
WDN_CNT=0
NAT_CNT=0
WDT_CNT=0
ETH_CNT=0
DIDDOMAIN=
#
# Prompt with mesg, return non-zero on q. Also allows setting -x and +x,
# shell escapes and the passing of default values
#
# Usage: prompt "message" [default]
# Argument is a quoted message
# Dependencies: expr
# Notes: returns 1 if the user answers q or Q, returns 0 otherwise
# if $quit is not set, it is set to "quit"
# $cmd is set to whatever is input by the user, and then can
# subsequently be used in the shell script.
#
prompt() {
_mesg=$1
_default=$2
while echo "\n${_mesg} [${_default}]: \c" >&2
do read cmd < /dev/tty
case $cmd in
+x|-x) set $cmd ;;
!*) eval `expr "$cmd" : "!\(.*\)"` ;;
"") # If there is an second argument use it
# as the default else loop until 'cmd' is set
[ "$2" ] && {
cmd=$2
return 0
}
: continue
;;
*) unset _mesg
return 0 ;;
esac
done
}
#
# The following three functions create broadcast addresses
# based upon the ip address placed in the variable IP
# the result is placed in BROAD_ADDR
#
BROAD_ADDR=
IP=
getbaddr() {
if [ $drv = "e3A" ] ; then
BADDR_PROMPT="\nInterface $drv$E3A_CNT broadcast address [$BROAD_ADDR]: \c"
elif [ $drv = "e3B" ] ; then
BADDR_PROMPT="\nInterface $drv$E3B_CNT broadcast address [$BROAD_ADDR]: \c"
elif [ $drv = "nat" ] ; then
BADDR_PROMPT="\nInterface $drv$NAT_CNT broadcast address [$BROAD_ADDR]: \c"
elif [ $drv = "wdt" ] ; then
BADDR_PROMPT="\nInterface $drv$WDT_CNT broadcast address [$BROAD_ADDR]: \c"
elif [ $drv = "eth" ] ; then
BADDR_PROMPT="\nInterface $drv$ETH_CNT broadcast address [$BROAD_ADDR]: \c"
elif [ $drv = "e3C" ] ; then
BADDR_PROMPT="\nInterface $drv$E3C_CNT broadcast address [$BROAD_ADDR]: \c"
elif [ $drv = "token" ] ; then
BADDR_PROMPT="\nInterface $drv$TOK_CNT broadcast address [$BROAD_ADDR]: \c"
elif [ $drv = "wdn" ] ; then
BADDR_PROMPT="\nInterface $drv[$WDN_CNT] broadcast address [$BROAD_ADDR]: \c"
else
BADDR_PROMPT="\nInterface $drv broadcast address [$BROAD_ADDR]: \c"
fi
while echo $BADDR_PROMPT
do read broad_addr < /dev/tty
case "$broad_addr" in
[0-9]*) BROAD_ADDR=$broad_addr
break
;;
"") BADDR=$BROAD_ADDR
break
;;
*) echo "Address must have n.n.n.n form, i.e., $BROAD_ADDR"
;;
esac
done
}
baddr0() {
firstbyte=`/bin/echo $IP | sed -e 's/\..*$//'`
if expr $firstbyte \< 128 > /dev/null ; then
BROAD_ADDR=`/bin/echo $IP | sed -e 's/\(.*\)\..*\..*\..*$/\1.0.0.0/'`
elif expr $firstbyte \< 192 > /dev/null ; then
BROAD_ADDR=`/bin/echo $IP | sed -e 's/\(.*\..*\)\..*\..*$/\1.0.0/'`
else
BROAD_ADDR=`/bin/echo $IP | sed -e 's/\(.*\..*\..*\)\..*$/\1.0/'`
fi
getbaddr
}
baddr255() {
firstbyte=`/bin/echo $IP | sed -e 's/\..*$//'`
if expr $firstbyte \< 128 > /dev/null ; then
BROAD_ADDR=`/bin/echo $IP | sed -e 's/\(.*\)\..*\..*\..*$/\1.255.255.255/'`
elif expr $firstbyte \< 192 > /dev/null ; then
BROAD_ADDR=`/bin/echo $IP | sed -e 's/\(.*\..*\)\..*\..*$/\1.255.255/'`
else
BROAD_ADDR=`/bin/echo $IP | sed -e 's/\(.*\..*\..*\)\..*$/\1.255/'`
fi
getbaddr
}
# Prompt for yes or no answer - returns non-zero for no
getyn() {
while read yn < /dev/tty
do case $yn in
[yY]*) return 0 ;;
[nN]*) return 1 ;;
*) p "enter either y or n" ;;
esac
done
}
#
# get netmask for interface
#
getnetmask() {
if [ $drv = "slip" ] ; then
IP=$IP_SRC
fi
firstbyte=`/bin/echo $IP | sed -e 's/\..*$//'`
if expr $firstbyte \< 128 > /dev/null ; then
DEF_MASK=255.0.0.0
elif expr $firstbyte \< 192 > /dev/null ; then
DEF_MASK=255.255.0.0
else
DEF_MASK=255.255.255.0
fi
if [ $drv = "e3A" ] ; then
NM_PROMPT="\nInterface $drv$E3A_CNT netmask [$DEF_MASK]: \c"
elif [ $drv = "e3B" ] ; then
NM_PROMPT="\nInterface $drv$E3B_CNT netmask [$DEF_MASK]: \c"
elif [ $drv = "nat" ] ; then
NM_PROMPT="\nInterface $drv$NAT_CNT netmask [$DEF_MASK]: \c"
elif [ $drv = "wdt" ] ; then
NM_PROMPT="\nInterface $drv$WDT_CNT netmask [$DEF_MASK]: \c"
elif [ $drv = "eth" ] ; then
NM_PROMPT="\nInterface $drv$ETH_CNT netmask [$DEF_MASK]: \c"
elif [ $drv = "e3C" ] ; then
NM_PROMPT="\nInterface $drv$E3C_CNT netmask [$DEF_MASK]: \c"
elif [ $drv = "token" ] ; then
NM_PROMPT="\nInterface $drv$TOK_CNT netmask [$DEF_MASK]: \c"
elif [ $drv = "wdn" ] ; then
NM_PROMPT="\nInterface $drv[$WDN_CNT] netmask [$DEF_MASK]: \c"
elif [ $drv = "slip" ] ; then
NM_PROMPT="\nSLIP Interface on $SLIP_TTY netmask [$DEF_MASK]: \c"
else
NM_PROMPT="\nInterface $drv address [$DEF_MASK]: \c"
fi
cmd=
while [ -z "$cmd" -o "$cmd" = "quit" ] ; do
prompt "$NM_PROMPT" "$DEF_MASK"
NETMASK="netmask $cmd"
# if [ "$cmd" = "$DEF_MASK" ] ; then
# NETMASK=""
# else
# fi
done
}
#
# get a valid slip interface
#
SLIP_TTY=
IP_SRC=
IP_DST=
BAUD=
getslipif() {
echo ""
while echo "Tty line: \c"
do read SLIP_TTY < /dev/tty
case "$SLIP_TTY" in
t*) break
;;
*) echo 'Try ttyXX (where XX is a number)'
;;
esac
done
while echo "Interface source (you) IP address: \c"
do read ip < /dev/tty
case "$ip" in
[0-9]*) IP_SRC=$ip
break
;;
*) echo "Address must have n.n.n.n form, i.e., 132.147.160.1"
;;
esac
done
while echo "Interface destination (them) IP address: \c"
do read ip < /dev/tty
case "$ip" in
[0-9]*) IP_DST=$ip
break
;;
*) echo "Address must have n.n.n.n form, i.e., 132.147.160.1"
;;
esac
done
echo "Baud rate (default 9600): \c"
read BAUD < /dev/tty
getnetmask
}
#
# get ip address
#
DEF_IP_ADDR="132.147.160.1"
IP=
getipaddr() {
if [ $drv = "e3A" ] ; then
IP_PROMPT="\nInterface $drv$E3A_CNT IP address [$DEF_IP_ADDR]: \c"
elif [ $drv = "e3B" ] ; then
IP_PROMPT="\nInterface $drv$E3B_CNT IP address [$DEF_IP_ADDR]: \c"
elif [ $drv = "nat" ] ; then
IP_PROMPT="\nInterface $drv$NAT_CNT IP address [$DEF_IP_ADDR]: \c"
elif [ $drv = "wdt" ] ; then
IP_PROMPT="\nInterface $drv$WDT_CNT IP address [$DEF_IP_ADDR]: \c"
elif [ $drv = "eth" ] ; then
IP_PROMPT="\nInterface $drv$ETH_CNT IP address [$DEF_IP_ADDR]: \c"
elif [ $drv = "e3C" ] ; then
IP_PROMPT="\nInterface $drv$E3C_CNT IP address [$DEF_IP_ADDR]: \c"
elif [ $drv = "token" ] ; then
IP_PROMPT="\nInterface $drv$TOK_CNT IP address [$DEF_IP_ADDR]: \c"
elif [ $drv = "wdn" ] ; then
IP_PROMPT="\nInterface $drv[$WDN_CNT] IP address [$DEF_IP_ADDR]: \c"
else
IP_PROMPT="\nInterface $drv IP address [$DEF_IP_ADDR]: \c"
fi
while echo $IP_PROMPT
do read ip < /dev/tty
case "$ip" in
[0-9]*) IP=$ip
break
;;
"") IP=$DEF_IP_ADDR
break
;;
*) p "Address must have n.n.n.n form, i.e., 192.9.200.9"
;;
esac
done
# Make sure this IP address is in /etc/hosts as us
grep $IP /etc/hosts 2> /dev/null || {
if [ ! -f /etc/hosts ] ; then
/bin/echo "127.0.0.1\tlocalhost loopback lb" > /etc/hosts
chmod 644 /etc/hosts
chown bin /etc/hosts
chgrp bin /etc/hosts
fi
if [ -z "$HOSTNAME" ] ; then
set -- `cat /etc/systemid`
HOSTNAME=${1:-$2}
fi
FULLNAME=$HOSTNAME.$DOMAIN
/bin/echo "$IP\t$HOSTNAME $FULLNAME" >> /etc/hosts
}
}
#
# get broadcast address
#
BROADCAST="broadcast"
getbroadaddr() {
echo "Does interface $drv use a broadcast address of all 0's? [y/n]: \c"
if getyn ; then
baddr0
else
baddr255
fi
BROADCAST="broadcast $BROAD_ADDR"
}
#
# get domain name for local host
#
getdomname() {
cmd=
while [ -z "$cmd" -o "$cmd" = "quit" ] ; do
prompt "Enter DOMAIN name for $drv" "sco.COM"
DOMAIN=$cmd
done
DIDDOMAIN="_DONE_"
}
# main
# DRVLIST=" e3A e3B e3C ni5210 pc586 wd8003 slip "
DRVLIST=" e3A nat wdt eth e3B e3C wdn slip token "
while true ; do
while true ; do
if [ $# = 0 ]; then
tput clear
echo "\t\t\tTCP/IP Ethernet Driver Configuration"
echo "\nWhich driver(s) will TCP/IP be using? "
echo "\nPlease choose one of the following:"
for i in $DRVLIST; do
echo "\t$i"
done
echo "\nEnter the name of the driver TCP/IP will use or enter q to quit: \c"
read drv < /dev/tty
if [ "$drv" = quit -o "$drv" = q ] ; then
rm -f /etc/rc2.d/S85tcp /etc/rc0.d/K85tcp
ln /etc/tcp /etc/rc2.d/S85tcp
ln /etc/tcp /etc/rc0.d/K85tcp
echo "TCP/IP Driver Configuration Completed."
exit 1
fi
else
if [ $# -eq 0 ] ; then
rm -f /etc/rc2.d/S85tcp /etc/rc0.d/K85tcp
ln /etc/tcp /etc/rc2.d/S85tcp
ln /etc/tcp /etc/rc0.d/K85tcp
echo "TCP/IP Driver Configuration Completed."
exit 1
fi
drv=$1
shift
fi
if expr "$DRVLIST" : ".* $drv " > /dev/null ; then
break
fi
echo "'$drv' is not a valid driver selection. Please enter a valid"
echo "ethernet driver, or 'quit' to end."
echo "Strike ENTER when ready.\c"
read toast < /dev/tty
done
#
if [ -z "${DIDDOMAIN}" ] ; then
getdomname
fi
if [ $drv = "slip" ] ; then
getslipif
else
getipaddr
getbroadaddr
getnetmask
fi
#
# Do configuration
#
echo "Configuring TCP/IP for $drv. Please Wait."
#
# Determine node file
#
case $drv in
pc586)
IFCONFIG=" ifconfig en0 $IP -trailers $NETMASK $BROADCAST"
NODE=$ND/pc586
;;
wdn)
IFCONFIG=" ifconfig wdn$WDN_CNT $IP -trailers $NETMASK $BROADCAST"
NODE=$ND/wdn$WDN_CNT
;;
ni5210)
IFCONFIG=" ifconfig en0 $IP -trailers $NETMASK $BROADCAST"
NODE=$ND/ni
;;
e3A)
IFCONFIG=" ifconfig e3A$E3A_CNT $IP onepacket 512 3 -trailers $NETMASK $BROADCAST"
NODE=$ND/e3A$E3A_CNT
;;
e3B)
IFCONFIG=" ifconfig e3B$E3B_CNT $IP -trailers $NETMASK $BROADCAST"
NODE=$ND/e3B$E3B_CNT
;;
nat)
IFCONFIG=" ifconfig nat$NAT_CNT $IP -trailers $NETMASK $BROADCAST"
NODE=$ND/nat$NAT_CNT
;;
wdt)
IFCONFIG=" ifconfig wdt$WDT_CNT $IP -trailers $NETMASK $BROADCAST"
NODE=$ND/wdt$WDT_CNT
;;
eth)
IFCONFIG=" ifconfig eth$ETH_CNT $IP -trailers $NETMASK $BROADCAST"
NODE=$ND/eth$ETH_CNT
;;
e3C)
IFCONFIG=" ifconfig e3C$E3C_CNT $IP -trailers $NETMASK $BROADCAST"
NODE=$ND/e3C$E3C_CNT
;;
slip) if [ -n "$NETMASK" ] ; then
IFCONFIG=" NETMASK=\"$NETMASK\" /etc/slattach $SLIP_TTY $IP_SRC $IP_DST $BAUD"
else
IFCONFIG=" /etc/slattach $SLIP_TTY $IP_SRC $IP_DST $BAUD"
fi
NODE=$ND/slip
;;
token)
IFCONFIG=" ifconfig tok$TOK_CNT $IP -trailers $NETMASK $BROADCAST"
NODE=/$ND/tok$TOK_CNT
;;
*)
echo "Unknown Driver. Configuration Aborted"
exit 1
;;
esac
#
# Determine whether nodes are cloning or not
#
if [ ! -f $NODE ]; then
if [ $drv = "e3A" ] ; then
echo "$drv$E3A_CNT is not installed on this system."
elif [ $drv = "e3B" ] ; then
echo "$drv$E3B_CNT is not installed on this system."
elif [ $drv = "nat" ] ; then
echo "$drv$NAT_CNT is not installed on this system."
elif [ $drv = "wdt" ] ; then
echo "$drv$WDT_CNT is not installed on this system."
elif [ $drv = "eth" ] ; then
echo "$drv$ETH_CNT is not installed on this system."
elif [ $drv = "e3C" ] ; then
echo "$drv$E3C_CNT is not installed on this system."
elif [ $drv = "token" ] ; then
echo "$drv$TOK_CNT is not installed on this system."
elif [ $drv = "wdn" ] ; then
echo "$drv[$WDN_CNT] is not installed on this system."
else
echo "$drv is not installed on this system."
fi
echo "Please install the driver and re-run $0"
exit 1
fi
exec < $NODE
read major node type minor
if [ $major = clone ]; then
case $drv in
e3A)
OUTPUT=" cenetb ip /dev/$node e3A$E3A_CNT"
E3A_CNT=`expr $E3A_CNT + 1`
;;
e3B)
OUTPUT=" cenetb ip /dev/$node e3B$E3B_CNT"
E3B_CNT=`expr $E3B_CNT + 1`
;;
nat)
OUTPUT=" cenetb ip /dev/$node nat$NAT_CNT"
NAT_CNT=`expr $NAT_CNT + 1`
;;
wdt)
OUTPUT=" cenetb ip /dev/$node wdt$WDT_CNT"
WDT_CNT=`expr $WDT_CNT + 1`
;;
eth)
OUTPUT=" cenetb ip /dev/$node eth$ETH_CNT"
ETH_CNT=`expr $ETH_CNT + 1`
;;
e3C)
OUTPUT=" cenetb ip /dev/$node e3C$E3C_CNT"
E3C_CNT=`expr $E3C_CNT + 1`
;;
wdn)
OUTPUT=" cenetb ip /dev/$node wdn$WDN_CNT"
WDN_CNT=`expr $WDN_CNT + 1`
;;
slip)
OUTPUT=
;;
token)
OUTPUT=" cenetb ip /dev/$node tok$TOK_CNT"
TOK_CNT=`expr $TOK_CNT + 1`
;;
*)
OUTPUT=" cenetb ip /dev/$node en0"
;;
esac
else
read major2 node2 type2 minor2
case $drv in
e3A)
OUTPUT=" senet ip /dev/$node /dev/$node2 e3A$E3A_CNT"
E3A_CNT=`expr $E3A_CNT + 1`
;;
e3B)
OUTPUT=" senet ip /dev/$node /dev/$node2 e3B$E3B_CNT"
E3B_CNT=`expr $E3B_CNT + 1`
;;
nat)
OUTPUT=" senet ip /dev/$node /dev/$node2 nat$NAT_CNT"
NAT_CNT=`expr $NAT_CNT + 1`
;;
wdt)
OUTPUT=" senet ip /dev/$node /dev/$node2 wdt$WDT_CNT"
WDT_CNT=`expr $WDT_CNT + 1`
;;
eth)
OUTPUT=" senet ip /dev/$node /dev/$node2 eth$ETH_CNT"
ETH_CNT=`expr $ETH_CNT + 1`
;;
e3C)
OUTPUT=" senet ip /dev/$node /dev/$node2 e3C$E3C_CNT"
E3C_CNT=`expr $E3C_CNT + 1`
;;
wdn)
OUTPUT=" senet ip /dev/$node /dev/$node2 wdn$WDN_CNT"
WDN_CNT=`expr $WDN_CNT + 1`
;;
slip)
OUTPUT=
;;
token)
OUTPUT=" senet ip /dev/$node /dev/$node2 tok$TOK_CNT"
TOK_CNT=`expr $TOK_CNT + 1`
;;
*)
OUTPUT=" senet ip /dev/$node /dev/$node2 en0"
;;
esac
fi
#
# Modify strcf
#
if [ -n "$OUTPUT" ] ; then
ed -s /etc/strcf << TOAST > /dev/null
/ loopback/
i
$OUTPUT
.
w
q
TOAST
fi
#
# Modify /etc/tcp
#
if [ -n "$IFCONFIG" ] ; then
ed -s /etc/tcp << TOAST > /dev/null
/ifconfig/
a
$IFCONFIG
.
w
q
TOAST
fi
#
# Modify /etc/default/tcp
#
ed -s /etc/default/tcp << TOAST > /dev/null
/^DOMAIN/
d
a
DOMAIN=$DOMAIN
.
w
q
TOAST
done # end while true do
echo "TCP/IP Configuration Complete."
exit 0