1fa545987SSwarnendu-R-C#!/bin/bash 2fa545987SSwarnendu-R-C# 3fa545987SSwarnendu-R-C# config: 2 50 4fa545987SSwarnendu-R-C# @brief: Collect redundant OS information. 5fa545987SSwarnendu-R-C 6fa545987SSwarnendu-R-C# shellcheck disable=SC1091 7fa545987SSwarnendu-R-C. "$DREPORT_INCLUDE/functions" 8fa545987SSwarnendu-R-C 9fa545987SSwarnendu-R-Cdesc="Redundant firmware info" 10fa545987SSwarnendu-R-Cfile_name="redundant-os-release" 11fa545987SSwarnendu-R-C 12fa545987SSwarnendu-R-C# Declare necessary dbus interfaces 13fa545987SSwarnendu-R-Cdbus_object="xyz.openbmc_project.Software.BMC.Updater" 14fa545987SSwarnendu-R-Cdbus_tree_command="busctl tree" 15fa545987SSwarnendu-R-Cdbus_property_command="busctl get-property" 16fa545987SSwarnendu-R-Cdbus_object_priority_method="xyz.openbmc_project.Software.RedundancyPriority" 17fa545987SSwarnendu-R-Cdbus_object_priority="Priority" 18fa545987SSwarnendu-R-Cdbus_object_version_method="xyz.openbmc_project.Software.Version" 19fa545987SSwarnendu-R-Cdbus_object_version="Version" 20fa545987SSwarnendu-R-C 21fa545987SSwarnendu-R-C# Declare an array to store the results of dbus command 22fa545987SSwarnendu-R-Cread_array=() 23fa545987SSwarnendu-R-C 24fa545987SSwarnendu-R-CIFS=$'\n' read -r -d '' -a read_array < <( eval "$dbus_tree_command" "$dbus_object" && printf '\0' ) 25fa545987SSwarnendu-R-C 26fa545987SSwarnendu-R-Carray_length=${#read_array[@]} 27fa545987SSwarnendu-R-C 28fa545987SSwarnendu-R-C# If there is only one FW image on the BMC, return then and there 29fa545987SSwarnendu-R-Cif [ "$array_length" -lt 5 ]; then 30fa545987SSwarnendu-R-C return "$SUCCESS" 31fa545987SSwarnendu-R-Cfi 32fa545987SSwarnendu-R-C 33fa545987SSwarnendu-R-Cfirmware1=$(echo "${read_array[3]}" | xargs) 34fa545987SSwarnendu-R-Cfirmware2=$(echo "${read_array[4]}" | xargs) 35fa545987SSwarnendu-R-C 36fa545987SSwarnendu-R-Cif [ -n "$firmware1" ]; then 37fa545987SSwarnendu-R-C firmware1=${firmware1:3} 38fa545987SSwarnendu-R-Cfi 39fa545987SSwarnendu-R-C 40fa545987SSwarnendu-R-Cif [ -n "$firmware2" ]; then 41fa545987SSwarnendu-R-C firmware2=${firmware2:3} 42fa545987SSwarnendu-R-Cfi 43fa545987SSwarnendu-R-C 44fa545987SSwarnendu-R-Credundant_firmware="" 45fa545987SSwarnendu-R-Cdbus_command="$dbus_property_command $dbus_object $firmware1 $dbus_object_priority_method \ 46fa545987SSwarnendu-R-C $dbus_object_priority" 47fa545987SSwarnendu-R-C 48fa545987SSwarnendu-R-C# Get the priority of the image. 49fa545987SSwarnendu-R-C# The one with the highest prirority amongst the two is the backup one 50fa545987SSwarnendu-R-Cfirmware1_priority=$(eval "$dbus_command" | grep -w "1" | cut -d' ' -f 2) 51fa545987SSwarnendu-R-C 52fa545987SSwarnendu-R-Cif [ -n "$firmware1_priority" ]; then 53fa545987SSwarnendu-R-C dbus_command="$dbus_property_command $dbus_object $firmware1 $dbus_object_version_method \ 54fa545987SSwarnendu-R-C $dbus_object_version" 55fa545987SSwarnendu-R-C redundant_firmware=$(eval "$dbus_command" | cut -d' ' -f 2-) 56fa545987SSwarnendu-R-Celse 57fa545987SSwarnendu-R-C dbus_command="$dbus_property_command $dbus_object $firmware2 $dbus_object_priority_method \ 58fa545987SSwarnendu-R-C $dbus_object_priority" 59fa545987SSwarnendu-R-C firmware2_priority=$(eval "$dbus_command" | grep -w "1" | cut -d' ' -f 2) 60fa545987SSwarnendu-R-C if [ -n "$firmware2_priority" ]; then 61fa545987SSwarnendu-R-C dbus_command="$dbus_property_command $dbus_object $firmware2 $dbus_object_version_method \ 62fa545987SSwarnendu-R-C $dbus_object_version" 63fa545987SSwarnendu-R-C redundant_firmware=$(eval "$dbus_command" | cut -d' ' -f 2-) 64fa545987SSwarnendu-R-C fi 65fa545987SSwarnendu-R-Cfi 66fa545987SSwarnendu-R-C 67fa545987SSwarnendu-R-Cif [ -n "$redundant_firmware" ]; then 68fa545987SSwarnendu-R-C command="printf \"\nREDUNDANT_FW=%s\n\" \"\$redundant_firmware\"" 69fa545987SSwarnendu-R-C add_cmd_output "$command" "$file_name" "$desc" 70fa545987SSwarnendu-R-Celse 71*1019e7a7SAmithash Prasad log_warning "No redundant FW available" 72fa545987SSwarnendu-R-Cfi 73fa545987SSwarnendu-R-C 74