#!/bin/sh
##############################################################################
#
#  Copyright (c) 2011, Doremi Labs, Inc.
#    All rights reserved.
#
#  Redistribution in source or binary forms, with or without
#  modification, are NOT permitted.
#
#    Doremi Labs, Inc.
#    1020 Chestnut St.
#    Burbank, CA 91506
#    Tel : (818) 562 1101
#    Fax : (818) 562 1109
#
# BVI: RAID status is now handled by harddiskstatus.sh
# HMO: fix to report correct status for linear and stripping RAID
# HMO: add .$$ identification in temporrary file to prevent race conflict
# HMO: change ipmi temporary filename to prevent race conflict
# HMO: add number of drives in RAID table
# HMO: process board information only once
# HMO: booting device properties added
#
##############################################################################

# for definition of motherboard_model()
. /etc/init.d/drmfunctions
. /doremi/etc/init.d/snmp.sh

check_single_instance "/var/lock/subsys/snmp_minutely" || exit 1

DOREMI_PATH=/var/doremi
SBCSETUP=/doremi/sbin/sbcsetup.out
MCSETUP=/doremi/sbin/mcsetup.out
MBCTL=/doremi/sbin/mb_ctl.out
LDBCTL=/doremi/sbin/ldbctl.out
BOARD=/doremi/bin/board.out

if [ "${MOTHERBOARD_MODEL_D945GTP}" != "1" ]; then
	MOTHERBOARD_MODEL_D945GTP=1
fi
if [ "${MOTHERBOARD_MODEL_SE7221x}" != "2" ]; then
	MOTHERBOARD_MODEL_SE7221x=2
fi
if [ "${MOTHERBOARD_MODEL_S3000AH}" != "3" ]; then
	MOTHERBOARD_MODEL_S3000AH=3
fi

adjust_fan_value()
{
	if test "$1" -gt 12000 2> /dev/null; then
		expr "$1" / 2
	else
		echo "$1"
	fi
}

sm_nand_alarm_set()
{
	local TYPE="$1"
	local SEVERITY="$2"
	local STATUS="$3"
	
	touch "${ALARM_PATH}/MD_SM_NAND_${TYPE}_not_mounted"
	log_alarm "MD_SM_NAND_${TYPE}_not_mounted alarm raised"
	# send a log
	${LDBCTL} -s SecurityModuleNANDstatus "Severity=${SEVERITY}" "Status=${STATUS}" | \
	${LDBCTL} -l
	return 0
}

sm_nand_alarm_clear()
{
	local TYPE="$1"
	
	log_alarm "MD_SM_NAND_${TYPE}_not_mounted alarm cleared"
	rm -f "${ALARM_PATH}/MD_SM_NAND_${TYPE}_not_mounted"
	return 0
}

check_channel_security_sm_blackout()
{
	local DOOR=$1
	local MARRIAGE=$2
	local PARTIAL_BLACKOUT=$3
	local ALARM
	
	# PARTIAL_BLACKOUT state is 0="no partial blackout" 1="partial blackout"
	if [ "${DOOR}" == "unknown" ] || [ "${MARRIAGE}" == "unknown" ] || [ "${PARTIAL_BLACKOUT}" == "unknown" ]; then
		ALARM="unknown"
	else
		if [ "${PARTIAL_BLACKOUT}" == "1" ]; then
			if [ "${DOOR}" == "0" ] || [ "${MARRIAGE}" == "0" ]; then
				ALARM="warning"
			else
				ALARM="normal"
			fi
		else
			if [ "${DOOR}" == "0" ] || [ "${MARRIAGE}" == "0" ]; then
				ALARM="error"
			else
				ALARM="normal"
			fi
		fi
	fi
	
	update_alarm_state SM_MARRIAGE $ALARM
}

get_md_status()
{
	local NAME=$1
	local VAL=$(grep ${NAME} ${SNMP_PATH}/md_status.txt 2>/dev/null | awk '{print $2}')
	
	if [ ! -n "${VAL}" ]; then
		VAL="unknown"
	fi
	
	echo "${VAL}"
}

check_sm_status_alarms()
{
	if test -r ${SNMP_PATH}/md_status.txt; then
		local NAND_SMD_MOUNTED=$(grep NANDSMDMounted ${SNMP_PATH}/md_status.txt | awk '{print $2}')    
		if [ "$NAND_SMD_MOUNTED" == "0" ]; then
			if ! test -r "${ALARM_PATH}/MD_SM_NAND_SMD_not_mounted"; then
				sm_nand_alarm_set "SMD" "Warning" "smd-not-mounted"
			fi
		else
			if test -r "${ALARM_PATH}/MD_SM_NAND_SMD_not_mounted"; then
				sm_nand_alarm_clear "SMD"
			fi
		fi
		
		local NAND_VAR_MOUNTED=$(grep NANDVARMounted ${SNMP_PATH}/md_status.txt | awk '{print $2}')
		if [ "$NAND_VAR_MOUNTED" == "0" ]; then
			if ! test -r "${ALARM_PATH}/MD_SM_NAND_VAR_not_mounted"; then
				local board_type=$(cat ${SNMP_PATH}/md_product.txt)
				case "$board_type" in 
					imb)
						sm_nand_alarm_set "VAR" "Error" "var-not-mounted"
						;;
					
					*)
						sm_nand_alarm_set "VAR" "Warning" "var-not-mounted"
						;;
				esac
			fi
		else
			if test -r "${ALARM_PATH}/MD_SM_NAND_VAR_not_mounted"; then
				sm_nand_alarm_clear "VAR"
			fi
		fi
		
		local DOOR_STATE
		local MARRIAGE_STATE
		local BLACKOUT_STATE
		if DOOR_STATE=$(get_md_status ServiceDoorArmed) && MARRIAGE_STATE=$(get_md_status ActiveMarriage) && BLACKOUT_STATE=$(get_md_status PartialBlackout); then
			check_channel_security_sm_blackout ${DOOR_STATE} ${MARRIAGE_STATE} ${BLACKOUT_STATE}
		fi
	fi
}

#
# 945GTP motherboard sensors
#
sensors_motherboard_model_D945()
{
	sensors | tr -s [:space:] > /tmp/snmp_sensors.$$
	mv /tmp/snmp_sensors.$$ /tmp/snmp_sensors

	#
	# Temperatures
	#
	save_string_value	TEMP_MOTHERBOARD_title	"Motherboard"
	save_integer_value	TEMP_MOTHERBOARD_value	$(cat /tmp/snmp_sensors | grep Board: | cut -d ' ' -f 2 | tr -d [+C])
	save_string_value	TEMP_CPU_title				"CPU"
	save_integer_value	TEMP_CPU_value			$(cat /tmp/snmp_sensors | grep CPU: | cut -d ' ' -f 2 | tr -d [+C])
	save_string_value	TEMP_CHIPSET_title			"Chipset"
	save_integer_value	TEMP_CHIPSET_value		$(cat /tmp/snmp_sensors | grep BoaRemote: | cut -d ' ' -f 2 | tr -d [+C])

	#
	# Fan speeds
	#	
	save_string_value	FAN_MOTHERBOARD_title		"Motherboard Fan"
	save_integer_value	FAN_MOTHERBOARD_value		"`cat /tmp/snmp_sensors | grep fan4: | cut -d ' ' -f 2`"
	save_string_value	FAN_CPU_title			"CPU Fan"
	save_integer_value	FAN_CPU_value			"`cat /tmp/snmp_sensors | grep CPU_Fan: | cut -d ' ' -f 2`"
	save_string_value	FAN_CHIPSET_title		"Chipset Fan"
	save_integer_value	FAN_CHIPSET_value		"`cat /tmp/snmp_sensors | grep fan3: | cut -d ' ' -f 2`"

	#
	# Voltages
	#
	save_string_value	VOLT_1_title			"Voltage 1"
	save_to_mV_string_value	VOLT_1_value			"`cat /tmp/snmp_sensors | grep VCore: | cut -d ' ' -f 2`"
	save_string_value	VOLT_2_title			"Voltage 2"
	save_to_mV_string_value	VOLT_2_value			"0"
	save_string_value	VOLT_3_title			"+3.3V"
	save_to_mV_string_value	VOLT_3_value			"`cat /tmp/snmp_sensors | grep V3.3: | cut -d ' ' -f 2`"
	save_string_value	VOLT_4_title			"+5V"
	save_to_mV_string_value	VOLT_4_value			"`cat /tmp/snmp_sensors | grep V5: | cut -d ' ' -f 2`"
	save_string_value	VOLT_5_title			"+12V"
	save_to_mV_string_value	VOLT_5_value			"`cat /tmp/snmp_sensors | grep V12: | cut -d ' ' -f 2`"
	save_string_value	VOLT_6_title			"-5V"
	save_to_mV_string_value	VOLT_6_value			"-5"
	save_string_value	VOLT_7_title			"-12V"
	save_to_mV_string_value	VOLT_7_value			"-12"
}

#
# SE7221 motherboard sensors
#
sensors_motherboard_model_SE7221()
{
	# Get System Fan #1 and #2 from PC87427 driver (more reliable than IPMI)
	sensors | tr -s [:space:] > /tmp/snmp_sensors.$$
	mv /tmp/snmp_sensors.$$ /tmp/snmp_sensors

	save_string_value	FAN_MOTHERBOARD_title		"Serverboard Fan1"
	save_integer_value	FAN_MOTHERBOARD_value		"`cat /tmp/snmp_sensors | grep fan1 | cut -d ' ' -f 2 | cut -d. -f1`"
	save_string_value	FAN_CHIPSET_title		"Serverboard Fan2"
	save_integer_value	FAN_CHIPSET_value		"`cat /tmp/snmp_sensors | grep fan2 | cut -d ' ' -f 2 | cut -d. -f1`"
}

#
# S3000 motherboard sensors
#
sensors_motherboard_model_S3000()
{
	sensors | tr -s [:space:] > /tmp/snmp_sensors.$$
	mv /tmp/snmp_sensors.$$ /tmp/snmp_sensors

	#
	# Temperatures
	# 
	save_string_value	TEMP_MOTHERBOARD_title	"Motherboard"
	save_integer_value	TEMP_MOTHERBOARD_value	$(cat /tmp/snmp_sensors | grep temp2: | cut -d ' ' -f 2 | tr -d [+C])
	save_string_value	TEMP_CPU_title				"CPU"
	save_integer_value	TEMP_CPU_value			$(cat /tmp/snmp_sensors | grep temp1: | cut -d ' ' -f 2 | tr -d [+C])
	save_string_value	TEMP_CHIPSET_title			"Chipset"
	save_integer_value	TEMP_CHIPSET_value		$(cat /tmp/snmp_sensors | grep temp3: | cut -d ' ' -f 2 | tr -d [+C])
	
	#
	# Fan speeds
	# 
	save_string_value	FAN_MOTHERBOARD_title		"Motherboard Fan"
	save_integer_value	FAN_MOTHERBOARD_value		"-1"
	save_string_value	FAN_CPU_title			"CPU Fan"
	save_integer_value	FAN_CPU_value			"-1"
	save_string_value	FAN_CHIPSET_title		"Chipset Fan"
	save_integer_value	FAN_CHIPSET_value		"-1"
	
	#
	# Voltages
	# 
	save_string_value	VOLT_1_title			"Voltage 1"
	save_to_mV_string_value	VOLT_1_value			"`cat /tmp/snmp_sensors | grep in0: | cut -d ' ' -f 2`"
	save_string_value	VOLT_2_title			"Voltage 2"
	save_to_mV_string_value	VOLT_2_value			"`cat /tmp/snmp_sensors | grep in1: | cut -d ' ' -f 2`"
	save_string_value	VOLT_3_title			"+3.3V"
	save_to_mV_string_value	VOLT_3_value			"`cat /tmp/snmp_sensors | grep in2: | cut -d ' ' -f 2`"
	save_string_value	VOLT_4_title			"+5V"
	save_to_mV_string_value	VOLT_4_value			"`cat /tmp/snmp_sensors | grep in3: | cut -d ' ' -f 2`"
	save_string_value	VOLT_5_title			"+12V"
	save_to_mV_string_value	VOLT_5_value			"`cat /tmp/snmp_sensors | grep in4: | cut -d ' ' -f 2`"
	save_string_value	VOLT_6_title			"-5V"
	save_to_mV_string_value	VOLT_6_value			"-5"
	save_string_value	VOLT_7_title			"-12V"
	save_to_mV_string_value	VOLT_7_value			"-12"
}

#
# 83627hf sensors
#
sensors_83627hf()
{
	sensors | tr -s [:space:] > /tmp/snmp_sensors.$$
	mv /tmp/snmp_sensors.$$ /tmp/snmp_sensors

	#
	# Temperatures
	#
	save_string_value	TEMP_MOTHERBOARD_title	"Motherboard"
	save_integer_value	TEMP_MOTHERBOARD_value	$(cat /tmp/snmp_sensors | grep temp2: | cut -d ' ' -f 2 | tr -d [+\uffffC])
	save_string_value	TEMP_CPU_title				"CPU"
	save_integer_value	TEMP_CPU_value			$(cat /tmp/snmp_sensors | grep temp1: | cut -d ' ' -f 2 | tr -d [+\uffffC])
	save_string_value	TEMP_CHIPSET_title			"Chipset"
	save_integer_value	TEMP_CHIPSET_value		$(cat /tmp/snmp_sensors | grep temp3: | cut -d ' ' -f 2 | tr -d [+\uffffC])
	
	#
	# Fan speeds
	#
	save_string_value	FAN_MOTHERBOARD_title		"Motherboard Fan"
	save_integer_value	FAN_MOTHERBOARD_value		"-1"
	save_string_value	FAN_CPU_title			"CPU Fan"
	save_integer_value	FAN_CPU_value			"-1"
	save_string_value	FAN_CHIPSET_title		"Chipset Fan"
	save_integer_value	FAN_CHIPSET_value		"-1"
	
	#
	# Voltages
	#
	save_string_value	VOLT_1_title			"Voltage 1"
	save_to_mV_string_value	VOLT_1_value			"`cat /tmp/snmp_sensors | grep 'VCore 1:' | cut -d ' ' -f 2`"
	save_string_value	VOLT_2_title			"Voltage 2"
	save_to_mV_string_value	VOLT_2_value			"`cat /tmp/snmp_sensors | grep 'VCore 2:' | cut -d ' ' -f 2`"
	save_string_value	VOLT_3_title			"+3.3V"
	save_to_mV_string_value	VOLT_3_value			"`cat /tmp/snmp_sensors | grep V3.3: | cut -d ' ' -f 2`"
	save_string_value	VOLT_4_title			"+5V"
	save_to_mV_string_value	VOLT_4_value			"`cat /tmp/snmp_sensors | grep V5: | cut -d ' ' -f 2`"
	save_string_value	VOLT_5_title			"+12V"
	save_to_mV_string_value	VOLT_5_value			"`cat /tmp/snmp_sensors | grep V12: | cut -d ' ' -f 2`"
	save_string_value	VOLT_6_title			"-5V"
	save_to_mV_string_value	VOLT_6_value			"-5"
	save_string_value	VOLT_7_title			"-12V"
	save_to_mV_string_value	VOLT_7_value			"-12"
}

#
# 83627ehf sensors
#
sensors_83627ehf()
{
	sensors | tr -s [:space:] > /tmp/snmp_sensors.$$
	mv /tmp/snmp_sensors.$$ /tmp/snmp_sensors

	#
	# Temperatures
	#
	save_string_value	TEMP_MOTHERBOARD_title	"Motherboard"
	save_integer_value	TEMP_MOTHERBOARD_value	$(cat /tmp/snmp_sensors | grep \"Sys Temp:\" | cut -d ' ' -f 3 | cut -d '.' -f 1 | tr -d [+\uffffC])
	save_string_value	TEMP_CPU_title				"CPU"
	save_integer_value	TEMP_CPU_value			$(cat /tmp/snmp_sensors | grep \"CPU Temp:\" | cut -d ' ' -f 3 | cut -d '.' -f 1 | tr -d [+\uffffC])
	save_string_value	TEMP_CHIPSET_title			"Chipset"
	save_integer_value	TEMP_CHIPSET_value		$(cat /tmp/snmp_sensors | grep \"AUX Temp:\" | cut -d ' ' -f 3 | cut -d '.' -f 1 | tr -d [+\uffffC])
	
	#
	# Fan speeds
	#
	save_string_value	FAN_MOTHERBOARD_title		"Motherboard Fan"
	save_integer_value	FAN_MOTHERBOARD_value		"-1"
	save_string_value	FAN_CPU_title			"CPU Fan"
	save_integer_value	FAN_CPU_value			"`cat /tmp/snmp_sensors | grep \"fan4:\" | cut -d ' ' -f 2`"
	save_string_value	FAN_CHIPSET_title		"Chipset Fan"
	save_integer_value	FAN_CHIPSET_value		"-1"

	save_string_value	FAN_4_title		"Fan1"
	save_integer_value	FAN_4_value		"`cat /tmp/snmp_sensors | grep \"Case Fan:\" | cut -d ' ' -f 3`"
	save_string_value	FAN_5_title		"Fan2"
	save_integer_value	FAN_5_value		"`cat /tmp/snmp_sensors | grep \"CPU Fan:\" | cut -d ' ' -f 3`"
	save_string_value	FAN_6_title		"Fan3"
	save_integer_value	FAN_6_value		"`cat /tmp/snmp_sensors | grep \"fan5:\" | cut -d ' ' -f 2`"
	
	#
	# Voltages
	#
	save_string_value	VOLT_1_title			"Voltage 1"
	save_to_mV_string_value	VOLT_1_value			"`cat /tmp/snmp_sensors | grep 'VCore:' | cut -d ' ' -f 2`"
	save_string_value	VOLT_2_title			"Voltage 2"
	save_to_mV_string_value	VOLT_2_value			"0"
	save_string_value	VOLT_3_title			"+3.3V"
	save_to_mV_string_value	VOLT_3_value			"`cat /tmp/snmp_sensors | grep 3VCC: | cut -d ' ' -f 2`"
	save_string_value	VOLT_4_title			"+5V"
	save_to_mV_string_value	VOLT_4_value			"`cat /tmp/snmp_sensors | grep in6: | cut -d ' ' -f 2`"
	save_string_value	VOLT_5_title			"+12V"
	save_to_mV_string_value	VOLT_5_value			"`cat /tmp/snmp_sensors | grep in1: | cut -d ' ' -f 2`"
	save_string_value	VOLT_6_title			"-5V"
	save_to_mV_string_value	VOLT_6_value			"-5"
	save_string_value	VOLT_7_title			"-12V"
	save_to_mV_string_value	VOLT_7_value			"-12"
}

#
# 83627ehf_x7spa sensors
#
sensors_83627ehf_x7spa()
{
	sensors | tr -s [:space:] > /tmp/snmp_sensors.$$
	mv /tmp/snmp_sensors.$$ /tmp/snmp_sensors

	#
	# Temperatures
	#
	save_string_value	TEMP_MOTHERBOARD_title	"Motherboard"
	save_integer_value	TEMP_MOTHERBOARD_value	$(cat /tmp/snmp_sensors | grep \"Sys Temp:\" | cut -d ' ' -f 3 | cut -d '.' -f 1 | tr -d [+\uffffC])
	save_string_value	TEMP_CPU_title				"CPU"
	save_integer_value	TEMP_CPU_value			$(cat /tmp/snmp_sensors | grep \"CPU Temp:\" | cut -d ' ' -f 3 | cut -d '.' -f 1 | tr -d [+\uffffC])
	save_string_value	TEMP_CHIPSET_title			"Chipset"
	save_integer_value	TEMP_CHIPSET_value		$(cat /tmp/snmp_sensors | grep \"AUX Temp:\" | cut -d ' ' -f 3 | cut -d '.' -f 1 | tr -d [+\uffffC])
	
	#
	# Fan speeds
	#
	save_string_value	FAN_MOTHERBOARD_title		"Motherboard Fan"
	save_integer_value	FAN_MOTHERBOARD_value		"-1"
	save_string_value	FAN_CPU_title			"CPU Fan"
	save_integer_value	FAN_CPU_value			"-1"
	save_string_value	FAN_CHIPSET_title		"Chipset Fan"
	save_integer_value	FAN_CHIPSET_value		"-1"
	
	#
	# Voltages
	#
	save_string_value	VOLT_1_title			"Voltage 1"
	save_to_mV_string_value	VOLT_1_value			"`cat /tmp/snmp_sensors | grep 'VCore:' | cut -d ' ' -f 2`"
	save_string_value	VOLT_2_title			"Voltage 2"
	save_to_mV_string_value	VOLT_2_value			"0"
	save_string_value	VOLT_3_title			"+3.3V"
	save_to_mV_string_value	VOLT_3_value			"`cat /tmp/snmp_sensors | grep 3VCC: | cut -d ' ' -f 2`"
	save_string_value	VOLT_4_title			"+5V"
	VOLTAGE5=`cat /tmp/snmp_sensors | grep in6: | cut -d ' ' -f 2 | tr -d '+' | tr -d '-'`
	STR_VOLTAGE5=`echo "scale=4; $VOLTAGE5*2" | bc`
	save_to_mV_string_value	VOLT_4_value			"`echo +$STR_VOLTAGE5`"
	save_string_value	VOLT_5_title			"+12V"
	VOLTAGE12=`cat /tmp/snmp_sensors | grep in1: | cut -d ' ' -f 2 | tr -d '+' | tr -d '-'`
	STR_VOLTAGE12=`echo "scale=4; $VOLTAGE12*2" | bc`
	save_to_mV_string_value	VOLT_5_value			"`echo +$STR_VOLTAGE12`"
	save_string_value	VOLT_6_title			"-5V"
	save_to_mV_string_value	VOLT_6_value			"-5"
	save_string_value	VOLT_7_title			"-12V"
	save_to_mV_string_value	VOLT_7_value			"-12"
}

#
# sensors_fusion
#
sensors_fusion()
{
	sensors | tr -s [:space:] > /tmp/snmp_sensors.$$
	mv /tmp/snmp_sensors.$$ /tmp/snmp_sensors

	#
	# Temperatures
	#
	save_string_value	TEMP_MOTHERBOARD_title	"Motherboard"
	save_integer_value	TEMP_MOTHERBOARD_value	$(cat /tmp/snmp_sensors | grep -A3 'max1619' | grep 'temp1:' | cut -d ' ' -f 2 | cut -d. -f1 | tr -d [+\uffffC])
	save_string_value	TEMP_CPU_title				"CPU"
	save_integer_value	TEMP_CPU_value			$(cat /tmp/snmp_sensors | grep -A3 'max1619' | grep 'temp2:' | cut -d ' ' -f 2 | cut -d. -f1 | tr -d [+\uffffC])
	save_string_value	TEMP_CHIPSET_title			"Chipset"
	save_integer_value	TEMP_CHIPSET_value		0
}

ipmi_get_temperature()
{
	FIELD="$1"
	PREFIX="$2"
	TITLE="$3"

	save_string_value ${PREFIX}_title "${TITLE}"
	TEMR=$( cat /tmp/ipmitool.out | grep -E "^${FIELD}" | cut -d'|' -f2 | cut -d"." -f1 )
	if [ "${TEMR}" != "na" ] ; then
		save_integer_value ${PREFIX}_value ${TEMR}
	else
		save_integer_value ${PREFIX}_value 0
	fi
}

ipmi_get_voltage()
{
	FIELD="$1"
	PREFIX="$2"
	TITLE="$3"

	save_string_value ${PREFIX}_title "${TITLE}"
	VOLT=$( cat /tmp/ipmitool.out | grep -E "^${FIELD}" | cut -d"|" -f2)
	if [ "${VOLT}" != "na" ] ; then
		save_to_mV_string_value	${PREFIX}_value	"${VOLT}"
	else
		save_to_mV_string_value	${PREFIX}_value	"0"
	fi
}

ipmi_get_fan()
{
	FIELD="$1"
	PREFIX="$2"
	TITLE="$3"

	save_string_value ${PREFIX}_title "${TITLE}"
	FAN=$( cat /tmp/ipmitool.out | grep -E "^${FIELD}" | cut -d'|' -f2 | cut -d"." -f1 )
	if [ "${FAN}" != "na" ] ; then
		save_integer_value ${PREFIX}_value ${FAN}
	else
		save_integer_value ${PREFIX}_value 0
	fi
}


#
# X10SLX-F motherboard sensors
# Modified from sensors_motherboard_model_SE7221
# by Angelo Arrifano <apires@doremilabs.com>
# on 16/01/2014
# - 22/01/2015: Added support for X10SLH-F
#  (ShowVault-3 / ShowVault-4 FAN Configuration Document V1.0)
#
sensors_motherboard_model_X10SL()
{
	VARIANT="$1"

	ipmitool -I open sensor | tr -s [:space:] > /tmp/ipmitool.$$
	mv /tmp/ipmitool.$$ /tmp/ipmitool.out

	#
	# Temperatures
	#
	ipmi_get_temperature 'System Temp'	'TEMP_MOTHERBOARD'	'Motherboard'
	ipmi_get_temperature 'CPU Temp'		'TEMP_CPU'		'CPU'
	ipmi_get_temperature 'PCH Temp'		'TEMP_CHIPSET'		'Chipset'

	#
	# Voltages
	#
	ipmi_get_voltage 'Vcpu'		'VOLT_1' 'Vcpu'
	ipmi_get_voltage 'VDIMM'	'VOLT_2' 'VDIMM'
	ipmi_get_voltage '12V'		'VOLT_3' '12V'
	ipmi_get_voltage '5VCC'		'VOLT_4' '5VCC'
	ipmi_get_voltage '3.3VCC'	'VOLT_5' '3.3VCC'
	ipmi_get_voltage 'VBAT'		'VOLT_6' 'VBAT'
	
	#
	# Fan speeds 
	#
	if [ "$VARIANT" == 'X' ]; then
		ipmi_get_fan 'FANA'		'FAN_4' 'CPU'
		ipmi_get_fan 'FAN1'		'FAN_5' 'Motherboard'
	else
		ipmi_get_fan 'FAN1'		'FAN_4' 'System Fan 1'
		ipmi_get_fan 'FAN2'		'FAN_5' 'System Fan 2'
		ipmi_get_fan 'FAN3'		'FAN_CPU' 'CPU'
	fi
}

sensors_get_temperature()
{
	local PREFIX=$1
	local TITLE=$2
	local CHIP="$3"
	local SENS="$4"

	save_string_value ${PREFIX}_title "${TITLE}"
	TEMP="$(/usr/bin/sensors ${CHIP} | grep "^${SENS}" | grep -Eo "[0-9]+\.[0-9]+" | cut -d"." -f1) | head -n 1"
	save_integer_value ${PREFIX}_value ${TEMP}
}

sensors_get_hdmi_boardd() 
{
  local TITLE=$1
  local PREFIX=`echo ${TITLE} | tr '[:lower:] ' '[:upper:]_'`
  local CHIP="$2"
  
  #
  #   HMDI Status
  #
  /doremi/bin/board.out --get-status-hdmi=${CHIP} | tr -s [:space:] > /tmp/snmp_hmdi_${CHIP}.$$
  mv /tmp/snmp_hmdi_${CHIP}.$$ /tmp/snmp_hmdi_${CHIP}
  
  hdmi=`cat /tmp/snmp_hmdi_${CHIP} | grep "Link:" | cut -d ' ' -f 3`
  if test "Unplugged" = "${hdmi}"; then  
   hdmi='0'
  else
   hdmi='1';
  fi
  
  hdcp=`cat /tmp/snmp_hmdi_${CHIP} | grep "Link:" | cut -d ' ' -f 3`
  if test "Secured" = "${hdcp}"; then  
   hdcp='1'
  else
   hdcp='0';
  fi
  
  v_mute=`cat /tmp/snmp_hmdi_${CHIP} | grep "Video Mute:" | cut -d ' ' -f 4`
  if test "None" = "${v_mute}"; then  
   v_mute='1'
  else
   v_mute='0';
  fi
  
  a_mute=`cat /tmp/snmp_hmdi_${CHIP} | grep "Audio Mute:" | cut -d ' ' -f 4`
  if test "None" = "${a_mute}"; then  
   a_mute='1'
  else
   a_mute='0';
  fi  
  edid=`/doremi/bin/board.out --get-edid-hdmi ${CHIP} | awk '{if(NF<18) print "00"; else { for (i=2; i<=17; i++) printf "%s", $i; printf ""; }}'`
  
  
  save_integer_value ${PREFIX} 1 
  save_string_value ${PREFIX}_description "${TITLE}"
  save_integer_value ${PREFIX}_valid ${v_mute}
  save_integer_value ${PREFIX}_connected ${hdmi}
  save_integer_value ${PREFIX}_audio ${a_mute}
  save_integer_value ${PREFIX}_hdcp ${hdcp}
  save_string_value ${PREFIX}_edid ${edid}
}


# NP4000 motherboard sensors
# by Angelo Arrifano <apires@doremilabs.com>
# on 25/09/2014
#
sensors_motherboard_model_np4000()
{
	#
	# Temperature
	#
	let TEMP=0
	if [ -x ${BOARD} ]; then
		TEMP="$(${BOARD} --get-status | grep "I/O board FPGA Temp" \
			| grep -Eo "[0-9]+$")"
		if [ -z "${TEMP}" ]; then
			let TEMP=0
		fi
	fi
	save_string_value	TEMP_CHIPSET_title		"Chipset"
	save_integer_value	TEMP_CHIPSET_value		${TEMP}

	#
	# FAN
	#
	let NR=1
	for VALUE in $(cat /sys/class/hwmon/hwmon?/device/fan1_input); do
		save_string_value	FAN_$[3+${NR}]_title		"Fan chassis ${NR}"
		save_integer_value	FAN_$[3+${NR}]_value		"${VALUE}"
		let NR=${NR}+1
	done
	
	#
	# HDMI
	#
	sensors_get_hdmi_boardd 'HDMI 1' 0 
	sensors_get_hdmi_boardd 'HDMI 2' 1 
}


# FUSION2 motherboard sensors
# by Angelo Arrifano <apires@doremilabs.com>
# on 14/02/2014
# ~~ Happy Valentines! ~~
#
sensors_motherboard_model_fusion2()
{
	#
	# Temperature
	#
	sensors_get_temperature 'TEMP_MOTHERBOARD' 'Motherboard' 'max1619-i2c-0-18' 'temp1'
	sensors_get_temperature 'TEMP_CPU'         'CPU'         'coretemp-isa-0000' 'Physical id 0'
}


sensors_83793()
{
	local CPUTEMP
	local MTBTEMP
	local NCPUT
	local FANVAL

	sensors | tr -s [:space:] > /tmp/snmp_sensors.$$
	mv /tmp/snmp_sensors.$$ /tmp/snmp_sensors

	#
	# Temperatures
	#
	CPUTEMP="`cat /tmp/snmp_sensors | grep 'CPU1 Temp:' | cut -d ' ' -f 3 | cut -d. -f1 | tr -d [+\uffffC]`"
	MTBTEMP="`cat /tmp/snmp_sensors | grep temp5: | cut -d ' ' -f 2 | cut -d. -f1 | tr -d [+\uffffC]`"
	NCPUT="`echo ${CPUTEMP} ${MTBTEMP} | awk '{ if ($1>0 && $2>0 && $1<($2+2)) { print $2+2 } else { print $1} }'`"
	save_string_value	TEMP_MOTHERBOARD_title	"Motherboard"
	save_integer_value	TEMP_MOTHERBOARD_value	${MTBTEMP}
	save_string_value	TEMP_CPU_title				"CPU"
	save_integer_value	TEMP_CPU_value			${NCPUT}
	save_string_value	TEMP_CHIPSET_title			"Chipset"
	save_integer_value	TEMP_CHIPSET_value		0
	
	#
	# Fan speeds
	#
	# Motherboard fan5 -> fan7
	# Motherboard fan1 -> fan2
	# Motherboard fan2 -> fan1
	# Motherboard fan3 -> fan3
	# Motherboard fan4 -> 
	FANVAL="`cat /tmp/snmp_sensors | grep fan2: | cut -d ' ' -f 2`"
	save_string_value	FAN_MOTHERBOARD_title		"Fan1"
	save_integer_value	FAN_MOTHERBOARD_value		"`adjust_fan_value ${FANVAL}`" 
	FANVAL="`cat /tmp/snmp_sensors | grep fan7: | cut -d ' ' -f 2`"
	save_string_value	FAN_CPU_title			"CPU Fan"
	save_integer_value	FAN_CPU_value			"`adjust_fan_value ${FANVAL}`" 
	FANVAL="`cat /tmp/snmp_sensors | grep fan1: | cut -d ' ' -f 2`"
	save_string_value	FAN_CHIPSET_title		"Fan2"
	save_integer_value	FAN_CHIPSET_value		"`adjust_fan_value ${FANVAL}`" 

	FANVAL="`cat /tmp/snmp_sensors | grep fan3: | cut -d ' ' -f 2`"
	save_string_value	FAN_4_title			"Fan3"
	save_integer_value	FAN_4_value			"`adjust_fan_value ${FANVAL}`" 
	FANVAL="`cat /tmp/snmp_sensors | grep fan4: | cut -d ' ' -f 2`"
	save_string_value	FAN_5_title			"Fan4"
	save_integer_value	FAN_5_value			"`adjust_fan_value ${FANVAL}`" 
	FANVAL="`cat /tmp/snmp_sensors | grep fan5: | cut -d ' ' -f 2`"
	save_string_value	FAN_6_title			"Fan5"
	save_integer_value	FAN_6_value			"`adjust_fan_value ${FANVAL}`" 
	
	#
	# Voltages
	#
	save_string_value	VOLT_1_title			"Voltage 1"
	save_to_mV_string_value	VOLT_1_value			"`cat /tmp/snmp_sensors | grep 'VCoreA:' | cut -d ' ' -f 2`"
	save_string_value	VOLT_2_title			"Voltage 2"
	save_to_mV_string_value	VOLT_2_value			"`cat /tmp/snmp_sensors | grep 'VCoreB:' | cut -d ' ' -f 2`"
	save_string_value	VOLT_3_title			"+3.3V"
	save_to_mV_string_value	VOLT_3_value			"`cat /tmp/snmp_sensors | grep -- +3.3V: | cut -d ' ' -f 2`"
	save_string_value	VOLT_4_title			"+5V"
	save_to_mV_string_value	VOLT_4_value			"`cat /tmp/snmp_sensors | grep -- +5V: | cut -d ' ' -f 2`"
	save_string_value	VOLT_5_title			"+12V"
	save_to_mV_string_value	VOLT_5_value			"`cat /tmp/snmp_sensors | grep -- +12V: | cut -d ' ' -f 2`"
	save_string_value	VOLT_6_title			"-5V"
	save_to_mV_string_value	VOLT_6_value			"-5"
	save_string_value	VOLT_7_title			"-12V"
	save_to_mV_string_value	VOLT_7_value			"-12"
}

sensors_get_fpga_audio() 
{
  /doremi/sbin/board.out --status-fpga | tr -s [:space:] > /tmp/snmp_fpga.$$
  mv /tmp/snmp_fpga.$$ /tmp/snmp_fpga
  
  audio=`cat /tmp/snmp_fpga | grep audio: | cut -d ' ' -f 2`
  if test "group" == "${audio}"; then  
   echo -n 1
  else
   echo -n 0
  fi    
}

sensors_get_hdmi() 
{
  local TITLE=$1
  local PREFIX=`echo ${TITLE} | tr '[:lower:] ' '[:upper:]_'`
  local CHIP="$2"
  
  #
  #   HMDI Status
  #
  /doremi/sbin/board.out --status-hdmi=${CHIP} | tr -s [:space:] > /tmp/snmp_hmdi_${CHIP}.$$
  mv /tmp/snmp_hmdi_${CHIP}.$$ /tmp/snmp_hmdi_${CHIP}
  
  hdmi=`cat /tmp/snmp_hmdi_${CHIP} | grep "Hot Plug:" | cut -d ' ' -f 4`
  if test "disconnected" = "${hdmi}"; then  
   hdmi='0'
  else
   hdmi='1';
  fi
  
  hdcp=`cat /tmp/snmp_hmdi_${CHIP} | grep "Link Prot. lvl:" | cut -d ' ' -f 5`
  if test "Secure" = "${hdcp}"; then  
   hdcp='1'
  else
   hdcp='0';
  fi  
  
  save_integer_value ${PREFIX} 1 
  save_string_value ${PREFIX}_description "${TITLE}"
  save_integer_value ${PREFIX}_valid 1
  save_integer_value ${PREFIX}_connected ${hdmi}
  save_integer_value ${PREFIX}_audio $(sensors_get_fpga_audio)
  save_integer_value ${PREFIX}_hdcp ${hdcp}
}

sensors_get_sdi()
{ 
  local TITLE=$1
  local PREFIX=`echo ${TITLE} | tr '[:lower:] ' '[:upper:]_'`
  
  #
  #   SDI Status
  #
  save_integer_value ${PREFIX} 1   
  save_string_value ${PREFIX}_description "${TITLE}"
  save_integer_value ${PREFIX}_valid 1  
  save_integer_value ${PREFIX}_audio $(sensors_get_fpga_audio)
}

sensors_motherboard_model_coreav() 
{
  sensors | tr -s [:space:] > /tmp/snmp_sensors.$$
  mv /tmp/snmp_sensors.$$ /tmp/snmp_sensors


  #
  # Temperature
  #
  sensors_get_temperature 'TEMP_MOTHERBOARD' 'Motherboard' 'lm63-i2c-1-4c' 'temp1'
  sensors_get_temperature 'TEMP_CPU'         'CPU'         'max1619-i2c-1-18' 'temp1'
  sensors_get_temperature 'TEMP_CHIPSET'     'Chipset'     'coretemp-isa-0000' 'Core 0'  
  
  sensors_get_hdmi 'hdmi 1' 0 
  sensors_get_hdmi 'hdmi 2' 1
  
  sensors_get_sdi 'SDI 1'
}

mkdir -p "$SNMP_PATH"


set_string_value "$SNMP_PATH/$DOREMI_OID.1.3.8.0" "`date`"

#
# Display KDM in use and its expiration time
# (Disabled: List all assets)
#
if [ -f /doremi/bin/drmsnmp_cpl.out ]; then
/doremi/bin/drmsnmp_cpl.out -c
fi

#
# Hardware Sensors
# 
motherboard_model
case "$?" in
	$MOTHERBOARD_MODEL_D945GTP)
		sensors_motherboard_model_D945
		;;
	$MOTHERBOARD_MODEL_SE7221x)
		sensors_motherboard_model_SE7221
		;;
	$MOTHERBOARD_MODEL_S3000AH)
		sensors_motherboard_model_S3000
		;;
	$MOTHERBOARD_MODEL_S3210)
		sensors_motherboard_model_SE7221
		;;
	$MOTHERBOARD_MODEL_PDSM4)
		sensors_83793
		;;
	$MOTHERBOARD_MODEL_X7SB4)
		sensors_83793
		;;
	$MOTHERBOARD_MODEL_X7SLA)
		sensors_83627ehf
		;;
	$MOTHERBOARD_MODEL_X7SPA)
		sensors_83627ehf_x7spa
		;;
	$MOTHERBOARD_MODEL_FUSION)
		sensors_fusion
		;;
	$MOTHERBOARD_MODEL_X10SLX)
		sensors_motherboard_model_X10SL 'X'
		;;
	$MOTHERBOARD_MODEL_X10SLH)
		sensors_motherboard_model_X10SL 'H'
		;;
	$MOTHERBOARD_MODEL_FUSION2)
		sensors_motherboard_model_fusion2
		;;
	$MOTHERBOARD_MODEL_NP4000)
		sensors_motherboard_model_fusion2
		sensors_motherboard_model_np4000
		;;
	$MOTHERBOARD_MODEL_COREAV)
		sensors_motherboard_model_coreav
		;;
	*)
		# try to use IPMI for unknown boards
		sensors_motherboard_model_SE7221
		;;
esac

#
# ECC errors counts
#
if [ -f /proc/ecc ] ; then
	ecc=`cat /proc/ecc`
	echo $ecc | cut -d ' ' -f 1 > $SNMP_PATH/DIMM_status
	echo $ecc | cut -d ' ' -f 2 > $SNMP_PATH/DIMM_corrected_errors
	echo $ecc | cut -d ' ' -f 3 > $SNMP_PATH/DIMM_uncorrected_errors
	if [ "$(cat $SNMP_PATH/DIMM_status)" != "ok" ]; then
		if [ ! -e $ALARM_PATH/DIMM_error ]; then
			log_alarm "DIMM_error alarm raised"
		fi
		touch $ALARM_PATH/DIMM_error
	else
		if [ -e $ALARM_PATH/DIMM_error ]; then
			log_alarm "DIMM_error alarm cleared"
			rm -f $ALARM_PATH/DIMM_error;
		fi
	fi
fi

if test -x /doremi/sbin/harddiskstatus.sh; then
  /doremi/sbin/harddiskstatus.sh sense-su
fi

#######################################
#
#             FOR DCP2000 & IMSx
#
#######################################


if [ "$v_platform" != "le100" ] && [ "$v_platform" != "np100" ] 
then 
#
# Dolphin
#
if [ -r /proc/dolphin0 ]; then
	cat /proc/dolphin0 > /tmp/snmp_dolphin
elif [ -r /proc/dolphin ]; then
	cat /proc/dolphin > /tmp/snmp_dolphin
fi 

if test -r /tmp/snmp_dolphin; then
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.4.1.1.2.1" "`cat /tmp/snmp_dolphin | grep -i 'decoder errors'  | tr -s [:space:] | cut -d ' ' -f 3`"
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.4.1.1.3.1" "`cat /tmp/snmp_dolphin | grep -i 'frame underflow' | tr -s [:space:] | cut -d ' ' -f 3`"
else
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.4.1.1.2.1" "0"
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.4.1.1.3.1" "0"
fi

#
# SecurityManager
#
if [ -x $SBCSETUP ] && board_tls_support; then
	if ! $SBCSETUP -a - 2>/dev/null; then
		update_alarm_state "SM_NETWORK" "error"
	else
		update_alarm_state "SM_NETWORK" "normal"
		$SBCSETUP -a --get-temperature > /tmp/temperature.$$
		mv /tmp/temperature.$$ /tmp/temperature
		cat /tmp/temperature | grep Clock | cut -d ' ' -f 3 | cut -d '.' -f 1 > $SNMP_PATH/TEMP_MD_RTC_value
		#check Tamper chipset temperature OID before uncommenting
		cat /tmp/temperature | grep "Chipset 1" > /dev/null 2>&1
		if [ $? == 0 ]; then
			cat /tmp/temperature | grep 'Chipset 1' | cut -d ' ' -f 4 > $SNMP_PATH/TEMP_MD_FPGA1_value
		fi
		cat /tmp/temperature | grep "Chipset 2" > /dev/null 2>&1
		if [ $? == 0 ]; then
			cat /tmp/temperature | grep 'Chipset 2' | cut -d ' ' -f 4 > $SNMP_PATH/TEMP_MD_FPGA2_value
		fi
		val=$($SBCSETUP -a --get-version | grep ProductName | cut -d ' ' -f 4)
		test -d "$val" && echo $val > $SNMP_PATH/SM_product_name
	fi
fi
if [ -x $MCSETUP ] && [ -e "/proc/dolphin0" ]; then
	if ! $MCSETUP --get-status > /dev/null 2>&1; then
		update_alarm_state "SM_MCORE" "error"
	else
		update_alarm_state "SM_MCORE" "normal"
	fi
else
	update_alarm_state "SM_MCORE" "normal"
fi

# write bootup default value
test -e $SNMP_PATH/TEMP_MD_RTC_title || echo "MD RTC" > $SNMP_PATH/TEMP_MD_RTC_title
test -e $SNMP_PATH/TEMP_MD_FPGA1_title || echo "MD FPGA #1" > $SNMP_PATH/TEMP_MD_FPGA1_title
test -e $SNMP_PATH/TEMP_MD_FPGA2_title || echo "MD FPGA #2" > $SNMP_PATH/TEMP_MD_FPGA2_title
test -e $SNMP_PATH/SM_product_name || echo "" > $SNMP_PATH/SM_product_name

if board_tls_support; then
	res=$($SBCSETUP -a --get-single-version 2>/dev/null) && echo "$res" > $SNMP_PATH/SM_software_version
elif [ -e "/proc/dolphin0" ]; then
	res=$($SBCSETUP --get-pci-version 2>/dev/null) && echo "$res" > $SNMP_PATH/SM_software_version
fi
test -r "$SNMP_PATH/SM_software_version" || echo "" > "$SNMP_PATH/SM_software_version"

### service door / marriage related OIDs ###
refreshed=0
# defaults
test -e "$SNMP_PATH/$DOREMI_OID.1.3.15.4.1.0" || set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.4.1.0" 1
test -e "$SNMP_PATH/$DOREMI_OID.1.3.15.1.2.0" || set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.2.0" 1
test -e "$SNMP_PATH/$DOREMI_OID.1.3.15.1.3.0" || set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.3.0" 1
test -e "$SNMP_PATH/$DOREMI_OID.1.3.15.3.1.0" || set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.1.0" 1
test -e "$SNMP_PATH/$DOREMI_OID.1.3.15.2.1.0" || set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.2.1.0" 1
test -e "$SNMP_PATH/$DOREMI_OID.1.3.15.1.4.0" || set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.4.0" 1
test -e "$SNMP_PATH/$DOREMI_OID.1.3.15.3.2.0" || set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.2.0" 1
if [ -e /proc/dolphin0 ]; then
	if board_full_cap_support; then
		$SBCSETUP -a --get-status > /tmp/snmp/md_status.txt 2>/dev/null
	fi
	if board_type "clarity" || board_type "certainty" || board_type "fusion" || board_type "np4000"; then
		if [ -e /tmp/snmp/md_status.txt ]; then
			partial_blackout="`cat /tmp/snmp/md_status.txt | grep 'PartialBlackout ' | awk '{print $2}'`"
			if [ $? -eq 0 ]; then
				if [ "$partial_blackout" == "1" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.4.1.0" 3
				elif [ "$partial_blackout" == "0" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.4.1.0" 4
				else
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.4.1.0" 2
				fi
			else
				set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.4.1.0" 2
			fi
	
			physical_marriage="`cat /tmp/snmp/md_status.txt | grep 'PhysicalMarriage ' | awk '{print $2}'`"
			if [ $? -eq 0 ]; then
				if [ "$physical_marriage" == "1" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.2.0" 3
				elif [ "$physical_marriage" == "0" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.2.0" 4
				else
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.2.0" 2
				fi
			else
				set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.2.0" 2
			fi
				
			logical_marriage="`cat /tmp/snmp/md_status.txt | grep 'LogicalMarriage ' | awk '{print $2}'`"
			if [ $? -eq 0 ]; then
				if [ "$logical_marriage" == "1" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.3.0" 3
				elif [ "$logical_marriage" == "0" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.3.0" 4
				else
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.3.0" 2
				fi
			else
				set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.3.0" 2
			fi
	
			active_marriage="`cat /tmp/snmp/md_status.txt | grep 'ActiveMarriage ' | awk '{print $2}'`"
			if [ $? -eq 0 ]; then
				if [ "$active_marriage" == "1" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.1.0" 3
				elif [ "$active_marriage" == "0" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.1.0" 4
				else
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.1.0" 2
				fi
			else
				set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.1.0" 2
			fi
	
			val="`cat /tmp/snmp/md_status.txt | grep 'ServiceDoorOpened ' | awk '{print $2}'`"
			if [ $? -eq 0 ]; then
				if [ "$val" == "1" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.2.1.0" 3
				elif [ "$val" == "0" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.2.1.0" 4
				else
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.2.1.0" 2
				fi
			else
				set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.2.1.0" 2
			fi
	
			service_door="`cat /tmp/snmp/md_status.txt | grep 'ServiceDoorArmed ' | awk '{print $2}'`"
			if [ $? -eq 0 ]; then
				if [ "$service_door" == "1" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.4.0" 3
				elif [ "$service_door" == "0" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.4.0" 4
				else
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.4.0" 2
				fi
			else
				set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.4.0" 2
			fi
			
			security_lock="`cat /tmp/snmp/md_status.txt | grep 'SecurityLock ' | awk '{print $2}'`"
			if [ $? -eq 0 ]; then
				if [ "$security_lock" == "1" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.2.0" 3
				elif [ "$security_lock" == "0" ]; then
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.2.0" 4
				else
					set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.2.0" 2
				fi
			else
				set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.2.0" 2
			fi
			
			if [ "$service_door" == "1" ]; then
				service=3 # normal
			elif [ "$service_door" == "0" ]; then
				if [ "$partial_blackout" == "1" ]; then
					service=4 # warning
				else
					service=5 # error
				fi
			else
				service=1 # undefined
			fi
			echo -n $service > "$SNMP_PATH/md_security_service_door.txt"
			
			if [ "$active_marriage" == "1" ]; then
				marriage=3 # normal
			elif [ "$physical_marriage" == "1" ] && [ "$logical_marriage" == "1" ]; then
				marriage=4 # warning
			elif [ "$physical_marriage" == "0" ] || [ "$logical_marriage" == "0" ]; then
				if [ "$partial_blackout" == "1" ]; then
					marriage=4 # warning
				else
					marriage=5 # error
				fi
			else
				marriage=1 # undefined
			fi
			echo -n $marriage > "$SNMP_PATH/md_security_marriage.txt"
			
			if [ "$service" == "5" ] || [ "$marriage" == "5" ]; then
				clearance=5 # error
			else
				if [ "$security_lock" == "1" ]; then
					clearance=4 # warning
				elif [ "$service" == "4" ] || [ "$marriage" == "4" ]; then
					clearance=4 # warning
				elif [ "$security_lock" == "0" ]; then
					clearance=3 # normal
				else
					clearance=1 # undefined
				fi
			fi
			echo -n $clearance > "$SNMP_PATH/md_security_clearance.txt"
			
			grep BoardRevision /tmp/snmp/md_status.txt | awk '{print $2}' > /tmp/snmp/md_revision.txt
                        
			refreshed=1
		fi
		$MBCTL status > /tmp/snmp/md_ctl_status.txt 2>/dev/null
		if [ -e /tmp/snmp/md_ctl_status.txt ]; then
			echo -n "MD Tamper Vcci" > /tmp/snmp/VOLT_MD_VCCI_title
			if val=$(grep "TamperVcci" /tmp/snmp/md_ctl_status.txt); then
				val=$(echo -n $val | cut -d : -f 2 | cut -d ' ' -f 2)
				echo -n $val > /tmp/snmp/VOLT_MD_VCCI_value
			else
				echo -n "" > /tmp/snmp/VOLT_MD_VCCI_value
			fi
			#
			echo -n "MD Tamper Vbat" > /tmp/snmp/VOLT_MD_VBAT_title
			if val=$(grep "TamperVbat" /tmp/snmp/md_ctl_status.txt); then
				val=$(echo -n $val | cut -d : -f 2 | cut -d ' ' -f 2)
				echo -n $val > /tmp/snmp/VOLT_MD_VBAT_value
			else
				echo -n "" > /tmp/snmp/VOLT_MD_VBAT_value
			fi
			#
			echo -n "MD Tamper Vref" > /tmp/snmp/VOLT_MD_VREF_title
			if val=$(grep "TamperVref" /tmp/snmp/md_ctl_status.txt); then
				val=$(echo -n $val | cut -d : -f 2 | cut -d ' ' -f 2)
				echo -n $val > /tmp/snmp/VOLT_MD_VREF_value
			else
				echo -n "" > /tmp/snmp/VOLT_MD_VREF_value
			fi
			#
			echo -n "MD Tamper AD1" > /tmp/snmp/VOLT_MD_AD1_title
			if val=$(grep "TamperAD1Voltage" /tmp/snmp/md_ctl_status.txt); then
				val=$(echo -n $val | cut -d : -f 2 | cut -d ' ' -f 2)
				echo -n $val > /tmp/snmp/VOLT_MD_AD1_value
			else
				echo -n "" > /tmp/snmp/VOLT_MD_AD1_value
			fi
			#
			echo -n "MD Tamper AD2" > /tmp/snmp/VOLT_MD_AD2_title
			if val=$(grep "TamperAD2Voltage" /tmp/snmp/md_ctl_status.txt); then
				val=$(echo -n $val | cut -d : -f 2 | cut -d ' ' -f 2)
				echo -n $val > /tmp/snmp/VOLT_MD_AD2_value
			else
				echo -n "" > /tmp/snmp/VOLT_MD_AD2_value
			fi
			#
			echo -n "MD Tamper AD3" > /tmp/snmp/VOLT_MD_AD3_title
			if val=$(grep "TamperAD3Voltage" /tmp/snmp/md_ctl_status.txt); then
				val=$(echo -n $val | cut -d : -f 2 | cut -d ' ' -f 2)
				echo -n $val > /tmp/snmp/VOLT_MD_AD3_value
			else
				echo -n "" > /tmp/snmp/VOLT_MD_AD3_value
			fi
			#
			echo -n "MD Tamper AD4" > /tmp/snmp/VOLT_MD_AD4_title
			if val=$(grep "TamperAD4Voltage" /tmp/snmp/md_ctl_status.txt); then
				val=$(echo -n $val | cut -d : -f 2 | cut -d ' ' -f 2)
				echo -n $val > /tmp/snmp/VOLT_MD_AD4_value
			else
				echo -n "" > /tmp/snmp/VOLT_MD_AD4_value
			fi
			#
			echo -n "MD Tamper Temperature" > /tmp/snmp/TEMP_MD_TAMPER_title
			if val=$(grep "TamperTemperature" /tmp/snmp/md_ctl_status.txt); then
				val=$(echo -n $val | cut -d : -f 2 | cut -d ' ' -f 2)
				echo -n $val > /tmp/snmp/TEMP_MD_TAMPER_value
			else
				echo -n "" > /tmp/snmp/VOLT_MD_TAMPER_value
			fi
		fi
	else
		set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.4.1.0" 2
		set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.2.0" 2
		set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.3.0" 2
		set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.1.0" 2
		set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.2.1.0" 2
		set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.4.0" 2
		set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.2.0" 2
		echo -n 2 > "$SNMP_PATH/md_security_clearance.txt"
		echo -n 2 > "$SNMP_PATH/md_security_service_door.txt"
		echo -n 2 > "$SNMP_PATH/md_security_marriage.txt"
		refreshed=1
	fi
	if board_type "certainty"; then
		$MBCTL "g4kcrash" 2>/dev/null | awk '{print $2}' > /tmp/snmp/FPGA4K_decoder_crash.txt
	fi  
fi
if [ $refreshed -ne 1 ]; then
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.4.1.0" 1
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.2.0" 1
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.3.0" 1
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.1.0" 1
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.2.1.0" 1
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.1.4.0" 1
	set_integer_value "$SNMP_PATH/$DOREMI_OID.1.3.15.3.2.0" 1
	echo -n 1 > "$SNMP_PATH/md_security_clearance.txt"
	echo -n 1 > "$SNMP_PATH/md_security_service_door.txt"
	echo -n 1 > "$SNMP_PATH/md_security_marriage.txt"
fi

check_sm_status_alarms

# if DCP2000 or IMSx
fi 



