%PDF- %PDF- 403WebShell
403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/thread-self/root/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
###############################################################################


Youez - 2016 - github.com/yon3zu
LinuXploit