All pastes #36469 Raw Edit

Anonymous

public text v1 · immutable
#36469 ·published 2006-01-11 13:48 UTC
rendered paste body

# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}
# Force MODE=onboot if started via init.d link
# else MODE=manual
if test "$link" = "$base" ; then
    MODE=manual
else
    MODE=onboot
fi

. /etc/rc.status

ACTION=$1
shift
AFTER_ACTION=$@

CONTR_FILES=""
test $# -gt 0 -a "$1" != "-o" && CONTR_FILES=cfg-$1
shift
test "$1" = "-o" && shift
OPTIONS=$@
while [ $# -gt 0 ]; do
    case $1 in
        boot|onboot)    MODE=onboot ;;
        hotplug)        MODE=hotplug ;;
        manual)         MODE=manual ;;
        all)            MODE=all ;;
        *)              usage "unknown option $1" ;;
    esac
    shift
done

SBIN=/usr/sbin
# test for program is here and executable (will fail if /usr is not mounted)
# I only check one and not all used
test -x $SBIN/hisaxctrl || exit 5

cd /etc/sysconfig/isdn
test -f scripts/functions && . scripts/functions
test -f config && . config

# find all ISDN controller configuration files.
# These files start with contr- and do # not contain a '.' or '~'.

test -z "$CONTR_FILES" && ALL_CONTR=yes
test -z "$CONTR_FILES" && for c in cfg-contr* ; do
  case $c in
    *~*|*.*)
      # drop backup files, rpm{save,new,orig}
      ;;
    *)
      CONTR_FILES="$CONTR_FILES $c"
      ;;
  esac
done
#echo "CONTR_FILES  = $CONTR_FILES"

rc_reset

case "$ACTION" in
    start)
        MESSAGE="Setting up ISDN card"
        set -- $CONTR_FILES
        for CONTR in "${@#cfg-contr}"; do
            ID="contr${CONTR}"
            test -f "cfg-${ID}" || continue
            STARTMODE=manual
            . cfg-${ID}
            echo -n "$MESSAGE $ID $NAME"
            test_startmode
            RET=$?
            if [ $RET -eq 0 ]; then
                test "$MODE" = "hotplug" || test_driver_loaded $DRIVER
                RET=$?
                if [ $RET -eq 10 ]; then
                    echo -n " ${warn}$DRIVER busy${norm}"
                    RET=1
                fi
                if [ $RET -eq 15 ]; then
                    echo -n " in use"
                    RET=0
                fi
            elif [ $RET -eq 99 ]; then
                # MODE = all with hotplug, if device is here (driver loaded)
                # execute to catch first configure (all is used by yast)
                test_driver_loaded $DRIVER
                RET=$?
                if [ $RET -ne 10 ]; then
                    RET=5
                else
                    RET=0
                fi
            fi
            if [ $RET -eq 0 ]; then
                test_driver_loaded
                if [ -x scripts/add-$DRIVER ] ; then
                    . scripts/add-$DRIVER
                else
                    LOAD_CONTR="$LOAD_CONTR $CONTR"
                    RET=0
                fi
            fi
            rc_failed $RET
            rc_status -v
            MESSAGE="                    "
        done
        CONTR_CNT=0
        test -n "$LOAD_CONTR" && for CONTR in $LOAD_CONTR; do
            MESSAGE="Loading Driver"
            ID="contr$CONTR"
            echo -n "${MESSAGE} ${ID}"
            . cfg-${ID}
            RET=0
            if [ -x scripts/load-$DRIVER ] ; then
                . scripts/load-$DRIVER
            else
                /sbin/modprobe $DRIVER $PARAMETER
                RET=$?
                if [ -n "$EAZMAP" ]; then
                    I4L_EAZMAP_$CONTR="${ID} ${EAZMAP}"
                    I4L_EAZMAP_IDX="$I4L_EAZMAP_IDX $CONTR"
                fi
            fi
            if [ $RET -ge 6 ]; then
                RET=1;
            fi
            rc_failed $RET
            rc_status -v
        done
        MESSAGE="Mapping EAZ"
        test -n "$I4L_EAZMAP_IDX" && for idx in $I4L_EAZMAP_IDX; do
            echo -n "${MESSAGE} contr${idx}"
            eval I4L_EAZMAP=\$I4L_EAZMAP_$idx
            $SBIN/isdnctrl mapping $I4L_EAZMAP >& /dev/null
            RET=$?
            rc_failed $RET
            rc_status -v
            MESSAGE="           "
        done
        # reload smpppd if exist
        test -x /etc/init.d/smpppd && \
                /etc/init.d/smpppd reload >& /dev/null
        ;;
    stop)
        set -- $CONTR_FILES
        unset REMOVE_DRV
        unset REMOVE_EXTRA
        MESSAGE="Unloading ISDN driver "
        echo -n "${MESSAGE}"
        # if some other monitor processes are running
        fuser -k /dev/isdninfo >> /dev/null
        RET=$?
        FCNT=0
        while [ "$RET" = "0" -a $FCNT -lt 10 ]; do
            echo -n "."
            FCNT=$(($FCNT + 1))
            fuser /dev/isdninfo >> /dev/null
            RET=$?
        done
        RET=0
        for CONTR in "${@#cfg-contr}"; do
            ID="contr$CONTR"
            test -f cfg-${ID} || continue
            unset DISABLE
            . cfg-${ID}
            unset FOUND
            for drv in $REMOVE_DRV ; do
                test "$drv" = "$DRIVER" && FOUND="yes"
            done
            test -n "$FOUND" || REMOVE_DRV="$REMOVE_DRV $DRIVER"
            kill_isdnlog ${ID}
            test -x scripts/stop-$DRIVER  && . scripts/stop-$DRIVER
        done
        echo -n "${REMOVE_DRV}"
        RET=0
        if [ -n "$REMOVE_DRV" -o -n "$REMOVE_EXTRA" ] ; then
            RETSTRING=`/sbin/rmmod -r $REMOVE_DRV $REMOVE_EXTRA 2>&1`
            RET=$?
            if [ $RET -ne 0 ]; then
                case "$RETSTRING" in
                    *"busy"*)
                        RET=1
                        echo -n " ${warn}busy${norm}"
                        ;;
                   *"not loaded"*)
                        RET=0
                        echo -n " (not loaded)"
                        ;;
                   *)
                        RET=1
                        ;;
                esac
            fi
        fi
        rc_failed $RET
        rc_status -v
        ;;
    status)
        echo -n "Checking for service isdn: "
        grep -q ttyI /proc/devices || rc_failed 3
        rc_status -v
        ;;
    try-restart)
        $0 status >/dev/null &&  $0 restart
        rc_status
        ;;

    restart|force-reload)
        $0 stop $AFTER_ACTION
        $0 start $AFTER_ACTION
        rc_status
        ;;

    reload)
        ;;

    *)
        usage "unknown action $ACTION"
        exit 1
esac
rc_exit