postinstall revision 4496171313bed39e96f21bc2f9faf2868e267ae3
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#!/sbin/sh
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#
a7c412f37cc73d0332887a746e81220cbf09dd00Mark Andrews# CDDL HEADER START
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# The contents of this file are subject to the terms of the
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# Common Development and Distribution License (the "License").
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# You may not use this file except in compliance with the License.
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# or http://www.opensolaris.org/os/licensing.
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# See the License for the specific language governing permissions
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# and limitations under the License.
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# When distributing Covered Code, include this CDDL HEADER in each
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# If applicable, add the following below this CDDL HEADER, with the
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# fields enclosed by brackets "[]" replaced with your own identifying
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# information: Portions Copyright [yyyy] [name of copyright owner]
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# CDDL HEADER END
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# Use is subject to license terms.
dbb012765c735ee0d82dedb116cdc7cf18957814Evan Hunt#
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# ident "%Z%%M% %I% %E% SMI"
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# Function: check_add_drv()
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews#
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# This function will check if the module has an entry in etc/name_to_major
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# If not simply calls add_drv with the arguments given. If there is
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# such an entry in name_to_major file, it adds entries in driver_aliases
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# driver_classes and minor_perm if necessary.
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews# The syntax of this function is the same as add_drv.
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrewscheck_add_drv()
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews{
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if [ "$BASEDIR" = "" ]
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews then
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews BASEDIR=/
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews fi
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews alias=""
2ae159b376dac23870d8005563c585acf85a4b5aEvan Hunt class=""
2ae159b376dac23870d8005563c585acf85a4b5aEvan Hunt ADD_ALIAS=0
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ADD_CLASS=0
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ADD_MINOR=0
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews OPTIND=1
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews IS_NET_DRIVER=0
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews cmd="add_drv"
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews NO_CMD=
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews while getopts i:b:m:c:N opt
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews do
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews case $opt in
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews N ) NO_CMD=1;;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews i ) ADD_ALIAS=1
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews alias=$OPTARG
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews cmd=$cmd" -i '$alias'"
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ;;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews m ) ADD_MINOR=1
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews minor=$OPTARG
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews cmd=$cmd" -m '$minor'"
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ;;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews c) ADD_CLASS=1
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews class=$OPTARG
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews cmd=$cmd" -c $class"
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ;;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews b) BASEDIR=$OPTARG
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews cmd=$cmd" -b $BASEDIR"
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ;;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews \?) echo "check_add_drv can not handle this option"
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews return
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews ;;
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews esac
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews done
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews shift `/usr/bin/expr $OPTIND - 1`
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt drvname=$1
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews cmd=$cmd" "$drvname
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews drvname=`echo $drvname | /usr/bin/sed 's;.*/;;g'`
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews /usr/bin/grep "^$drvname[ ]" $BASEDIR/etc/name_to_major > /dev/null 2>&1
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if [ "$NO_CMD" = "" -a $? -ne 0 ]
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews then
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews eval $cmd
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews else
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews # entry already in name_to_major, add alias, class, minorperm
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews # if necessary
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if [ $ADD_ALIAS = 1 ]
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews then
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews for i in $alias
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews do
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews /usr/bin/egrep "^$drvname[ ]+$i" $BASEDIR/etc/driver_aliases>/dev/null 2>&1
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if [ $? -ne 0 ]
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews then
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews echo "$drvname $i" >> $BASEDIR/etc/driver_aliases
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews fi
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews done
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews fi
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if [ $ADD_CLASS = 1 ]
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews then
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews /usr/bin/egrep "^$drvname[ ]+$class( | |$)" $BASEDIR/etc/driver_classes > /dev/null 2>&1
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if [ $? -ne 0 ]
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews then
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews echo "$drvname\t$class" >> $BASEDIR/etc/driver_classes
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews fi
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews fi
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if [ $ADD_MINOR = 1 ]
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews then
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews /usr/bin/grep "^$drvname:" $BASEDIR/etc/minor_perm > /dev/null 2>&1
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews if [ $? -ne 0 ]
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews then
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews minorentry="$drvname:$minor"
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews echo $minorentry >> $BASEDIR/etc/minor_perm
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews fi
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews fi
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews fi
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews}
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrewscheck_add_drv -b "${BASEDIR}" -i \
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews'"SUNW,niumx"
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews'\
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews-m '* 0666 root sys' niumx
c3c8823fed039b3a2b8e5ca8bc2f3301d1dd840eMark Andrews