xref: /openbmc/ipmitool/contrib/bmc-snmp-proxy (revision c18ec02f3304ce2a889a50e378f07a4168af3884)
1*c18ec02fSPetter Reinholdtsen#!/bin/sh
2*c18ec02fSPetter Reinholdtsen#############################################################################
3*c18ec02fSPetter Reinholdtsen#
4*c18ec02fSPetter Reinholdtsen# bmc-snmp-proxy:	Set SNMP proxy to BMC (Baseboard Management Controller)
5*c18ec02fSPetter Reinholdtsen#
6*c18ec02fSPetter Reinholdtsen# version:	0.6
7*c18ec02fSPetter Reinholdtsen#
8*c18ec02fSPetter Reinholdtsen# Authors:	Charles Rose <charles_rose@dell.com>
9*c18ec02fSPetter Reinholdtsen#		Jordan Hargrave <jordan_hargrave@dell.com>
10*c18ec02fSPetter Reinholdtsen#
11*c18ec02fSPetter Reinholdtsen# Description:  Script to set snmp proxy to the BMC for certain OID
12*c18ec02fSPetter Reinholdtsen#		See here for details:
13*c18ec02fSPetter Reinholdtsen#		https://fedoraproject.org/wiki/Features/AgentFreeManagement
14*c18ec02fSPetter Reinholdtsen#
15*c18ec02fSPetter Reinholdtsen# Assumptions:  This script will work only when /etc/snmp/ is writable.
16*c18ec02fSPetter Reinholdtsen#
17*c18ec02fSPetter Reinholdtsen#############################################################################
18*c18ec02fSPetter Reinholdtsen# GLOBALS
19*c18ec02fSPetter Reinholdtsen#############################################################################
20*c18ec02fSPetter ReinholdtsenSYSCONF_DIR="/etc/sysconfig"
21*c18ec02fSPetter ReinholdtsenCONFIG="${SYSCONF_DIR}/bmc-snmp-proxy"
22*c18ec02fSPetter Reinholdtsen
23*c18ec02fSPetter ReinholdtsenSNMPD_LOCAL_CONF_DIR="/etc/snmp/bmc"
24*c18ec02fSPetter ReinholdtsenSNMPD_LOCAL_CONF="${SNMPD_LOCAL_CONF_DIR}/snmpd.local.conf"
25*c18ec02fSPetter ReinholdtsenTRAPD_LOCAL_CONF="${SNMPD_LOCAL_CONF_DIR}/snmptrapd.local.conf"
26*c18ec02fSPetter Reinholdtsen
27*c18ec02fSPetter ReinholdtsenTRAPD_CONF="/etc/snmp/snmptrapd.conf"
28*c18ec02fSPetter Reinholdtsen
29*c18ec02fSPetter ReinholdtsenLOCKFILE="/var/lock/subsys/bmc-snmp-proxy"
30*c18ec02fSPetter ReinholdtsenBMC_INFO="/var/run/bmc-info"
31*c18ec02fSPetter Reinholdtsen
32*c18ec02fSPetter ReinholdtsenIPMITOOL=`which ipmitool`
33*c18ec02fSPetter Reinholdtsen
34*c18ec02fSPetter Reinholdtsen#Default config
35*c18ec02fSPetter ReinholdtsenBMC_COMMUNITY="public"
36*c18ec02fSPetter ReinholdtsenBMC_OID=".1.3.6.1.4.1.674.10892.2"  # Dell iDRAC
37*c18ec02fSPetter ReinholdtsenTRAP_FORWARD="no"
38*c18ec02fSPetter ReinholdtsenRELOAD_SERVICES="yes"
39*c18ec02fSPetter Reinholdtsen
40*c18ec02fSPetter Reinholdtsen#############################################################################
41*c18ec02fSPetter Reinholdtsen
42*c18ec02fSPetter Reinholdtsen#TODO: Use inotify and daemonize when $BMC_INFO changes
43*c18ec02fSPetter Reinholdtsen
44*c18ec02fSPetter Reinholdtsen# source config
45*c18ec02fSPetter Reinholdtsen[ -r ${CONFIG} ] && . ${CONFIG}
46*c18ec02fSPetter Reinholdtsen
47*c18ec02fSPetter Reinholdtsen. gettext.sh
48*c18ec02fSPetter Reinholdtsen
49*c18ec02fSPetter ReinholdtsenSCRIPT_NAME=$(basename $0)
50*c18ec02fSPetter ReinholdtsenRETVAL=0
51*c18ec02fSPetter Reinholdtsen
52*c18ec02fSPetter Reinholdtsen# Check if bmc-info created by exchange-bmc-os-info
53*c18ec02fSPetter Reinholdtsenbmc_info_exists()
54*c18ec02fSPetter Reinholdtsen{
55*c18ec02fSPetter Reinholdtsen	if [ -r "${BMC_INFO}" ]; then
56*c18ec02fSPetter Reinholdtsen		. ${BMC_INFO}
57*c18ec02fSPetter Reinholdtsen	else
58*c18ec02fSPetter Reinholdtsen		RETVAL=2
59*c18ec02fSPetter Reinholdtsen	fi
60*c18ec02fSPetter Reinholdtsen	return $RETVAL
61*c18ec02fSPetter Reinholdtsen}
62*c18ec02fSPetter Reinholdtsen
63*c18ec02fSPetter Reinholdtsencheck_snmp()
64*c18ec02fSPetter Reinholdtsen{
65*c18ec02fSPetter Reinholdtsen	if [ ! -d /etc/snmp ] && [ ! -x /usr/sbin/snmpd ]; then
66*c18ec02fSPetter Reinholdtsen		RETVAL=12
67*c18ec02fSPetter Reinholdtsen	fi
68*c18ec02fSPetter Reinholdtsen	return $RETVAL
69*c18ec02fSPetter Reinholdtsen}
70*c18ec02fSPetter Reinholdtsen
71*c18ec02fSPetter Reinholdtsen#############################################################################
72*c18ec02fSPetter Reinholdtsen# configure SNMP proxy
73*c18ec02fSPetter Reinholdtsen#############################################################################
74*c18ec02fSPetter Reinholdtsenwrite_snmp_conf()
75*c18ec02fSPetter Reinholdtsen{
76*c18ec02fSPetter Reinholdtsen	# SNMPv3 security: bmcview, bmc_ctx, bmc_sec, bmc_grp, bmc_cmty
77*c18ec02fSPetter Reinholdtsen	printf "###############################################\n"
78*c18ec02fSPetter Reinholdtsen	printf "# Automatically created by %s #\n" "${SCRIPT_NAME}"
79*c18ec02fSPetter Reinholdtsen	printf "###############################################\n"
80*c18ec02fSPetter Reinholdtsen	printf "view bmcview included %s 80\n" "${BMC_OID}"
81*c18ec02fSPetter Reinholdtsen	printf "com2sec -Cn bmc_ctx bmc_sec default bmc_cmty\n"
82*c18ec02fSPetter Reinholdtsen	printf "group bmc_grp v1 bmc_sec\n"
83*c18ec02fSPetter Reinholdtsen	printf "access bmc_grp bmc_ctx any noauth exact bmcview none none\n"
84*c18ec02fSPetter Reinholdtsen	printf "proxy -Cn bmc_ctx -v 1 %s\n" "${PROXY_TOKEN}"
85*c18ec02fSPetter Reinholdtsen	printf "###############################################\n"
86*c18ec02fSPetter Reinholdtsen}
87*c18ec02fSPetter Reinholdtsen
88*c18ec02fSPetter Reinholdtsenvalid_ip()
89*c18ec02fSPetter Reinholdtsen{
90*c18ec02fSPetter Reinholdtsen        #Thanks to mkyong.com
91*c18ec02fSPetter Reinholdtsen        octet="([01]?[[:digit:]][[:digit:]]?|2[0-4][[:digit:]]|25[0-5])"
92*c18ec02fSPetter Reinholdtsen
93*c18ec02fSPetter Reinholdtsen        printf -- "%s" "${1}"| grep -Eq \
94*c18ec02fSPetter Reinholdtsen		"^${octet}\\.${octet}\\.${octet}\\.${octet}$"
95*c18ec02fSPetter Reinholdtsen        return $?
96*c18ec02fSPetter Reinholdtsen}
97*c18ec02fSPetter Reinholdtsen
98*c18ec02fSPetter Reinholdtsencheck_vars()
99*c18ec02fSPetter Reinholdtsen{
100*c18ec02fSPetter Reinholdtsen	[ -z ${BMC_COMMUNITY} ] && BMC_COMMUNITY="public"
101*c18ec02fSPetter Reinholdtsen	[ -z ${BMC_OID} ] && return 1
102*c18ec02fSPetter Reinholdtsen
103*c18ec02fSPetter Reinholdtsen	if [ -n "${BMC_IPv4}" ] && valid_ip ${BMC_IPv4}; then
104*c18ec02fSPetter Reinholdtsen		return 0
105*c18ec02fSPetter Reinholdtsen	else
106*c18ec02fSPetter Reinholdtsen		return 1
107*c18ec02fSPetter Reinholdtsen	fi
108*c18ec02fSPetter Reinholdtsen}
109*c18ec02fSPetter Reinholdtsen
110*c18ec02fSPetter Reinholdtsenset_snmp_proxy()
111*c18ec02fSPetter Reinholdtsen{
112*c18ec02fSPetter Reinholdtsen	if check_vars; then
113*c18ec02fSPetter Reinholdtsen		PROXY_TOKEN="-c ${BMC_COMMUNITY} ${BMC_IPv4} ${BMC_OID}"
114*c18ec02fSPetter Reinholdtsen
115*c18ec02fSPetter Reinholdtsen		if [ ! -d ${SNMPD_LOCAL_CONF_DIR} ] && \
116*c18ec02fSPetter Reinholdtsen			 	mkdir ${SNMPD_LOCAL_CONF_DIR}; then
117*c18ec02fSPetter Reinholdtsen			write_snmp_conf > ${SNMPD_LOCAL_CONF}
118*c18ec02fSPetter Reinholdtsen			[ $? -ne 0 ] && RETVAL=4
119*c18ec02fSPetter Reinholdtsen		fi
120*c18ec02fSPetter Reinholdtsen	else
121*c18ec02fSPetter Reinholdtsen		RETVAL=3
122*c18ec02fSPetter Reinholdtsen	fi
123*c18ec02fSPetter Reinholdtsen}
124*c18ec02fSPetter Reinholdtsen
125*c18ec02fSPetter Reinholdtsen
126*c18ec02fSPetter Reinholdtsenset_snmpd_conf_path()
127*c18ec02fSPetter Reinholdtsen{
128*c18ec02fSPetter Reinholdtsen	for SYSCONF in ${SYSCONF_DIR}/snmp*d;
129*c18ec02fSPetter Reinholdtsen	do
130*c18ec02fSPetter Reinholdtsen		if grep -q "${SNMPD_LOCAL_CONF_DIR}" "${SYSCONF}" > \
131*c18ec02fSPetter Reinholdtsen				 /dev/null 2>&1; then
132*c18ec02fSPetter Reinholdtsen			continue
133*c18ec02fSPetter Reinholdtsen		else
134*c18ec02fSPetter Reinholdtsen			printf "SNMPCONFPATH=%s\n" "${SNMPD_LOCAL_CONF_DIR}" \
135*c18ec02fSPetter Reinholdtsen				>> ${SYSCONF} || RETVAL=7
136*c18ec02fSPetter Reinholdtsen		fi
137*c18ec02fSPetter Reinholdtsen	done
138*c18ec02fSPetter Reinholdtsen	return $RETVAL
139*c18ec02fSPetter Reinholdtsen}
140*c18ec02fSPetter Reinholdtsen
141*c18ec02fSPetter Reinholdtsendisable_snmp_proxy()
142*c18ec02fSPetter Reinholdtsen{
143*c18ec02fSPetter Reinholdtsen	if [ -f ${SNMPD_LOCAL_CONF} ]; then
144*c18ec02fSPetter Reinholdtsen		rm -f ${SNMPD_LOCAL_CONF}
145*c18ec02fSPetter Reinholdtsen		[ $? -ne 0 ] && RETVAL=5
146*c18ec02fSPetter Reinholdtsen	fi
147*c18ec02fSPetter Reinholdtsen}
148*c18ec02fSPetter Reinholdtsen#############################################################################
149*c18ec02fSPetter Reinholdtsen# Trap Forwarding
150*c18ec02fSPetter Reinholdtsen#############################################################################
151*c18ec02fSPetter Reinholdtsen
152*c18ec02fSPetter Reinholdtsenpick_alert_dest()
153*c18ec02fSPetter Reinholdtsen{
154*c18ec02fSPetter Reinholdtsen	test_ip="$1"
155*c18ec02fSPetter Reinholdtsen	for ALERT_DEST in `seq 1 4`
156*c18ec02fSPetter Reinholdtsen	do
157*c18ec02fSPetter Reinholdtsen		temp_ip=$(${IPMITOOL} lan alert print ${CHANNEL} ${ALERT_DEST}\
158*c18ec02fSPetter Reinholdtsen			2>/dev/null| sed -n "s#^Alert IP Address.*: ##p")
159*c18ec02fSPetter Reinholdtsen
160*c18ec02fSPetter Reinholdtsen		[ "${temp_ip}" = "${test_ip}" ] && return 0
161*c18ec02fSPetter Reinholdtsen	done
162*c18ec02fSPetter Reinholdtsen	return 1
163*c18ec02fSPetter Reinholdtsen}
164*c18ec02fSPetter Reinholdtsen
165*c18ec02fSPetter Reinholdtsenset_alert_dest_ip()
166*c18ec02fSPetter Reinholdtsen{
167*c18ec02fSPetter Reinholdtsen	${IPMITOOL} lan alert set ${CHANNEL} ${ALERT_DEST} ipaddr ${1} \
168*c18ec02fSPetter Reinholdtsen		retry 4 type pet >/dev/null 2>&1
169*c18ec02fSPetter Reinholdtsen	[ $? -ne 0 ] && RETVAL=8
170*c18ec02fSPetter Reinholdtsen}
171*c18ec02fSPetter Reinholdtsen
172*c18ec02fSPetter Reinholdtsenbmc_alert_dest()
173*c18ec02fSPetter Reinholdtsen{
174*c18ec02fSPetter Reinholdtsen	# Pick the first active LAN channel
175*c18ec02fSPetter Reinholdtsen        for CHANNEL in `seq 1 14`
176*c18ec02fSPetter Reinholdtsen        do
177*c18ec02fSPetter Reinholdtsen                [ $(${IPMITOOL} -I open channel info ${CHANNEL} 2>/dev/null \
178*c18ec02fSPetter Reinholdtsen                        | grep -q "802\.3") ] || break
179*c18ec02fSPetter Reinholdtsen        done
180*c18ec02fSPetter Reinholdtsen
181*c18ec02fSPetter Reinholdtsen	# If TRAPD_IP is already set as an alert dest,
182*c18ec02fSPetter Reinholdtsen	if pick_alert_dest "${TRAPD_IP}"; then
183*c18ec02fSPetter Reinholdtsen		# reset: reset it if we are called with reset
184*c18ec02fSPetter Reinholdtsen		[ "${1}" = "reset" ] && \
185*c18ec02fSPetter Reinholdtsen			set_alert_dest_ip "0.0.0.0"
186*c18ec02fSPetter Reinholdtsen	# else, find the next free alert dest,
187*c18ec02fSPetter Reinholdtsen	elif pick_alert_dest "0.0.0.0"; then
188*c18ec02fSPetter Reinholdtsen		[ "${1}" = "reset" ] && \
189*c18ec02fSPetter Reinholdtsen			return $RETVAL
190*c18ec02fSPetter Reinholdtsen		# set: the TRAPD_IP
191*c18ec02fSPetter Reinholdtsen		set_alert_dest_ip "${TRAPD_IP}"
192*c18ec02fSPetter Reinholdtsen	else
193*c18ec02fSPetter Reinholdtsen		# No free alert destinations
194*c18ec02fSPetter Reinholdtsen		RETVAL=9
195*c18ec02fSPetter Reinholdtsen	fi
196*c18ec02fSPetter Reinholdtsen	return $RETVAL
197*c18ec02fSPetter Reinholdtsen}
198*c18ec02fSPetter Reinholdtsen
199*c18ec02fSPetter Reinholdtsenset_ipmi_alert()
200*c18ec02fSPetter Reinholdtsen{
201*c18ec02fSPetter Reinholdtsen	${IPMITOOL} lan set ${CHANNEL} alert "${1}" >/dev/null 2>&1
202*c18ec02fSPetter Reinholdtsen	[ $? -ne 0 ] && RETVAL=10
203*c18ec02fSPetter Reinholdtsen}
204*c18ec02fSPetter Reinholdtsen
205*c18ec02fSPetter Reinholdtsenget_host_ip()
206*c18ec02fSPetter Reinholdtsen{
207*c18ec02fSPetter Reinholdtsen	# Get host's IP that the BMC can reach.
208*c18ec02fSPetter Reinholdtsen	IFACE=$(/usr/sbin/ip -o -f inet address |awk '!/: lo/ {print $2}')
209*c18ec02fSPetter Reinholdtsen	for dev in ${IFACE}
210*c18ec02fSPetter Reinholdtsen	do
211*c18ec02fSPetter Reinholdtsen		ping -c 1 -I ${dev} ${BMC_IPv4} > /dev/null 2>&1
212*c18ec02fSPetter Reinholdtsen	done
213*c18ec02fSPetter Reinholdtsen}
214*c18ec02fSPetter Reinholdtsen
215*c18ec02fSPetter Reinholdtsenconfig_bmc_alert()
216*c18ec02fSPetter Reinholdtsen{
217*c18ec02fSPetter Reinholdtsen	# Get Host's IP that the BMC can send traps to
218*c18ec02fSPetter Reinholdtsen	TRAPD_IP=$(get_host_ip)
219*c18ec02fSPetter Reinholdtsen
220*c18ec02fSPetter Reinholdtsen	# Set Host's IP as the alert destination in the BMC
221*c18ec02fSPetter Reinholdtsen	valid_ip ${TRAPD_IP} && bmc_alert_dest "${ACTION}"
222*c18ec02fSPetter Reinholdtsen
223*c18ec02fSPetter Reinholdtsen	# Enable alerting on the LAN channel
224*c18ec02fSPetter Reinholdtsen	[ $RETVAL -eq 0 ] && set_ipmi_alert "${ACTION}"
225*c18ec02fSPetter Reinholdtsen}
226*c18ec02fSPetter Reinholdtsen
227*c18ec02fSPetter Reinholdtsenwrite_trapd_conf()
228*c18ec02fSPetter Reinholdtsen{
229*c18ec02fSPetter Reinholdtsen	printf "###############################################\n"
230*c18ec02fSPetter Reinholdtsen	printf "# Automatically created by %s #\n" "${SCRIPT_NAME}"
231*c18ec02fSPetter Reinholdtsen	printf "forward %s %s\n" "${BMC_OID}*" "${FORWARD_HOST}"
232*c18ec02fSPetter Reinholdtsen	printf "###############################################\n"
233*c18ec02fSPetter Reinholdtsen}
234*c18ec02fSPetter Reinholdtsen
235*c18ec02fSPetter Reinholdtsenconfig_trapd()
236*c18ec02fSPetter Reinholdtsen{
237*c18ec02fSPetter Reinholdtsen	# Proceed only if snmptrapd is available on the system
238*c18ec02fSPetter Reinholdtsen	if [ -f ${TRAPD_CONF} ]; then
239*c18ec02fSPetter Reinholdtsen		write_trapd_conf > ${TRAPD_LOCAL_CONF}
240*c18ec02fSPetter Reinholdtsen		[ $? -ne 0 ] && RETVAL=11
241*c18ec02fSPetter Reinholdtsen	else
242*c18ec02fSPetter Reinholdtsen		return 1
243*c18ec02fSPetter Reinholdtsen	fi
244*c18ec02fSPetter Reinholdtsen}
245*c18ec02fSPetter Reinholdtsen
246*c18ec02fSPetter Reinholdtsentrap_sink_exists()
247*c18ec02fSPetter Reinholdtsen{
248*c18ec02fSPetter Reinholdtsen	# TODO: We only set the first match. We should be able to set
249*c18ec02fSPetter Reinholdtsen	# multiple
250*c18ec02fSPetter Reinholdtsen	FORWARD_HOST=$(awk '/^trap.*sink/{print $2}; /^informsink/{print $2}' \
251*c18ec02fSPetter Reinholdtsen			/etc/snmp/snmpd*conf | head -1)
252*c18ec02fSPetter Reinholdtsen	if [ -z "${FORWARD_HOST}" ]; then
253*c18ec02fSPetter Reinholdtsen		# there is no trapsink setup.
254*c18ec02fSPetter Reinholdtsen		return 1
255*c18ec02fSPetter Reinholdtsen	else
256*c18ec02fSPetter Reinholdtsen		return 0
257*c18ec02fSPetter Reinholdtsen	fi
258*c18ec02fSPetter Reinholdtsen}
259*c18ec02fSPetter Reinholdtsen
260*c18ec02fSPetter Reinholdtsen# Forward SNMP traps from the BMC to trapsink.
261*c18ec02fSPetter Reinholdtsentrap_forward()
262*c18ec02fSPetter Reinholdtsen{
263*c18ec02fSPetter Reinholdtsen	NO_TRAP=0
264*c18ec02fSPetter Reinholdtsen	ACTION=${1} # set or reset
265*c18ec02fSPetter Reinholdtsen
266*c18ec02fSPetter Reinholdtsen	if [ "${ACTION}" = "set" ]; then
267*c18ec02fSPetter Reinholdtsen		# Get trapd config,
268*c18ec02fSPetter Reinholdtsen		if trap_sink_exists; then
269*c18ec02fSPetter Reinholdtsen			config_trapd && config_bmc_alert
270*c18ec02fSPetter Reinholdtsen		else
271*c18ec02fSPetter Reinholdtsen			# exit silently if there is no sink
272*c18ec02fSPetter Reinholdtsen			NO_TRAP=1
273*c18ec02fSPetter Reinholdtsen		fi
274*c18ec02fSPetter Reinholdtsen	else
275*c18ec02fSPetter Reinholdtsen		if [ -f ${TRAPD_LOCAL_CONF} ]; then
276*c18ec02fSPetter Reinholdtsen			rm -f ${TRAPD_LOCAL_CONF} >/dev/null 2>&1
277*c18ec02fSPetter Reinholdtsen		else
278*c18ec02fSPetter Reinholdtsen			NO_TRAP=1
279*c18ec02fSPetter Reinholdtsen		fi
280*c18ec02fSPetter Reinholdtsen	fi
281*c18ec02fSPetter Reinholdtsen}
282*c18ec02fSPetter Reinholdtsen
283*c18ec02fSPetter Reinholdtsen#############################################################################
284*c18ec02fSPetter Reinholdtsenservice_reload()
285*c18ec02fSPetter Reinholdtsen{
286*c18ec02fSPetter Reinholdtsen	#TODO: do this in systemd
287*c18ec02fSPetter Reinholdtsen	if [ ${RETVAL} -eq 0 ] && [ "${RELOAD_SERVICES}" = "yes" ]; then
288*c18ec02fSPetter Reinholdtsen		service $1 reload
289*c18ec02fSPetter Reinholdtsen		[ $? -ne 0 ] && RETVAL=6
290*c18ec02fSPetter Reinholdtsen	fi
291*c18ec02fSPetter Reinholdtsen	return
292*c18ec02fSPetter Reinholdtsen}
293*c18ec02fSPetter Reinholdtsen
294*c18ec02fSPetter Reinholdtsen#############################################################################
295*c18ec02fSPetter Reinholdtsenstart()
296*c18ec02fSPetter Reinholdtsen{
297*c18ec02fSPetter Reinholdtsen	if bmc_info_exists && check_snmp; then
298*c18ec02fSPetter Reinholdtsen		touch ${LOCKFILE}
299*c18ec02fSPetter Reinholdtsen		set_snmpd_conf_path && set_snmp_proxy
300*c18ec02fSPetter Reinholdtsen		[ $RETVAL -eq 0 ] && service_reload snmpd
301*c18ec02fSPetter Reinholdtsen
302*c18ec02fSPetter Reinholdtsen		if [ "${TRAP_FORWARD}" = "yes" ]; then
303*c18ec02fSPetter Reinholdtsen			trap_forward "set"
304*c18ec02fSPetter Reinholdtsen			[ $RETVAL -eq 0 ] && [ $NO_TRAP -eq 0 ] && \
305*c18ec02fSPetter Reinholdtsen				service_reload snmptrapd
306*c18ec02fSPetter Reinholdtsen		fi
307*c18ec02fSPetter Reinholdtsen	fi
308*c18ec02fSPetter Reinholdtsen}
309*c18ec02fSPetter Reinholdtsen
310*c18ec02fSPetter Reinholdtsen#############################################################################
311*c18ec02fSPetter Reinholdtsenstop()
312*c18ec02fSPetter Reinholdtsen{
313*c18ec02fSPetter Reinholdtsen	[ ! -f ${LOCKFILE} ] && return
314*c18ec02fSPetter Reinholdtsen	if bmc_info_exists && check_snmp; then
315*c18ec02fSPetter Reinholdtsen		disable_snmp_proxy
316*c18ec02fSPetter Reinholdtsen		[ $RETVAL -eq 0 ] && service_reload snmpd
317*c18ec02fSPetter Reinholdtsen
318*c18ec02fSPetter Reinholdtsen		if [ "${TRAP_FORWARD}" = "yes" ]; then
319*c18ec02fSPetter Reinholdtsen			trap_forward "reset"
320*c18ec02fSPetter Reinholdtsen			[ $RETVAL -eq 0 ] && [ $NO_TRAP -eq 0 ] && \
321*c18ec02fSPetter Reinholdtsen				service_reload snmptrapd
322*c18ec02fSPetter Reinholdtsen		fi
323*c18ec02fSPetter Reinholdtsen		rm -f ${LOCKFILE}
324*c18ec02fSPetter Reinholdtsen	fi
325*c18ec02fSPetter Reinholdtsen}
326*c18ec02fSPetter Reinholdtsen
327*c18ec02fSPetter Reinholdtsen#############################################################################
328*c18ec02fSPetter Reinholdtsenstatus()
329*c18ec02fSPetter Reinholdtsen{
330*c18ec02fSPetter Reinholdtsen	eval_gettext "${SCRIPT_NAME}: snmp proxy to BMC is "
331*c18ec02fSPetter Reinholdtsen	# Checking for lockfile is better.
332*c18ec02fSPetter Reinholdtsen	#if grep -q "^proxy" "${SNMPD_LOCAL_CONF}" > /dev/null 2>&1 ; then
333*c18ec02fSPetter Reinholdtsen	if [ -f ${LOCKFILE} ]; then
334*c18ec02fSPetter Reinholdtsen		eval_gettext "set"
335*c18ec02fSPetter Reinholdtsen	else
336*c18ec02fSPetter Reinholdtsen		eval_gettext "not set"
337*c18ec02fSPetter Reinholdtsen	fi
338*c18ec02fSPetter Reinholdtsen	echo
339*c18ec02fSPetter Reinholdtsen	RETVAL=0
340*c18ec02fSPetter Reinholdtsen}
341*c18ec02fSPetter Reinholdtsen
342*c18ec02fSPetter Reinholdtsen#############################################################################
343*c18ec02fSPetter Reinholdtsenusage()
344*c18ec02fSPetter Reinholdtsen{
345*c18ec02fSPetter Reinholdtsen	eval_gettext "Usage: $0 {start|stop|status}"; echo 1>&2
346*c18ec02fSPetter Reinholdtsen	RETVAL=1
347*c18ec02fSPetter Reinholdtsen}
348*c18ec02fSPetter Reinholdtsen
349*c18ec02fSPetter Reinholdtsen#############################################################################
350*c18ec02fSPetter Reinholdtsen# MAIN
351*c18ec02fSPetter Reinholdtsen#############################################################################
352*c18ec02fSPetter Reinholdtsencase "$1" in
353*c18ec02fSPetter Reinholdtsen	start) start ;;
354*c18ec02fSPetter Reinholdtsen	stop)  stop ;;
355*c18ec02fSPetter Reinholdtsen	status)	status ;;
356*c18ec02fSPetter Reinholdtsen	*) usage ;;
357*c18ec02fSPetter Reinholdtsenesac
358*c18ec02fSPetter Reinholdtsen
359*c18ec02fSPetter Reinholdtsencase "$RETVAL" in
360*c18ec02fSPetter Reinholdtsen	0|1) ;;
361*c18ec02fSPetter Reinholdtsen	2) eval_gettext "${SCRIPT_NAME}: failed to read ${BMC_INFO} " 1>&2 ;;
362*c18ec02fSPetter Reinholdtsen	3) eval_gettext "${SCRIPT_NAME}: failed to get proxy config." 1>&2 ;;
363*c18ec02fSPetter Reinholdtsen	4) eval_gettext "${SCRIPT_NAME}: failed to set ${SNMPD_LOCAL_CONF}." 1>&2 ;;
364*c18ec02fSPetter Reinholdtsen	5) eval_gettext "${SCRIPT_NAME}: failed to disable snmp proxy." 1>&2 ;;
365*c18ec02fSPetter Reinholdtsen	6) eval_gettext "${SCRIPT_NAME}: failed to reload snmpd." 1>&2 ;;
366*c18ec02fSPetter Reinholdtsen	7) eval_gettext "${SCRIPT_NAME}: failed to update ${SYSCONF}." 1>&2 ;;
367*c18ec02fSPetter Reinholdtsen	8) eval_gettext "${SCRIPT_NAME}: failed to set IPMI alert dest." 1>&2 ;;
368*c18ec02fSPetter Reinholdtsen	9) eval_gettext "${SCRIPT_NAME}: no free IPMI alert dest." 1>&2 ;;
369*c18ec02fSPetter Reinholdtsen	10) eval_gettext "${SCRIPT_NAME}: failed to set IPMI PEF." 1>&2 ;;
370*c18ec02fSPetter Reinholdtsen	11) eval_gettext "${SCRIPT_NAME}: failed to write snmptrapd.conf." 1>&2 ;;
371*c18ec02fSPetter Reinholdtsen	12) eval_gettext "${SCRIPT_NAME}: snmpd not found." 1>&2 ;;
372*c18ec02fSPetter Reinholdtsen	*) eval_gettext "${SCRIPT_NAME}: unknown error." 1>&2 ;;
373*c18ec02fSPetter Reinholdtsenesac
374*c18ec02fSPetter Reinholdtsen
375*c18ec02fSPetter Reinholdtsenif [ ${RETVAL} -gt 1 ]; then
376*c18ec02fSPetter Reinholdtsen        eval_gettext " Return code: ${RETVAL}"; echo
377*c18ec02fSPetter Reinholdtsenfi
378*c18ec02fSPetter Reinholdtsenexit ${RETVAL}
379*c18ec02fSPetter Reinholdtsen#############################################################################
380*c18ec02fSPetter Reinholdtsen# end of file
381*c18ec02fSPetter Reinholdtsen#############################################################################
382