#!/bin/sh -xe
conf=${1}; shift
test=${1}
crasher=crasher
lkdtm=lkdtm
. "${conf}"
case "${test}" in
"KEXEC-L")
kexec -l /boot/vmlinuz --initrd=/boot/initrd \
--append="$(cat /proc/cmdline)"
sleep 10
kexec -e
;;
"MNS")
echo "Not implemented"
;;
"MNN")
echo "Not implemented"
;;
"MCS")
echo "Not implemented"
;;
"MCN")
echo "Not implemented"
;;
"MCF")
echo "Not implemented"
;;
"ACS")
echo c >/proc/sysrq-trigger
;;
"ACP")
# Panic test 0 in crasher module: panic()
insmod "${crasher}"/crasher.ko
echo 0 >/proc/crasher
;;
"ACB")
# Panic test 1 in crasher module: BUG()
insmod "${crasher}"/crasher.ko
echo 1 >/proc/crasher
;;
"ACE")
# Panic test 2 in crasher module: panic_on_oops
insmod "${crasher}"/crasher.ko
echo 1 >/proc/sys/kernel/panic_on_oops
echo 2 >/proc/crasher
;;
"ACL")
# Panic test 3 in crasher module: hang w/double spinlock
# requires nmi_watchdog be enabled
insmod "${crasher}"/crasher.ko
echo 3 >/proc/crasher
;;
"KPIDB")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HARDWARE_ENTRY cpoint_type=BUG cpoint_count=05
;;
"KPIDE")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HARDWARE_ENTRY cpoint_type=EXCEPTION cpoint_count=05
;;
"KPIDL")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HARDWARE_ENTRY cpoint_type=LOOP cpoint_count=05
;;
"KPIDP")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HARDWARE_ENTRY cpoint_type=PANIC cpoint_count=05
;;
"KPIDO")
echo 1 >/proc/sys/kernel/panic_on_oops
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HARDWARE_ENTRY cpoint_type=OVERFLOW cpoint_count=10
;;
"KPIEB")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HW_IRQ_EN cpoint_type=BUG cpoint_count=10
;;
"KPIEE")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HW_IRQ_EN cpoint_type=EXCEPTION cpoint_count=10
;;
"KPIEL")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HW_IRQ_EN cpoint_type=LOOP cpoint_count=10
;;
"KPIEP")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HW_IRQ_EN cpoint_type=PANIC cpoint_count=10
;;
"KPIEO")
echo 1 >/proc/sys/kernel/panic_on_oops
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_HW_IRQ_EN cpoint_type=OVERFLOW cpoint_count=10
;;
"KPTEB")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_TASKLET_ENTRY cpoint_type=BUG cpoint_count=10
;;
"KPTEE")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_TASKLET_ENTRY cpoint_type=EXCEPTION cpoint_count=10
;;
"KPTEL")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_TASKLET_ENTRY cpoint_type=LOOP cpoint_count=10
;;
"KPTEP")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_TASKLET_ENTRY cpoint_type=PANIC cpoint_count=10
;;
"KPTEO")
echo 1 >/proc/sys/kernel/panic_on_oops
insmod "${lkdtm}"/lkdtm.ko cpoint_name=INT_TASKLET_ENTRY cpoint_type=OVERFLOW cpoint_count=10
;;
"KPBB")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=FS_DEVRW cpoint_type=BUG cpoint_count=10
;;
"KPBE")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=FS_DEVRW cpoint_type=EXCEPTION cpoint_count=10
;;
"KPBL")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=FS_DEVRW cpoint_type=LOOP cpoint_count=10
;;
"KPBP")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=FS_DEVRW cpoint_type=PANIC cpoint_count=10
;;
"KPBO")
echo 1 >/proc/sys/kernel/panic_on_oops
insmod "${lkdtm}"/lkdtm.ko cpoint_name=FS_DEVRW cpoint_type=OVERFLOW cpoint_count=10
;;
"KPMSB")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=MEM_SWAPOUT cpoint_type=BUG cpoint_count=10
;;
"KPMSE")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=MEM_SWAPOUT cpoint_type=EXCEPTION cpoint_count=10
;;
"KPMSL")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=MEM_SWAPOUT cpoint_type=LOOP cpoint_count=10
;;
"KPMSP")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=MEM_SWAPOUT cpoint_type=PANIC cpoint_count=10
;;
"KPMSO")
echo 1 >/proc/sys/kernel/panic_on_oops
insmod "${lkdtm}"/lkdtm.ko cpoint_name=MEM_SWAPOUT cpoint_type=OVERFLOW cpoint_count=10
;;
"KPTB")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=TIMERADD cpoint_type=BUG cpoint_count=10
;;
"KPTE")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=TIMERADD cpoint_type=EXCEPTION cpoint_count=10
;;
"KPTL")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=TIMERADD cpoint_type=LOOP cpoint_count=10
;;
"KPTP")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=TIMERADD cpoint_type=PANIC cpoint_count=10
;;
"KPTO")
echo 1 >/proc/sys/kernel/panic_on_oops
insmod "${lkdtm}"/lkdtm.ko cpoint_name=TIMERADD cpoint_type=OVERFLOW cpoint_count=10
;;
"KPSB")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=SCSI_DISPATCH_CMD cpoint_type=BUG cpoint_count=10
;;
"KPSE")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=SCSI_DISPATCH_CMD cpoint_type=EXCEPTION cpoint_count=10
;;
"KPSL")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=SCSI_DISPATCH_CMD cpoint_type=LOOP cpoint_count=10
;;
"KPSP")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=SCSI_DISPATCH_CMD cpoint_type=PANIC cpoint_count=10
;;
"KPSO")
echo 1 >/proc/sys/kernel/panic_on_oops
insmod "${lkdtm}"/lkdtm.ko cpoint_name=SCSI_DISPATCH_CMD cpoint_type=OVERFLOW cpoint_count=10
;;
"KPIB")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=IDE_CORE_CP cpoint_type=BUG cpoint_count=10
;;
"KPIE")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=IDE_CORE_CP cpoint_type=EXCEPTION cpoint_count=10
;;
"KPIL")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=IDE_CORE_CP cpoint_type=LOOP cpoint_count=10
;;
"KPIP")
insmod "${lkdtm}"/lkdtm.ko cpoint_name=IDE_CORE_CP cpoint_type=PANIC cpoint_count=10
;;
"KPIO")
echo 1 >/proc/sys/kernel/panic_on_oops
insmod "${lkdtm}"/lkdtm.ko cpoint_name=IDE_CORE_CP cpoint_type=OVERFLOW cpoint_count=01
;;
"KLEXT")
echo "ext3 ${EXT3_PART}" >/etc/kdump.conf
if [ "${FILTER}" -eq 1 ]; then
echo "core_collector makedumpfile ${MAKE_OPTIONS}" >>/etc/kdump.conf
fi
/etc/init.d/kdump restart
echo c >/proc/sysrq-trigger
;;
"KLLBL")
echo "ext3 LABEL=${EXT3_LABEL}" >/etc/kdump.conf
if [ "${FILTER}" -eq 1 ]; then
echo "core_collector makedumpfile ${MAKE_OPTIONS}" >>/etc/kdump.conf
fi
/etc/init.d/kdump restart
echo c >/proc/sysrq-trigger
;;
"KLUID")
echo "ext3 UUID=${EXT3_UID}" >/etc/kdump.conf
if [ "${FILTER}" -eq 1 ]; then
echo "core_collector makedumpfile ${MAKE_OPTIONS}" >>/etc/kdump.conf
fi
/etc/init.d/kdump restart
echo c >/proc/sysrq-trigger
;;
"KLRAW")
echo "raw ${RAW_PART}" >/etc/kdump.conf
if [ "${FILTER}" -eq 1 ]; then
echo "core_collector makedumpfile ${MAKE_OPTIONS}" >>/etc/kdump.conf
fi
/etc/init.d/kdump restart
echo c >/proc/sysrq-trigger
;;
"KNSCP")
echo "net ${SCP_PATH}" >/etc/kdump.conf
if [ "${LINK_DELAY}" ]; then
echo "link_delay ${LINK_DELAY}" >>/etc/kdump.conf
fi
expect -f ./ssh.tcl "/etc/init.d/kdump propagate" "${SCP_PASS}"
if [ "${FILTER}" -eq 1 ]; then
echo "core_collector makedumpfile ${MAKE_OPTIONS}" >>/etc/kdump.conf
fi
/etc/init.d/kdump restart
echo c >/proc/sysrq-trigger
;;
"KNNFS")
echo "net ${NFS_PATH}" >/etc/kdump.conf
if [ "${LINK_DELAY}" ]; then
echo "link_delay ${LINK_DELAY}" >>/etc/kdump.conf
fi
if [ "${FILTER}" -eq 1 ]; then
echo "core_collector makedumpfile ${MAKE_OPTIONS}" >>/etc/kdump.conf
fi
/etc/init.d/kdump restart
echo c >/proc/sysrq-trigger
;;
"KDENB")
echo "net ${SCP_PATH}" >/etc/kdump.conf
expect -f ./ssh.tcl "/etc/init.d/kdump propagate" "${SCP_PASS}"
/etc/init.d/kdump restart
;;
*)
echo "Unknown test."
;;
esac
exit 0