# Copyright 2016 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

description   "Report boot mode metrics"
author        "chromium-os-dev@chromium.org"

start on started system-services
stop on stopping system-services

# OK to fail. We'll get it next time.
oom score -100
task

script
  # Reads a boolean crossystem parameter and outputs a status value:
  #   0: parameter value is false
  #   1: parameter value is true
  #   2: failed to determine value
  get_crossystem_sample() {
    local param="$1"
    local value="$(crossystem "${param}")"
    case "${value}" in
      0|1)
        echo "${value}"
        ;;
      *)
        echo "2"
        ;;
    esac
  }

  # Report firmware write protect status.
  metrics_client -e Platform.BootMode.WriteProtectSwitch \
      $(get_crossystem_sample "wpsw_cur") 2
  # Report dev switch status.
  metrics_client -e Platform.BootMode.DevSwitch \
      $(get_crossystem_sample "devsw_boot") 2

  # Prints write protect status from flashrom to stdout:
  #   0: write protect is disabled
  #   1: write protect is enabled and range looks good
  #   2: write protect is enabled but range looks bad
  #   3: failed to determine status
  get_wp_status_sample() {
    local target="$1"
    local flashrom_output="$(flashrom --wp-status -p "${target}")"
    case "${flashrom_output}" in
      *"Protection mode: disabled"*)
        echo "0"
        ;;
      *"Protection mode: hardware"*)
        local range_len="$(echo "${flashrom_output}" |
            grep "Protection range:" |
            grep -o "length=0x[[:xdigit:]]\+")"
        if [ "$((${range_len#length=}))" -gt "0" ]; then
          echo "1"
        else
          echo "2"
        fi
        ;;
      *)
        echo "3"
        ;;
    esac
  }

  # Report main firmware write protect status.
  metrics_client -e Platform.BootMode.FirmwareWriteProtect.Main \
      $(get_wp_status_sample "internal") 3
  # Report EC firmware write protect status.
  metrics_client -e Platform.BootMode.FirmwareWriteProtect.EC \
      $(get_wp_status_sample "ec") 3
end script
