1
0
Files
irix-657m-src/irix/cmd/smt/test/allocmac
2022-09-29 17:59:04 +03:00

112 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
# "$Revision: 1.9 $"
# allocate an FDDI MAC address
USAGE="$0: [-v] [-d database] [-t board-type] [-o oldmac] user serialnum"
LCKDIR=/tmp
DBFILE=$HOME/fddimacs
TYP=ipg
#preserve error messages
exec 2>&1
while getopts "vd:t:o:" c; do
case $c in
v) if test -n "$verbose"; then
verbose="$verbose"v
else
verbose=-v
fi
if test x"$verbose" = "x-vv"; then
set -x
fi
;;
d) DBFILE="$OPTARG";;
t) TYP="$OPTARG";;
o) OLDMAC="$OPTARG";;
\?) echo $USAGE; exit 1;;
esac
done
shift `expr $OPTIND - 1`
if test "$#" != 2; then
echo $USAGE
exit 1
fi
WHO="$1"
SNUM=`expr "$2" : '0*\(.*.\)'`
WHERE=`expr $REMOTEHOST : '\(.*\).sgi.com'`
DB=`basename $DBFILE`
PADTYP=`expr "$TYP " : '\(....\).*'`
if test ! -w $DBFILE; then
echo "FAILED $DBFILE is not writable."
exit 1
fi
LCKFILE="$LCKDIR/$DB"
MYLCKFILE="$LCKFILE.$$"
echo $$ > $MYLCKFILE
trap "/bin/rm -f $MYLCKFILE; exit 1" 0 1 2 15
limit=1
while true; do
if test "$limit" -gt 5; then
echo "FAILED to lock to the database"
exit 1
fi
limit=`expr $limit + 1`
/bin/ln $MYLCKFILE $LCKFILE 2>/dev/null
other=`cat $LCKFILE`
if test "$other" = $$; then
break;
fi
if kill -0 "$other" 2>/dev/null; then : ;
else
logger -i "FDDI allocmac removing old lock file: `ls -l $LCKFILE`"
rm -f $LCKFILE
fi
logger -i "FDDI allocmac lock conflict: `ls -l $LCKFILE`"
sleep 1
done
trap "/bin/rm -f $MYLCKFILE $LCKFILE; exit 1" 0 1 2 15
# try to allocate the number already in use by the board
new=`grep "^$OLDMAC$" $DBFILE`
if test -z "$new"; then
new=`egrep "^8:0:69:[0-9a-fA-F:]*=[a-z]* *$SNUM " $DBFILE \
| sed -e '2,$d' -e 's/=.*//'`
fi
# then look for a new one
if test -z "$new"; then
new=`sed -n -e '/^8:0:69:[0-9a-fA-F:]*$/!d' -e p -e q $DBFILE`
fi
if test -z "$new"; then
echo "FAILED No numbers available."
exit 1
fi
# officially allocate the number, ignoring any blanks after the number
ed - $DBFILE << __JUNK__
/^$new/s/\([^ ]*\).*/\1=$PADTYP $SNUM by $WHO, $REMOTEUSER@$WHERE at `date '+%m\/%d\/%y %H:%M'/`
w
q
__JUNK__
if test $? != 0; then
echo FAILED to allocate address
exit 1
fi
echo $new
exit 0