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