#!/bin/sh
#
# Go to MALF state (CAP_SYS_BOOT required)
#
# Arg1: reason (SECURITY | SOFTWARE | HARDWARE)
#
# Arg2: component (if any)
#
# Arg3-n: details (if any)
#


if [ -f /var/nomalf ] &&  [ -x /usr/sbin/rdc_cert_verify ]; then
    exitval=0
    /usr/sbin/rdc_cert_verify > /dev/null || exitval=$?
    if [ $exitval -eq 0 ]; then
       echo "MALF disabled"
       exit 0
    fi
fi

if [ "$1_" = "SECURITY_" ] || [ "$1_" = "SOFTWARE_" ]  || [ "$1_" = "HARDWARE_" ]; then

  let "CAP_SYS_BOOT = 1 << 22"
  caps=0x`cat /proc/self/status | grep CapEff | cut -f2 | cut -b9-16`
  let "caps &= $CAP_SYS_BOOT"
  if [ "x$caps" != "x$CAP_SYS_BOOT" ]; then
     echo "With your capabilities we cannot go to MALF state"
     exit 1
  fi

  if [ ! -f /var/malf -o "$1_" = "SECURITY_" ]; then
    echo "$0: Entering MALF state $*"
    echo "$*"  > /var/malf
    sync
    /sbin/dsmetool -b
    # DSME might not  be running...
    sleep 20
    /sbin/reboot -f
  else
    echo -n "$0: already in MALF state: "
    cat /var/malf
  fi
else
  echo "$0: what do you mean"
fi
