%PDF- %PDF-
Server IP : 79.170.40.229 / Your IP : 3.144.88.216 Web Server : Apache System : Linux web232.extendcp.co.uk 4.18.0-513.24.1.el8_9.x86_64 #1 SMP Mon Apr 8 11:23:13 EDT 2024 x86_64 User : 1stforcarhirealicante.com ( 296923) PHP Version : 5.6.40 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/thread-self/root/usr/libexec/ |
Upload File : |
#!/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 ###############################################################################