~ K A L I ~
UNAME : Linux web63.extendcp.co.uk 4.18.0-553.56.1.el8_10.x86_64 #1 SMP Tue Jun 10 05:00:59 EDT 2025 x86_64SERVER IP : 10.0.187.63 -________-
CLIENT IP : 216.73.216.155 MINI SHELL D ZAB '
Current File : //usr/libexec/instsvcdrv-helper |
#!/bin/sh
###############################################################################
#
# Dell Inc. PROPRIETARY INFORMATION
# This software is supplied under the terms of a license agreement or
# nondisclosure agreement with Dell Inc. and may not
# be copied or disclosed except in accordance with the terms of that
# agreement.
#
# Copyright (c) 2000-2018 Dell Inc. All Rights Reserved.
#
# Module Name:
#
# instsvcdrv
#
# Abstract/Purpose:
#
# Systems Management Device Drivers init script
#
# Environment:
#
# Linux
#
# Notes:
#
# dcdbas needs to remain started at runlevel 0 for host control.
# dell_rbu needs to remain started at runlevel 6 for BIOS Update.
#
###############################################################################
ISVCDD_PROD_NAME="Systems Management Device Drivers"
ISVCDD_SCRIPT_NAME="instsvcdrv"
ISVCDD_DEFAULT_INSTALL_DIR="/opt/dell/srvadmin"
ISVCDD_DEFAULT_VARDATA_DIR="/opt/dell/srvadmin/var/lib/openmanage"
# Flag to turn on verbose logging
VERBOSE_LOGGING=false
VERBOSE_TARGET=/dev/stderr
# OS information
OS_DEVICE_DIR="/dev"
OS_MODULES_DIR="/lib/modules"
OS_VARLOG_DIR="/opt/dell/srvadmin/var/log"
# Make sure standard bin directories are in path
PATH="${PATH}:/sbin:/usr/sbin:/bin:/usr/bin"
# Make sure HOSTTYPE is set
[ -z "${HOSTTYPE}" ] && HOSTTYPE=$(uname -m)
# Get running kernel
RUNNING_KERNEL=$(uname -r)
# HAPI config file and variables
HAPICFG_PATHFILENAME="/etc/hapi.cfg"
HAPICFG_PROJECT_NAME_HAPI="hapi"
HAPICFG_HAPI_LOADDRIVERS_KEY="${HAPICFG_PROJECT_NAME_HAPI}.loaddrivers"
HAPICFG_HAPI_LOADDBAS_KEY="${HAPICFG_PROJECT_NAME_HAPI}.loaddbas"
HAPICFG_HAPI_LOADDRBU_KEY="${HAPICFG_PROJECT_NAME_HAPI}.loaddrbu"
HAPICFG_HAPI_FORCEKERMATCH_KEY="${HAPICFG_PROJECT_NAME_HAPI}.forcekernelmatch"
HAPICFG_HAPI_OI_INITFAIL_OK_KEY="${HAPICFG_PROJECT_NAME_HAPI}.allow.user.mode"
HAPICFG_HAPI_OI_LOAD="${HAPICFG_PROJECT_NAME_HAPI}.loadopenipmi"
# Supported values for "loaddrivers" variable
HAPICFG_HAPI_LOADDRIVERS_ACTIVE="active"
HAPICFG_HAPI_LOADDRIVERS_ALL="all"
HAPICFG_HAPI_LOADDRIVERS_BASEONLY="baseonly"
HAPICFG_HAPI_LOADDRIVERS_NONE="none"
HAPICFG_HAPI_LOADDRIVERS_SELECTED="selected"
# omreg config file variables
OMREG_PATHFILENAME="/opt/dell/srvadmin/etc/omreg.cfg"
OMREG_PROJECT_NAME_HAPI="hapi"
OMREG_HAPI_INSTALLPATH_KEY="${OMREG_PROJECT_NAME_HAPI}.installpath"
OMREG_HAPI_INIPATH_KEY="${OMREG_PROJECT_NAME_HAPI}.inipath"
OMREG_HAPI_VARDATAPATH_KEY="${OMREG_PROJECT_NAME_HAPI}.vardatapath"
# if omreg.cfg doesnt exist bug our fragment does, recreate it
if [ ! -f ${OMREG_PATHFILENAME} -a -f /opt/dell/srvadmin/etc/omreg.d/omreg-hapi.cfg ]; then
cat /opt/dell/srvadmin/etc/omreg.d/*.cfg > /opt/dell/srvadmin/etc/omreg.cfg 2>/dev/null ||:
fi
# Determine install and variable data paths
if [ -f ${OMREG_PATHFILENAME} ]; then
# Get install path from omreg config file
ISVCDD_INSTALLPATH=$(
grep "^${OMREG_HAPI_INSTALLPATH_KEY}=" ${OMREG_PATHFILENAME} |
sed "s/^${OMREG_HAPI_INSTALLPATH_KEY}=//")
if [ -z "${ISVCDD_INSTALLPATH}" ]; then
exit 1
fi
# Get ini path from omreg config file
ISVCDD_INIPATH=$(
grep "^${OMREG_HAPI_INIPATH_KEY}=" ${OMREG_PATHFILENAME} |
sed "s/^${OMREG_HAPI_INIPATH_KEY}=//")
if [ -z "${ISVCDD_INIPATH}" ]; then
# use install path when ini path not found
ISVCDD_INIPATH=${ISVCDD_INSTALLPATH}
fi
# Get variable data path from omreg config file
ISVCDD_VARDATAPATH=$(
grep "^${OMREG_HAPI_VARDATAPATH_KEY}=" ${OMREG_PATHFILENAME} |
sed "s/^${OMREG_HAPI_VARDATAPATH_KEY}=//")
if [ -z "${ISVCDD_VARDATAPATH}" ]; then
exit 2
fi
else
# Set defaults if not specified by user
if [ -z "${INSTALL_DIR}" ]; then
ISVCDD_INSTALLPATH="${ISVCDD_DEFAULT_INSTALL_DIR}"
else
ISVCDD_INSTALLPATH=${INSTALL_DIR}
fi
ISVCDD_INIPATH=${ISVCDD_INSTALLPATH}
if [ -z "${VARDATA_DIR}" ]; then
ISVCDD_VARDATAPATH="${ISVCDD_DEFAULT_VARDATA_DIR}"
else
ISVCDD_VARDATAPATH=${VARDATA_DIR}
fi
fi
# check if ipmi kernel modules can be loaded
IPMI_PRESENT=1
DMIDECODE_BIN=$(which dmidecode 2>/dev/null)
if [ ! -z ${DMIDECODE_BIN} ]; then
${DMIDECODE_BIN} -q --type 38 | grep -i "IPMI Device Information" > /dev/null 2>&1
if [ $? -ne 0 ]; then
IPMI_PRESENT=0
fi
fi
ISVCDD_LOG_PFNAME="${OS_VARLOG_DIR}/isvcdd.log"
ISVCDD_SCRIPT_LOCKFILE="${ISVCDD_VARDATAPATH}/.ipc/${ISVCDD_SCRIPT_NAME}.lock"
# Device driver names
ISVCDD_DRIVER_NAME_BASE="dcdbas"
ISVCDD_DRIVER_NAME_RBU="dell_rbu"
IPMI_MSG_HANDLER="ipmi_msghandler"
IPMI_DEVINF="ipmi_devintf"
IPMI_SI="ipmi_si"
if [ ${IPMI_PRESENT} -eq 1 ]; then
IPMI_LOAD_ALL="${IPMI_MSG_HANDLER} ${IPMI_DEVINF} ${IPMI_SI}"
IPMI_UNLOAD_ALL="${IPMI_SI} ${IPMI_DEVINF} ${IPMI_MSG_HANDLER}"
else
IPMI_LOAD_ALL=""
IPMI_UNLOAD_ALL=""
fi
# Create list of device driver module names
ISVCDD_DRIVER_LIST_ALL=""
ISVCDD_DRIVER_LIST_ALL="${ISVCDD_DRIVER_LIST_ALL} ${ISVCDD_DRIVER_NAME_BASE}"
ISVCDD_DRIVER_LIST_ALL="${ISVCDD_DRIVER_LIST_ALL} ${ISVCDD_DRIVER_NAME_RBU}"
ISVCDD_DRIVER_LIST_ALL="${ISVCDD_DRIVER_LIST_ALL} ${IPMI_MSG_HANDLER} ${IPMI_DEVINF} ${IPMI_SI}"
# Standard status codes for commands other than "status"
STATUS_NO_ERROR=0
STATUS_GENERIC_ERROR=1
STATUS_INVALID_ARG=2
STATUS_NOT_IMPLEMENTED=3
# Device Drivers status codes for commands other than "status"
STATUS_SYSTEM_NOT_SUPPORTED=150
STATUS_NO_KERNEL_SOURCE=151
STATUS_DKS_COMPILE_ERROR=152
STATUS_DKS_LINK_ERROR=153
STATUS_INSMOD_UNRESOLVED_SYMBOL=154
STATUS_INSMOD_ERROR=155
STATUS_RMMOD_ERROR=156
STATUS_DKS_FILES_NOT_FOUND=157
STATUS_GCC_NOT_FOUND=158
STATUS_BUILTIN_KERNEL=159
STATUS_FORCE_THREAD_NOT_SUPPORTED=160
STATUS_IPMI_DRIVER_STOPPED=161
STATUS_FORCE_THREAD_OPTION_FOUND=162
STATUS_TUNE_THREAD_OPTION_FOUND=163
STATUS_TUNE_THREAD_NOT_SUPPORTED=164
STATUS_OPTION_SUPERSEDED=165
STATUS_OPTION_NOT_SUPPORTED=166
STATUS_OPTION_SUPPORTED_BUT_NOT_SET=167
STATUS_OPTION_SUPPORTED_AND_SET=168
STATUS_INTERRUPTS_SUPPORTED=169
STATUS_INTERRUPTS_NOT_SUPPORTED=170
# Standard status codes for "status" command
STATUS_RUNNING=0
STATUS_NOT_RUNNING=3
# Device Drivers status codes for "status" command
STATUS_INVALID_STATUS_ARG=180
# Driver types
DRV_TYPE_MODULE=1
DRV_TYPE_BUILTIN=2
# System types
SYS_TYPE_NONE=0
SYS_TYPE_TVM=1
SYS_TYPE_ESM=2
SYS_TYPE_IPMI=4
# OpenIPMI to HAPI configuration
OIHAPICFG_PATHFILENAME="${ISVCDD_INIPATH}/ini/dchipm.ini"
OIHAPICFG_KEYPREFIX="${HAPICFG_PROJECT_NAME_HAPI}.openipmi"
OIHAPICFG_KEY_DRIVERSTARTED="${OIHAPICFG_KEYPREFIX}.driverstarted"
OIHAPICFG_KEY_ISSUPPORTEDVERSION="${OIHAPICFG_KEYPREFIX}.issupportedversion"
OIHAPICFG_KEY_ISPOWEROFFCAPABLE="${OIHAPICFG_KEYPREFIX}.ispoweroffcapable"
OIHAPICFG_KEY_POWERCYCLECOMMAND="${OIHAPICFG_KEYPREFIX}.powercyclecommand"
OIHAPICFG_KEY_POWEROFFMODULE="${OIHAPICFG_KEYPREFIX}.poweroffmodule"
OIHAPICFG_KEY_POWERCYCLEMODULE="${OIHAPICFG_KEYPREFIX}.powercyclemodule"
OIHAPICFG_KEY_BASEDRIVERPREFIX="${OIHAPICFG_KEYPREFIX}.basedriverprefix"
OIHAPICFG_KEY_DRIVERPATTERN="${OIHAPICFG_KEYPREFIX}.driverpattern"
OIHAPICFG_KEY_DEVICENODENAME="${OIHAPICFG_KEYPREFIX}.devicenodename"
OIHAPICFG_KEY_ALLOWUSERMODE="${HAPICFG_HAPI_OI_INITFAIL_OK_KEY}"
OIHAPICFG_HEADER="\
# Automatically generated file: please don't edit\n\
# Copyright (c) 1995-2011 Dell Inc. - All Rights Reserved\n\
# This file is in config (not INI) format\
"
###############################################################################
# Function: instsvcdrv_oihapicfg_validate_addheader
# Description: Check security state of OpenIPMI-HAPI configuration file
# Returns: LSB status codes
# STATUS_NO_ERROR on success
# STATUS_GENERIC_ERROR on failure
###############################################################################
instsvcdrv_oihapicfg_validate_addheader()
{
local l_fname="OItoHAPIconfig"
## check file security before making changes
if [ ! -e "${OIHAPICFG_PATHFILENAME}" ]; then
if [ `id -u` -eq 0 ]; then
## create the path and file only if user root
l_path=$(basename ${OIHAPICFG_PATHFILENAME})
l_path=$(echo ${OIHAPICFG_PATHFILENAME} | sed "s/\/${l_path}//")
if [ ! -e "${l_path}" ]; then
mkdir ${l_path} >/dev/null
chmod 700 ${l_path} >/dev/null
fi
touch ${OIHAPICFG_PATHFILENAME} >/dev/null
chmod 600 ${OIHAPICFG_PATHFILENAME} >/dev/null
fi
## check again
if [ ! -e "${OIHAPICFG_PATHFILENAME}" ]; then
return ${STATUS_GENERIC_ERROR}
fi
fi
[ -h "${OIHAPICFG_PATHFILENAME}" ] &&
return ${STATUS_GENERIC_ERROR}
[ ! "`id -u`" = "0" -o ! -O "${OIHAPICFG_PATHFILENAME}" ] &&
return ${STATUS_GENERIC_ERROR}
[ ! -w "${OIHAPICFG_PATHFILENAME}" ] &&
return ${STATUS_GENERIC_ERROR}
## add standard header
printf "%b\n" "#\n${OIHAPICFG_HEADER}" > ${OIHAPICFG_PATHFILENAME}
printf "%b\n" "# Generated on `date`\n#" >> ${OIHAPICFG_PATHFILENAME}
return ${STATUS_NO_ERROR}
} # instsvcdrv_oihapicfg_validate_addheader
###############################################################################
# Function: instsvcdrv_oihapicfg_update
# Description: Update OpenIPMI-HAPI configuration
# Returns: LSB status codes
# STATUS_NO_ERROR on success
# STATUS_GENERIC_ERROR on failure
###############################################################################
instsvcdrv_oihapicfg_update()
{
local drv_type=$1
## check file security before making changes
instsvcdrv_oihapicfg_validate_addheader
[ $? -ne ${STATUS_NO_ERROR} ] && return ${STATUS_GENERIC_ERROR}
printf "%b\n" "${OIHAPICFG_KEY_DRIVERSTARTED}=yes" >>${OIHAPICFG_PATHFILENAME}
printf "%b\n" "${OIHAPICFG_KEY_ISSUPPORTEDVERSION}=yes" >>${OIHAPICFG_PATHFILENAME}
printf "%b\n" "${OIHAPICFG_KEY_DRIVERPATTERN}=ipmi_" >>${OIHAPICFG_PATHFILENAME}
printf "%b\n" "${OIHAPICFG_KEY_BASEDRIVERPREFIX}=ipmi_si" >>${OIHAPICFG_PATHFILENAME}
## check poweroff
modinfo ipmi_poweroff >/dev/null 2>&1
if [ $? -eq 0 ]; then
printf "%b\n" "${OIHAPICFG_KEY_ISPOWEROFFCAPABLE}=yes" >>${OIHAPICFG_PATHFILENAME}
printf "%b\n" "${OIHAPICFG_KEY_POWEROFFMODULE}=ipmi_poweroff" >>${OIHAPICFG_PATHFILENAME}
printf "%b\n" "${OIHAPICFG_KEY_POWERCYCLEMODULE}=ipmi_poweroff" >>${OIHAPICFG_PATHFILENAME}
## check powercycle
modinfo ipmi_poweroff 2>/dev/null | grep poweroff_control >/dev/null 2>&1 && \
printf "%b\n" "${OIHAPICFG_KEY_POWERCYCLECOMMAND}=poweroff_control=2" >>${OIHAPICFG_PATHFILENAME}
modinfo ipmi_poweroff 2>/dev/null | grep poweroff_powercycle >/dev/null 2>&1 && \
printf "%b\n" "${OIHAPICFG_KEY_POWERCYCLECOMMAND}=poweroff_powercycle=1" >>${OIHAPICFG_PATHFILENAME}
else
printf "%b\n" "${OIHAPICFG_KEY_ISPOWEROFFCAPABLE}=no" >>${OIHAPICFG_PATHFILENAME}
fi
printf "%b\n" "${OIHAPICFG_KEY_ALLOWUSERMODE}=no" >>${OIHAPICFG_PATHFILENAME}
printf "%b\n" "" >>${OIHAPICFG_PATHFILENAME}
return ${STATUS_NO_ERROR}
} # instsvcdrv_oihapicfg_update
###############################################################################
# Function: instsvcdrv_start
# Description: Start device drivers
# Returns: LSB status codes
###############################################################################
instsvcdrv_start()
{
local driver_name driver_status status
status=${STATUS_NO_ERROR}
instsvcdrv_get_driver_list
if [ ! -z "${ISVCDD_LIST}" ]; then
for driver_name in ${ISVCDD_LIST} ${IPMI_LOAD_ALL}
do
instsvcdrv_start_driver ${driver_name}
driver_status=$?
if [ ${driver_status} -ne ${STATUS_NO_ERROR} ]; then
status=${driver_status}
fi
done
fi
# update hapi configuration file
drv_type=${DRV_TYPE_BUILTIN}
instsvcdrv_oihapicfg_update $drv_type
return ${status}
} # instsvcdrv_start
###############################################################################
# Function: instsvcdrv_start_driver <driver>
# Description: Start specified device driver
# Returns: LSB status codes
###############################################################################
instsvcdrv_start_driver()
{
local driver_name status
driver_name="$1"
status=${STATUS_NO_ERROR}
instsvcdrv_check_driver_name ${driver_name}
if [ $? -ne ${STATUS_NO_ERROR} ]; then
return ${STATUS_INVALID_ARG}
fi
instsvcdrv_status_driver_quiet ${driver_name}
case $? in
${STATUS_NOT_RUNNING})
instsvcdrv_load_driver ${driver_name}
status=$?
;;
${STATUS_RUNNING})
;;
esac
return ${status}
} # instsvcdrv_start_driver
###############################################################################
# Function: instsvcdrv_stop
# Description: Stop device drivers
# Returns: LSB status codes
###############################################################################
instsvcdrv_stop()
{
local driver_name driver_status status
status=${STATUS_NO_ERROR}
instsvcdrv_get_driver_list
if [ ! -z "${ISVCDD_LIST}" ]; then
for driver_name in ${ISVCDD_LIST} ${IPMI_UNLOAD_ALL}
do
instsvcdrv_stop_driver ${driver_name}
driver_status=$?
if [ ${driver_status} -ne ${STATUS_NO_ERROR} ]; then
status=${driver_status}
fi
done
fi
return ${status}
} # instsvcdrv_stop
###############################################################################
# Function: instsvcdrv_stop_driver <driver>
# Description: Stop specified device driver
# Returns: LSB status codes
###############################################################################
instsvcdrv_stop_driver()
{
local driver_name status
driver_name="$1"
status=${STATUS_NO_ERROR}
instsvcdrv_check_driver_name ${driver_name}
if [ $? -ne ${STATUS_NO_ERROR} ]; then
return ${STATUS_INVALID_ARG}
fi
instsvcdrv_status_driver_quiet ${driver_name}
case $? in
${STATUS_RUNNING})
instsvcdrv_unload_driver ${driver_name}
status=$?
;;
${STATUS_NOT_RUNNING})
;;
esac
return ${status}
} # instsvcdrv_stop_driver
###############################################################################
# Function: instsvcdrv_status
# Description: Print and return status of device drivers
# Returns: LSB status codes
###############################################################################
instsvcdrv_status()
{
local driver_name status
status=${STATUS_RUNNING}
instsvcdrv_get_driver_list
if [ ! -z "${ISVCDD_LIST}" ]; then
for driver_name in ${ISVCDD_LIST} ${IPMI_LOAD_ALL}
do
instsvcdrv_status_driver ${driver_name}
case $? in
${STATUS_NOT_RUNNING})
status=${STATUS_NOT_RUNNING}
;;
esac
done
fi
return ${status}
} # instsvcdrv_status
###############################################################################
# Function: instsvcdrv_status_driver <driver module name>
# Description: Print and return status of specified device driver
# Returns: LSB status codes
###############################################################################
instsvcdrv_status_driver()
{
local driver_name status
driver_name="$1"
instsvcdrv_check_driver_name ${driver_name}
if [ $? -ne ${STATUS_NO_ERROR} ]; then
return ${STATUS_INVALID_STATUS_ARG}
fi
instsvcdrv_status_driver_quiet ${driver_name}
status=$?
return ${status}
} # instsvcdrv_status_driver
###############################################################################
# Function: instsvcdrv_status_quiet
# Description: Return status of device drivers
# Returns: LSB status codes
###############################################################################
instsvcdrv_status_quiet()
{
local driver_name status
status=${STATUS_RUNNING}
instsvcdrv_get_driver_list
if [ ! -z "${ISVCDD_LIST}" ]; then
for driver_name in ${ISVCDD_LIST};
do
instsvcdrv_status_driver_quiet ${driver_name}
case $? in
${STATUS_NOT_RUNNING})
status=${STATUS_NOT_RUNNING}
;;
esac
done
fi
return ${status}
} # instsvcdrv_status_quiet
###############################################################################
# Function: instsvcdrv_status_driver_quiet <driver module name>
# Description: Return status of specified device driver
# Returns: LSB status codes
###############################################################################
instsvcdrv_status_driver_quiet()
{
lsmod | grep -iq ${1}
if [ $? -eq 0 ]; then
return ${STATUS_RUNNING}
else
return ${STATUS_NOT_RUNNING}
fi
} # instsvcdrv_status_driver_quiet
###############################################################################
# Function: instsvcdrv_check_driver_name <driver>
# Description: Check specified device driver name
# Returns: LSB status codes
###############################################################################
instsvcdrv_check_driver_name()
{
local driver isvcdd_driver
driver="$1"
if [ -z ${driver} ]; then
return ${STATUS_INVALID_ARG}
fi
for isvcdd_driver in ${ISVCDD_DRIVER_LIST_ALL}
do
if [ "${driver}" = "${isvcdd_driver}" ]; then
return ${STATUS_NO_ERROR}
fi
done
return ${STATUS_INVALID_ARG}
} # instsvcdrv_check_driver_name
###############################################################################
# Function: instsvcdrv_get_driver_list
# Description: Get list of drivers configured for loading
# Returns: LSB status codes
# Driver list returned via ISVCDD_LIST
###############################################################################
instsvcdrv_get_driver_list()
{
ISVCDD_LIST=""
if [ -f ${HAPICFG_PATHFILENAME} ]; then
LOADDRIVERS="${HAPICFG_HAPI_LOADDRIVERS_ACTIVE}"
HAPICFG_LOADDRIVERS=$(
grep "^${HAPICFG_HAPI_LOADDRIVERS_KEY}=" ${HAPICFG_PATHFILENAME} |
sed "s/^${HAPICFG_HAPI_LOADDRIVERS_KEY}=//")
if [ ! -z "${HAPICFG_LOADDRIVERS}" ]; then
# validate value
case "${HAPICFG_LOADDRIVERS}" in
${HAPICFG_HAPI_LOADDRIVERS_ACTIVE} | \
${HAPICFG_HAPI_LOADDRIVERS_ALL} | \
${HAPICFG_HAPI_LOADDRIVERS_BASEONLY} | \
${HAPICFG_HAPI_LOADDRIVERS_SELECTED} | \
${HAPICFG_HAPI_LOADDRIVERS_NONE})
LOADDRIVERS="${HAPICFG_LOADDRIVERS}"
;;
*)
;;
esac
fi
case "${LOADDRIVERS}" in
${HAPICFG_HAPI_LOADDRIVERS_ACTIVE} | \
${HAPICFG_HAPI_LOADDRIVERS_ALL})
ISVCDD_LIST="${ISVCDD_DRIVER_NAME_BASE} ${ISVCDD_DRIVER_NAME_RBU}"
;;
${HAPICFG_HAPI_LOADDRIVERS_BASEONLY})
ISVCDD_LIST="${ISVCDD_DRIVER_NAME_BASE}"
;;
${HAPICFG_HAPI_LOADDRIVERS_SELECTED})
LOADDBAS=$(grep "^${HAPICFG_HAPI_LOADDBAS_KEY}=" ${HAPICFG_PATHFILENAME} |
sed "s/^${HAPICFG_HAPI_LOADDBAS_KEY}=//")
if [ "${LOADDBAS}" = "yes" ]; then
ISVCDD_LIST="${ISVCDD_LIST} ${ISVCDD_DRIVER_NAME_BASE}"
fi
LOADDRBU=$(grep "^${HAPICFG_HAPI_LOADDRBU_KEY}=" ${HAPICFG_PATHFILENAME} |
sed "s/^${HAPICFG_HAPI_LOADDRBU_KEY}=//")
if [ "${LOADDRBU}" = "yes" ]; then
ISVCDD_LIST="${ISVCDD_LIST} ${ISVCDD_DRIVER_NAME_RBU}"
fi
;;
${HAPICFG_HAPI_LOADDRIVERS_NONE})
;;
esac
else
ISVCDD_LIST="${ISVCDD_DRIVER_NAME_BASE} ${ISVCDD_DRIVER_NAME_RBU}"
fi
return ${STATUS_NO_ERROR}
} # instsvcdrv_get_driver_list
###############################################################################
# Function: instsvcdrv_load_driver <driver module name>
# Description: Load specified device driver
# Returns: LSB status codes
###############################################################################
instsvcdrv_load_driver()
{
local status
# Create device driver load log file
touch ${ISVCDD_LOG_PFNAME}
chmod 600 ${ISVCDD_LOG_PFNAME}
# Find device driver that works with running kernel
ISVCDD_FOUND=0
# try loading any already-installed driver
modprobe ${1} >>${ISVCDD_LOG_PFNAME} 2>&1
if [ $? -eq 0 ]; then
ISVCDD_FOUND=1
fi
# Check if device driver loaded
if [ ${ISVCDD_FOUND} -eq 0 ]; then
return ${STATUS_INSMOD_ERROR}
fi
# Remove load log file on successful load
rm -f ${ISVCDD_LOG_PFNAME}
# Initialization being done; wait a second
sleep 1
return ${STATUS_NO_ERROR}
} # instsvcdrv_load_driver
###############################################################################
# Function: instsvcdrv_unload_driver <driver module name>
# Description: Unload specified device driver
# Returns: LSB status codes
###############################################################################
instsvcdrv_unload_driver()
{
local status
ISVCDD_LOADING_PFNAME="/sys/class/firmware/$1/loading"
ISVCDD_LOADING_PFNAME_BIOS="/lib/firmware/$1"
# Added check to verify if there is payload for dell dup
# If present we just return without unloading the dell_rbu driver
# This check is applicable for kernel version 3.10 and above.
if [ -f "${ISVCDD_LOADING_PFNAME_BIOS}" ]; then
return ${STATUS_NO_ERROR}
fi
# check if driver has loading file
if [ ! -z "${ISVCDD_LOADING_PFNAME}" ] &&
[ -f "${ISVCDD_LOADING_PFNAME}" ]; then
# tell driver it's being unloaded
echo -1 >${ISVCDD_LOADING_PFNAME}
fi
# unload device driver
# modprobe -r ${1}
return ${STATUS_NO_ERROR}
if [ $? -ne 0 ]; then
return ${STATUS_RMMOD_ERROR}
fi
return ${STATUS_NO_ERROR}
} # instsvcdrv_unload_driver
###############################################################################
# Function: instsvcdrv_supt_lock
# Description: Prevent execution of another command
# Returns: none
###############################################################################
instsvcdrv_supt_lock()
{
# If another command is executing, give it some time to finish
SECS=0
while [ -f ${ISVCDD_SCRIPT_LOCKFILE} ] && [ ${SECS} -lt 60 ];
do
sleep 1
SECS=$((SECS + 1))
done
touch ${ISVCDD_SCRIPT_LOCKFILE}
} # instsvcdrv_supt_lock
###############################################################################
# Function: instsvcdrv_supt_unlock
# Description: Allow execution of another command
# Returns: none
###############################################################################
instsvcdrv_supt_unlock()
{
rm -f ${ISVCDD_SCRIPT_LOCKFILE}
} # instsvcdrv_supt_unlock
###############################################################################
# Check command line parameter for action to perform
###############################################################################
case "$1" in
start)
instsvcdrv_supt_lock
instsvcdrv_start
EXIT_STATUS=$?
instsvcdrv_supt_unlock
;;
stop)
instsvcdrv_supt_lock
instsvcdrv_stop
EXIT_STATUS=$?
instsvcdrv_supt_unlock
;;
restart|force-reload)
instsvcdrv_supt_lock
instsvcdrv_stop
EXIT_STATUS=$?
instsvcdrv_supt_unlock
if [ ${EXIT_STATUS} -eq ${STATUS_NO_ERROR} ]; then
instsvcdrv_supt_lock
instsvcdrv_start
EXIT_STATUS=$?
instsvcdrv_supt_unlock
fi
;;
status)
# print and return current status of service
instsvcdrv_supt_lock
instsvcdrv_status
EXIT_STATUS=$?
instsvcdrv_supt_unlock
;;
reload)
# reload configuration
EXIT_STATUS=${STATUS_NOT_IMPLEMENTED}
;;
*)
echo "Usage: ${ISVCDD_SCRIPT_NAME} {start|stop|restart|force-reload|status}"
EXIT_STATUS=${STATUS_INVALID_ARG}
esac
exit ${EXIT_STATUS}
###############################################################################
# End Script
###############################################################################
Coded by KALI :v Greetz to DR HARD ../ kali.zbi@hotmail.com