xref: /openbmc/phosphor-debug-collector/tools/dreport.d/plugins.d/redundantosrelease (revision fa5459871335906fc1cd21037ac74aca155a991d)
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