165d15fb3SDhruvaraj Subhashchandran#!/bin/bash
265d15fb3SDhruvaraj Subhashchandran#
365d15fb3SDhruvaraj Subhashchandran#Header for BMC DUMP
465d15fb3SDhruvaraj Subhashchandran#This script will create header file only for IBM systems.
565d15fb3SDhruvaraj Subhashchandran#This script will generate generic IBM dump header format.
665d15fb3SDhruvaraj Subhashchandran#
765d15fb3SDhruvaraj Subhashchandran#Note: The dump header will be imposed on the dump file i.e
865d15fb3SDhruvaraj Subhashchandran#<dump name>.tar.xz/gz only on IBM specific systems, user needs to
965d15fb3SDhruvaraj Subhashchandran#separate out the header before extracting the dump.
1065d15fb3SDhruvaraj Subhashchandran#
1165d15fb3SDhruvaraj Subhashchandran
1265d15fb3SDhruvaraj Subhashchandran#Constants
1365d15fb3SDhruvaraj Subhashchandrandeclare -rx DUMP_HEADER_ENTRY_SIZE='516'
1465d15fb3SDhruvaraj Subhashchandrandeclare -rx SIZE_4='4'
1565d15fb3SDhruvaraj Subhashchandrandeclare -rx SIZE_8='8'
1665d15fb3SDhruvaraj Subhashchandrandeclare -rx SIZE_12='12'
1765d15fb3SDhruvaraj Subhashchandrandeclare -rx SIZE_32='32'
1865d15fb3SDhruvaraj Subhashchandran#Dump Summary size without header
1965d15fb3SDhruvaraj Subhashchandrandeclare -rx DUMP_SUMMARY_SIZE='1024'
2065d15fb3SDhruvaraj Subhashchandrandeclare -rx HW_DUMP='00'
2165d15fb3SDhruvaraj Subhashchandrandeclare -rx HB_DUMP='20'
2265d15fb3SDhruvaraj Subhashchandrandeclare -rx SBE_DUMP='30'
2365d15fb3SDhruvaraj Subhashchandrandeclare -rx OP_DUMP="opdump"
2465d15fb3SDhruvaraj Subhashchandrandeclare -rx INVENTORY_MANAGER='xyz.openbmc_project.Inventory.Manager'
2565d15fb3SDhruvaraj Subhashchandrandeclare -rx INVENTORY_PATH='/xyz/openbmc_project/inventory/system'
2665d15fb3SDhruvaraj Subhashchandrandeclare -rx INVENTORY_ASSET_INT='xyz.openbmc_project.Inventory.Decorator.Asset'
2765d15fb3SDhruvaraj Subhashchandrandeclare -rx INVENTORY_BMC_BOARD='/xyz/openbmc_project/inventory/system/chassis/motherboard'
2865d15fb3SDhruvaraj Subhashchandrandeclare -rx PHOSPHOR_LOGGING='xyz.openbmc_project.Logging'
2965d15fb3SDhruvaraj Subhashchandrandeclare -rx PEL_ENTRY='org.open_power.Logging.PEL.Entry'
3065d15fb3SDhruvaraj Subhashchandrandeclare -rx PEL_ID_PROP='PlatformLogID'
3165d15fb3SDhruvaraj Subhashchandran
3265d15fb3SDhruvaraj Subhashchandran#Variables
3365d15fb3SDhruvaraj Subhashchandrandeclare -x modelNo
3465d15fb3SDhruvaraj SubhashchandranmodelNo=$(busctl get-property $INVENTORY_MANAGER $INVENTORY_PATH \
3565d15fb3SDhruvaraj Subhashchandran    $INVENTORY_ASSET_INT Model | cut -d " " -f 2 | sed "s/^\(\"\)\(.*\)\1\$/\2/g")
3665d15fb3SDhruvaraj Subhashchandran#Variables
3765d15fb3SDhruvaraj Subhashchandrandeclare -x serialNo
3865d15fb3SDhruvaraj SubhashchandranserialNo=$(busctl get-property $INVENTORY_MANAGER $INVENTORY_PATH \
3965d15fb3SDhruvaraj Subhashchandran    $INVENTORY_ASSET_INT SerialNumber | cut -d " " -f 2 | sed "s/^\(\"\)\(.*\)\1\$/\2/g")
4065d15fb3SDhruvaraj Subhashchandrandeclare -x dDay
4165d15fb3SDhruvaraj SubhashchandrandDay=$(date -d @"$EPOCHTIME" +'%Y%m%d%H%M%S')
4265d15fb3SDhruvaraj Subhashchandrandeclare -x bmcSerialNo
4365d15fb3SDhruvaraj SubhashchandranbmcSerialNo=$(busctl call $INVENTORY_MANAGER $INVENTORY_BMC_BOARD \
4465d15fb3SDhruvaraj Subhashchandran        org.freedesktop.DBus.Properties Get ss $INVENTORY_ASSET_INT \
4565d15fb3SDhruvaraj Subhashchandran    SerialNumber | cut -d " " -f 3 | sed "s/^\(\"\)\(.*\)\1\$/\2/g")
4665d15fb3SDhruvaraj Subhashchandran
4765d15fb3SDhruvaraj Subhashchandran#Function to add NULL
4865d15fb3SDhruvaraj Subhashchandranfunction add_null() {
4965d15fb3SDhruvaraj Subhashchandran    local a=$1
5065d15fb3SDhruvaraj Subhashchandran    printf '%*s' $a | tr ' ' "\0" >> $FILE
5165d15fb3SDhruvaraj Subhashchandran}
5265d15fb3SDhruvaraj Subhashchandran
5365d15fb3SDhruvaraj Subhashchandran#Function to is to convert the EPOCHTIME collected
5465d15fb3SDhruvaraj Subhashchandran#from dreport into hex values and write the same in
5565d15fb3SDhruvaraj Subhashchandran#header.
5665d15fb3SDhruvaraj Subhashchandranfunction dump_time() {
5765d15fb3SDhruvaraj Subhashchandran    x=${#dDay}
5865d15fb3SDhruvaraj Subhashchandran    msize=`expr $x / 2`
5965d15fb3SDhruvaraj Subhashchandran    msize=`expr $SIZE_8 - $msize`
6065d15fb3SDhruvaraj Subhashchandran    for ((i=0;i<$x;i+=2));
6165d15fb3SDhruvaraj Subhashchandran    do
6265d15fb3SDhruvaraj Subhashchandran        printf \\x${dDay:$i:2} >> $FILE
6365d15fb3SDhruvaraj Subhashchandran    done
6465d15fb3SDhruvaraj Subhashchandran    add_null $msize
6565d15fb3SDhruvaraj Subhashchandran}
6665d15fb3SDhruvaraj Subhashchandran
6765d15fb3SDhruvaraj Subhashchandran#Function to fetch the size of the dump
6865d15fb3SDhruvaraj Subhashchandranfunction dump_size() {
6965d15fb3SDhruvaraj Subhashchandran    #Adding 516 bytes as the total dump size is dump tar size
7065d15fb3SDhruvaraj Subhashchandran    #plus the dump header entry in this case
7165d15fb3SDhruvaraj Subhashchandran    #dump_header and dump_entry
7265d15fb3SDhruvaraj Subhashchandran    # shellcheck disable=SC2154 # name_dir comes from elsewhere.
7365d15fb3SDhruvaraj Subhashchandran    dumpSize=$(stat -c %s "$name_dir.bin")
7465d15fb3SDhruvaraj Subhashchandran    sizeDump=$(( dumpSize + DUMP_HEADER_ENTRY_SIZE ))
7565d15fb3SDhruvaraj Subhashchandran    printf -v hex "%x" "$sizeDump"
7665d15fb3SDhruvaraj Subhashchandran    x=${#hex}
7765d15fb3SDhruvaraj Subhashchandran    if [ $(($x % 2)) -eq 1 ]; then
7865d15fb3SDhruvaraj Subhashchandran        hex=0$hex
7965d15fb3SDhruvaraj Subhashchandran        x=${#hex}
8065d15fb3SDhruvaraj Subhashchandran    fi
8165d15fb3SDhruvaraj Subhashchandran    msize=`expr $x / 2`
8265d15fb3SDhruvaraj Subhashchandran    msize=`expr $SIZE_8 - $msize`
8365d15fb3SDhruvaraj Subhashchandran    add_null $msize
8465d15fb3SDhruvaraj Subhashchandran    for ((i=0;i<$x;i+=2));
8565d15fb3SDhruvaraj Subhashchandran    do
8665d15fb3SDhruvaraj Subhashchandran        printf \\x${hex:$i:2} >> $FILE
8765d15fb3SDhruvaraj Subhashchandran    done
8865d15fb3SDhruvaraj Subhashchandran}
8965d15fb3SDhruvaraj Subhashchandran
9065d15fb3SDhruvaraj Subhashchandran#Function to set dump id to 8 bytes format
9165d15fb3SDhruvaraj Subhashchandranfunction get_dump_id() {
9265d15fb3SDhruvaraj Subhashchandran    # shellcheck disable=SC2154
9365d15fb3SDhruvaraj Subhashchandran    size=${#dump_id}
9465d15fb3SDhruvaraj Subhashchandran    if [ "$1" == "$OP_DUMP" ]; then
9565d15fb3SDhruvaraj Subhashchandran        nulltoadd=$(( SIZE_4 - size / 2 - size % 2 ))
9665d15fb3SDhruvaraj Subhashchandran        add_null "$nulltoadd"
9765d15fb3SDhruvaraj Subhashchandran        for ((i=0;i<size;i+=2));
9865d15fb3SDhruvaraj Subhashchandran        do
9965d15fb3SDhruvaraj Subhashchandran            # shellcheck disable=SC2059
10065d15fb3SDhruvaraj Subhashchandran            printf "\\x${dump_id:$i:2}" >> "$FILE"
10165d15fb3SDhruvaraj Subhashchandran        done
10265d15fb3SDhruvaraj Subhashchandran    else
10365d15fb3SDhruvaraj Subhashchandran        nulltoadd=$(( SIZE_8 - size ))
10465d15fb3SDhruvaraj Subhashchandran        printf '%*s' "$nulltoadd" | tr ' ' "0" >> "$FILE"
10565d15fb3SDhruvaraj Subhashchandran        printf "%s" "$dump_id" >> "$FILE"
10665d15fb3SDhruvaraj Subhashchandran    fi
10765d15fb3SDhruvaraj Subhashchandran}
10865d15fb3SDhruvaraj Subhashchandran
10965d15fb3SDhruvaraj Subhashchandran#Function to get the bmc serial number
11065d15fb3SDhruvaraj Subhashchandranfunction getbmc_serial() {
11165d15fb3SDhruvaraj Subhashchandran    x=${#bmcSerialNo}
11265d15fb3SDhruvaraj Subhashchandran    nulltoadd=`expr $SIZE_12 - $x`
11365d15fb3SDhruvaraj Subhashchandran    printf $bmcSerialNo >> $FILE
11465d15fb3SDhruvaraj Subhashchandran    printf '%*s' $nulltoadd | tr ' ' "0" >> $FILE
11565d15fb3SDhruvaraj Subhashchandran}
11665d15fb3SDhruvaraj Subhashchandran
11765d15fb3SDhruvaraj Subhashchandran#Function to fetch the hostname
11865d15fb3SDhruvaraj Subhashchandranfunction system_name() {
11965d15fb3SDhruvaraj Subhashchandran    name=$(hostname)
12065d15fb3SDhruvaraj Subhashchandran    len=${#name}
12165d15fb3SDhruvaraj Subhashchandran    nulltoadd=$(( SIZE_32 - len ))
12265d15fb3SDhruvaraj Subhashchandran    printf "%s" "$name" >> "$FILE"
12365d15fb3SDhruvaraj Subhashchandran    add_null "$nulltoadd"
12465d15fb3SDhruvaraj Subhashchandran}
12565d15fb3SDhruvaraj Subhashchandran
12665d15fb3SDhruvaraj Subhashchandran#Function to get the errorlog ID
12765d15fb3SDhruvaraj Subhashchandranfunction get_eid() {
12865d15fb3SDhruvaraj Subhashchandran    # shellcheck disable=SC2154 # dump_type comes from elsewhere
12965d15fb3SDhruvaraj Subhashchandran    if [ "$dump_type" = "$OP_DUMP" ]; then
13065d15fb3SDhruvaraj Subhashchandran        # shellcheck disable=SC2154 # elog_id comes from elsewhere
13165d15fb3SDhruvaraj Subhashchandran        x=${#elog_id}
13265d15fb3SDhruvaraj Subhashchandran        if [ "$x" = 8 ]; then
13365d15fb3SDhruvaraj Subhashchandran            msize=$(( x / 2 ))
13465d15fb3SDhruvaraj Subhashchandran            msize=$(( SIZE_4 - msize ))
13565d15fb3SDhruvaraj Subhashchandran            for ((i=0;i<x;i+=2));
13665d15fb3SDhruvaraj Subhashchandran            do
13765d15fb3SDhruvaraj Subhashchandran                printf "\\x${elog_id:$i:2}" >> "$FILE"
13865d15fb3SDhruvaraj Subhashchandran            done
13965d15fb3SDhruvaraj Subhashchandran            add_null "$msize"
14065d15fb3SDhruvaraj Subhashchandran        else
14165d15fb3SDhruvaraj Subhashchandran            add_null 4
14265d15fb3SDhruvaraj Subhashchandran        fi
14365d15fb3SDhruvaraj Subhashchandran    else
14465d15fb3SDhruvaraj Subhashchandran        if ! { [[ $dump_type = "$TYPE_ELOG" ]] || \
14565d15fb3SDhruvaraj Subhashchandran                [[ $dump_type = "$TYPE_CHECKSTOP" ]]; }; then
14665d15fb3SDhruvaraj Subhashchandran            x=${#elog_id}
14765d15fb3SDhruvaraj Subhashchandran            if [ "$x" = 8 ]; then
14865d15fb3SDhruvaraj Subhashchandran                for ((i=0;i<x;i+=2));
14965d15fb3SDhruvaraj Subhashchandran                do
15065d15fb3SDhruvaraj Subhashchandran                    printf "\\x${elog_id:$i:2}" >> "$FILE"
15165d15fb3SDhruvaraj Subhashchandran                done
15265d15fb3SDhruvaraj Subhashchandran            else
15365d15fb3SDhruvaraj Subhashchandran                add_null 4
15465d15fb3SDhruvaraj Subhashchandran            fi
15565d15fb3SDhruvaraj Subhashchandran        else
15665d15fb3SDhruvaraj Subhashchandran            strpelid=$(busctl get-property $PHOSPHOR_LOGGING \
15765d15fb3SDhruvaraj Subhashchandran                $optional_path $PEL_ENTRY $PEL_ID_PROP | cut -d " " -f 2)
15865d15fb3SDhruvaraj Subhashchandran            decpelid=$(expr "$strpelid" + 0)
15965d15fb3SDhruvaraj Subhashchandran            hexpelid=$(printf "%x" "$decpelid")
16065d15fb3SDhruvaraj Subhashchandran            x=${#hexpelid}
16165d15fb3SDhruvaraj Subhashchandran            if [ "$x" = 8 ]; then
16265d15fb3SDhruvaraj Subhashchandran                for ((i=0;i<x;i+=2));
16365d15fb3SDhruvaraj Subhashchandran                do
16465d15fb3SDhruvaraj Subhashchandran                    printf "\\x${hexpelid:$i:2}" >> "$FILE"
16565d15fb3SDhruvaraj Subhashchandran                done
16665d15fb3SDhruvaraj Subhashchandran            else
16765d15fb3SDhruvaraj Subhashchandran                add_null 4
16865d15fb3SDhruvaraj Subhashchandran            fi
16965d15fb3SDhruvaraj Subhashchandran        fi
17065d15fb3SDhruvaraj Subhashchandran    fi
17165d15fb3SDhruvaraj Subhashchandran}
17265d15fb3SDhruvaraj Subhashchandran
17365d15fb3SDhruvaraj Subhashchandran#Function to get the tar size of the dump
17465d15fb3SDhruvaraj Subhashchandranfunction tar_size() {
17565d15fb3SDhruvaraj Subhashchandran    printf -v hex "%x" "$size_dump"
17665d15fb3SDhruvaraj Subhashchandran    x=${#hex}
17765d15fb3SDhruvaraj Subhashchandran    if [ $((x % 2)) -eq 1 ]; then
17865d15fb3SDhruvaraj Subhashchandran        hex=0$hex
17965d15fb3SDhruvaraj Subhashchandran        x=${#hex}
18065d15fb3SDhruvaraj Subhashchandran    fi
18165d15fb3SDhruvaraj Subhashchandran    msize=$(( x / 2 ))
18265d15fb3SDhruvaraj Subhashchandran    msize=$(( SIZE_4 - msize ))
18365d15fb3SDhruvaraj Subhashchandran    add_null "$msize"
18465d15fb3SDhruvaraj Subhashchandran    for ((i=0;i<x;i+=2));
18565d15fb3SDhruvaraj Subhashchandran    do
18665d15fb3SDhruvaraj Subhashchandran        # shellcheck disable=SC2059 # using 'hex' as a variable is safe here.
18765d15fb3SDhruvaraj Subhashchandran        printf "\\x${hex:$i:2}" >> "$FILE"
18865d15fb3SDhruvaraj Subhashchandran    done
18965d15fb3SDhruvaraj Subhashchandran}
19065d15fb3SDhruvaraj Subhashchandran
19165d15fb3SDhruvaraj Subhashchandran#Function will get the total size of the dump without header
19265d15fb3SDhruvaraj Subhashchandran# i.e. Dump summary size i.e. 1024 bytes + the tar file size
19365d15fb3SDhruvaraj Subhashchandranfunction total_size() {
19465d15fb3SDhruvaraj Subhashchandran    size_dump=$(( size_dump + DUMP_SUMMARY_SIZE ))
19565d15fb3SDhruvaraj Subhashchandran    printf -v hex "%x" "$size_dump"
19665d15fb3SDhruvaraj Subhashchandran    x=${#hex}
19765d15fb3SDhruvaraj Subhashchandran    if [ $((x % 2)) -eq 1 ]; then
19865d15fb3SDhruvaraj Subhashchandran        hex=0$hex
19965d15fb3SDhruvaraj Subhashchandran        x=${#hex}
20065d15fb3SDhruvaraj Subhashchandran    fi
20165d15fb3SDhruvaraj Subhashchandran    msize=$(( x / 2 ))
20265d15fb3SDhruvaraj Subhashchandran    msize=$(( SIZE_8 - msize ))
20365d15fb3SDhruvaraj Subhashchandran    add_null "$msize"
20465d15fb3SDhruvaraj Subhashchandran    for ((i=0;i<x;i+=2));
20565d15fb3SDhruvaraj Subhashchandran    do
20665d15fb3SDhruvaraj Subhashchandran        # shellcheck disable=SC2059 # using 'hex' as a variable is safe here.
20765d15fb3SDhruvaraj Subhashchandran        printf "\\x${hex:$i:2}" >> "$FILE"
20865d15fb3SDhruvaraj Subhashchandran    done
20965d15fb3SDhruvaraj Subhashchandran}
21065d15fb3SDhruvaraj Subhashchandran
21165d15fb3SDhruvaraj Subhashchandran#Function to populate content type based on dump type
21265d15fb3SDhruvaraj Subhashchandranfunction content_type() {
21365d15fb3SDhruvaraj Subhashchandran    type="00000000"
21465d15fb3SDhruvaraj Subhashchandran    # content type:
21565d15fb3SDhruvaraj Subhashchandran    # Hostboot dump = "20"
21665d15fb3SDhruvaraj Subhashchandran    # Hardware dump = "00"
21765d15fb3SDhruvaraj Subhashchandran    # SBE dump = "30"
21865d15fb3SDhruvaraj Subhashchandran    if [ "$dump_content_type" = "$HB_DUMP" ]; then
21965d15fb3SDhruvaraj Subhashchandran        type="00000200"
22065d15fb3SDhruvaraj Subhashchandran    elif [ "$dump_content_type" = "$HW_DUMP" ]; then
22165d15fb3SDhruvaraj Subhashchandran        type="40000000"
22265d15fb3SDhruvaraj Subhashchandran    elif [ "$dump_content_type" = "$SBE_DUMP" ]; then
22365d15fb3SDhruvaraj Subhashchandran        type="02000000"
22465d15fb3SDhruvaraj Subhashchandran    fi
22565d15fb3SDhruvaraj Subhashchandran    x=${#type}
22665d15fb3SDhruvaraj Subhashchandran    for ((i=0;i<$x;i+=2));
22765d15fb3SDhruvaraj Subhashchandran    do
22865d15fb3SDhruvaraj Subhashchandran        # shellcheck disable=SC2059 # using 'type' as a variable is safe here.
22965d15fb3SDhruvaraj Subhashchandran        printf "\\x${type:$i:2}" >> "$FILE"
23065d15fb3SDhruvaraj Subhashchandran    done
23165d15fb3SDhruvaraj Subhashchandran}
23265d15fb3SDhruvaraj Subhashchandran
23365d15fb3SDhruvaraj Subhashchandran# @brief Fetching model number and serial number property from inventory
23465d15fb3SDhruvaraj Subhashchandran#  If the busctl command fails, populating the model and serial number
23565d15fb3SDhruvaraj Subhashchandran#  with default value i.e. 0
23665d15fb3SDhruvaraj Subhashchandranfunction get_bmc_model_serial_number() {
23765d15fb3SDhruvaraj Subhashchandran    modelNo=$(busctl get-property $INVENTORY_MANAGER $INVENTORY_PATH \
23865d15fb3SDhruvaraj Subhashchandran        $INVENTORY_ASSET_INT Model | cut -d " " -f 2 | sed "s/^\(\"\)\(.*\)\1\$/\2/g")
23965d15fb3SDhruvaraj Subhashchandran
24065d15fb3SDhruvaraj Subhashchandran    if [ -z "$modelNo" ]; then
24165d15fb3SDhruvaraj Subhashchandran        modelNo="00000000"
24265d15fb3SDhruvaraj Subhashchandran    fi
24365d15fb3SDhruvaraj Subhashchandran
24465d15fb3SDhruvaraj Subhashchandran    bmcSerialNo=$(busctl call $INVENTORY_MANAGER $INVENTORY_BMC_BOARD \
24565d15fb3SDhruvaraj Subhashchandran            org.freedesktop.DBus.Properties Get ss $INVENTORY_ASSET_INT \
24665d15fb3SDhruvaraj Subhashchandran        SerialNumber | cut -d " " -f 3 | sed "s/^\(\"\)\(.*\)\1\$/\2/g")
24765d15fb3SDhruvaraj Subhashchandran
24865d15fb3SDhruvaraj Subhashchandran    if [ -z "$bmcSerialNo" ]; then
24965d15fb3SDhruvaraj Subhashchandran        bmcSerialNo="000000000000"
25065d15fb3SDhruvaraj Subhashchandran    fi
25165d15fb3SDhruvaraj Subhashchandran}
25265d15fb3SDhruvaraj Subhashchandran
25365d15fb3SDhruvaraj Subhashchandran#Function to add virtual file directory entry, consists of below entries
25465d15fb3SDhruvaraj Subhashchandran####################FORMAT################
25565d15fb3SDhruvaraj Subhashchandran#Name              Size(bytes)  Value
25665d15fb3SDhruvaraj Subhashchandran#Entry Header      8            FILE
25765d15fb3SDhruvaraj Subhashchandran#Entry Size        2            0x0040
25865d15fb3SDhruvaraj Subhashchandran#Reserved          10           NULL
25965d15fb3SDhruvaraj Subhashchandran#Entry Type        2            0x0001
26065d15fb3SDhruvaraj Subhashchandran#File Name Prefix  2            0x000F
26165d15fb3SDhruvaraj Subhashchandran#Dump File Type    7            BMCDUMP/SYSDUMP/NAGDUMP
26265d15fb3SDhruvaraj Subhashchandran#Separator         1            .
26365d15fb3SDhruvaraj Subhashchandran#System Serial No  7            System serial number fetched from system
26465d15fb3SDhruvaraj Subhashchandran#Dump Identifier   8            Dump Identifier value fetched from dump
26565d15fb3SDhruvaraj Subhashchandran#Separator         1            .
26665d15fb3SDhruvaraj Subhashchandran#Time stamp        14           Form should be yyyymmddhhmmss
26765d15fb3SDhruvaraj Subhashchandran#Null Terminator   1            0x00
26865d15fb3SDhruvaraj Subhashchandranfunction dump_file_entry() {
26965d15fb3SDhruvaraj Subhashchandran    printf "FILE    " >> $FILE
27065d15fb3SDhruvaraj Subhashchandran    add_null 1
27165d15fb3SDhruvaraj Subhashchandran    printf '\x40' >> $FILE #Virtual file directory entry size
27265d15fb3SDhruvaraj Subhashchandran    add_null 11
27365d15fb3SDhruvaraj Subhashchandran    printf '\x01' >> $FILE
27465d15fb3SDhruvaraj Subhashchandran    add_null 1
27565d15fb3SDhruvaraj Subhashchandran    printf '\x0F' >> "$FILE"
27665d15fb3SDhruvaraj Subhashchandran    if [ "$dump_type" = "$OP_DUMP" ]; then
27765d15fb3SDhruvaraj Subhashchandran        printf "SYSDUMP.%s." "$serialNo" >> "$FILE"
27865d15fb3SDhruvaraj Subhashchandran    else
27965d15fb3SDhruvaraj Subhashchandran        printf "%s.%s." "$header_dump_name" "$serialNo" >> "$FILE"
28065d15fb3SDhruvaraj Subhashchandran    fi
28165d15fb3SDhruvaraj Subhashchandran    get_dump_id
28265d15fb3SDhruvaraj Subhashchandran    printf "." >> $FILE
28365d15fb3SDhruvaraj Subhashchandran    printf $dDay >> $FILE  #UTC time stamp
28465d15fb3SDhruvaraj Subhashchandran    add_null 1
28565d15fb3SDhruvaraj Subhashchandran}
28665d15fb3SDhruvaraj Subhashchandran
28765d15fb3SDhruvaraj Subhashchandran#Function section directory entry, consists of below entries
28865d15fb3SDhruvaraj Subhashchandran####################FORMAT################
28965d15fb3SDhruvaraj Subhashchandran#Name              Size(bytes)  Value
29065d15fb3SDhruvaraj Subhashchandran#Entry Header      8            SECTION
29165d15fb3SDhruvaraj Subhashchandran#Entry Size        2            0x0030
29265d15fb3SDhruvaraj Subhashchandran#Section Priority  2            0x0000
29365d15fb3SDhruvaraj Subhashchandran#Reserved          4            NULL
29465d15fb3SDhruvaraj Subhashchandran#Entry Flags       4            0x00000001
29565d15fb3SDhruvaraj Subhashchandran#Entry Types       2            0x0002
29665d15fb3SDhruvaraj Subhashchandran#Reserved          2            NULL
29765d15fb3SDhruvaraj Subhashchandran#Dump Size         8            Dump size in hex + dump header
29865d15fb3SDhruvaraj Subhashchandran#Optional Section  16           BMCDUMP/NAGDUMP/DUMP SUMMARY
29965d15fb3SDhruvaraj Subhashchandranfunction dump_section_entry() {
30065d15fb3SDhruvaraj Subhashchandran    printf "SECTION " >> $FILE
30165d15fb3SDhruvaraj Subhashchandran    add_null 1
30265d15fb3SDhruvaraj Subhashchandran    printf '\x30' >> "$FILE" #Section entry size
30365d15fb3SDhruvaraj Subhashchandran    add_null 9
30465d15fb3SDhruvaraj Subhashchandran    if [ "$dump_type" = "$OP_DUMP" ]; then
30565d15fb3SDhruvaraj Subhashchandran        add_null 1
30665d15fb3SDhruvaraj Subhashchandran    else
30765d15fb3SDhruvaraj Subhashchandran        printf '\x01' >> "$FILE"
30865d15fb3SDhruvaraj Subhashchandran    fi
30965d15fb3SDhruvaraj Subhashchandran    add_null 1
31065d15fb3SDhruvaraj Subhashchandran    printf '\x02' >> "$FILE"
31165d15fb3SDhruvaraj Subhashchandran    add_null 2
31265d15fb3SDhruvaraj Subhashchandran    if [ "$dump_type" = "$OP_DUMP" ]; then
31365d15fb3SDhruvaraj Subhashchandran        add_null 6
31465d15fb3SDhruvaraj Subhashchandran        printf '\x04' >> "$FILE"
31565d15fb3SDhruvaraj Subhashchandran        add_null 1
31665d15fb3SDhruvaraj Subhashchandran        printf "DUMP SUMMARY" >> "$FILE"
31765d15fb3SDhruvaraj Subhashchandran        add_null 4
31865d15fb3SDhruvaraj Subhashchandran    else
31965d15fb3SDhruvaraj Subhashchandran        dump_size    #Dump size
32065d15fb3SDhruvaraj Subhashchandran        printf "%s" "$header_dump_name" >> "$FILE"
32165d15fb3SDhruvaraj Subhashchandran        add_null 9
32265d15fb3SDhruvaraj Subhashchandran    fi
32365d15fb3SDhruvaraj Subhashchandran}
32465d15fb3SDhruvaraj Subhashchandran
32565d15fb3SDhruvaraj Subhashchandran#Function to add dump header, consists of below entries
32665d15fb3SDhruvaraj Subhashchandran####################FORMAT################
32765d15fb3SDhruvaraj Subhashchandran#Name              Size(bytes)  Value
32865d15fb3SDhruvaraj Subhashchandran#Dump type         8            BMC/NAG DUMP
32965d15fb3SDhruvaraj Subhashchandran#Dump Request time 8            Dump request time stamp (in BCD)
330*eb46252dSManojkiran Eda#Dump Identifier   4            Dump identifier fetched from dump
33165d15fb3SDhruvaraj Subhashchandran#Dump version      2            0x0210
33265d15fb3SDhruvaraj Subhashchandran#Dump header       2            0x200
33365d15fb3SDhruvaraj Subhashchandran#Total dump size   8            Dump size + dump header
33465d15fb3SDhruvaraj Subhashchandran#Panel function    32           System model, feature, type and IPL mode
33565d15fb3SDhruvaraj Subhashchandran#System Name       32           System Name (in ASCII)
33665d15fb3SDhruvaraj Subhashchandran#Serial number     7            System serial number
33765d15fb3SDhruvaraj Subhashchandran#Reserved          1            NULL
33865d15fb3SDhruvaraj Subhashchandran#PLID              4            Comes from errorlog
33965d15fb3SDhruvaraj Subhashchandran#File Header Size  2            0x70
34065d15fb3SDhruvaraj Subhashchandran#Dump SRC Size     2            Dump SRC Size. Currently NULL
34165d15fb3SDhruvaraj Subhashchandran#DUMP SRC          320          DUMP SRC. Currently NULL
34265d15fb3SDhruvaraj Subhashchandran#Dump Req Type     4            Dump requester user interface type.
34365d15fb3SDhruvaraj Subhashchandran#Dump Req ID       32           Dump requester user interface ID
34465d15fb3SDhruvaraj Subhashchandran#Dump Req user ID  32           Dump requester user ID.
34565d15fb3SDhruvaraj Subhashchandran#
34665d15fb3SDhruvaraj Subhashchandran#TODO: Github issue #2639, to populate the unpopulated elements.
34765d15fb3SDhruvaraj Subhashchandran#Note: Unpopulated elements are listed below are set as NULL
34865d15fb3SDhruvaraj Subhashchandran#PLID
34965d15fb3SDhruvaraj Subhashchandran#SRC size
35065d15fb3SDhruvaraj Subhashchandran#SRC dump
351*eb46252dSManojkiran Eda#Dump requester type
35265d15fb3SDhruvaraj Subhashchandran#Dump Req ID
35365d15fb3SDhruvaraj Subhashchandran#Dump Req user ID
35465d15fb3SDhruvaraj Subhashchandranfunction dump_header() {
35565d15fb3SDhruvaraj Subhashchandran    if [ $dump_type = "$TYPE_FAULTDATA" ]; then
35665d15fb3SDhruvaraj Subhashchandran        printf "FLT DUMP" >> $FILE
35765d15fb3SDhruvaraj Subhashchandran    else
35865d15fb3SDhruvaraj Subhashchandran        printf "BMC DUMP" >> $FILE
35965d15fb3SDhruvaraj Subhashchandran    fi
36065d15fb3SDhruvaraj Subhashchandran    dump_time
36165d15fb3SDhruvaraj Subhashchandran    add_null 4 #Dump Identifier
36265d15fb3SDhruvaraj Subhashchandran    printf '\x02' >> $FILE #Dump version 0x0210
36365d15fb3SDhruvaraj Subhashchandran    printf '\x10' >> $FILE
36465d15fb3SDhruvaraj Subhashchandran    printf '\x02' >> $FILE #Dump header size 0x0200
36565d15fb3SDhruvaraj Subhashchandran    add_null 1
36665d15fb3SDhruvaraj Subhashchandran    dump_size  #dump size
36765d15fb3SDhruvaraj Subhashchandran    printf "$modelNo" >> "$FILE"
36865d15fb3SDhruvaraj Subhashchandran    add_null 24
36965d15fb3SDhruvaraj Subhashchandran    printf "Server-%s-SN%s" "$modelNo" "$serialNo" >> "$FILE"
37065d15fb3SDhruvaraj Subhashchandran    add_null 7
37165d15fb3SDhruvaraj Subhashchandran    printf "$serialNo" >> "$FILE"
37265d15fb3SDhruvaraj Subhashchandran    add_null 1
37365d15fb3SDhruvaraj Subhashchandran    get_eid
37465d15fb3SDhruvaraj Subhashchandran    add_null 1
37565d15fb3SDhruvaraj Subhashchandran    printf '\x70' >> "$FILE" #File header size
37665d15fb3SDhruvaraj Subhashchandran    add_null 2 # SRC size
37765d15fb3SDhruvaraj Subhashchandran    add_null 320 # SRC dump
37865d15fb3SDhruvaraj Subhashchandran    getbmc_serial
37965d15fb3SDhruvaraj Subhashchandran    add_null 68 # Dump requester details
38065d15fb3SDhruvaraj Subhashchandran}
38165d15fb3SDhruvaraj Subhashchandran
38265d15fb3SDhruvaraj Subhashchandran#Function to add Dump entry, consists of below entries
38365d15fb3SDhruvaraj Subhashchandran####################FORMAT################
38465d15fb3SDhruvaraj Subhashchandran#Name               Size(bytes)  Value
38565d15fb3SDhruvaraj Subhashchandran#Dump Entry Version 1            0x01
38665d15fb3SDhruvaraj Subhashchandran#BMC Dump Valid     1            0x01
38765d15fb3SDhruvaraj Subhashchandran#No of Dump Entry   2            Number of Dump Entry
38865d15fb3SDhruvaraj Subhashchandran#
38965d15fb3SDhruvaraj Subhashchandranfunction dump_entry() {
39065d15fb3SDhruvaraj Subhashchandran    printf '\x01' >> $FILE #Dump entry version
39165d15fb3SDhruvaraj Subhashchandran    printf '\x01' >> $FILE #Dump valid
39265d15fb3SDhruvaraj Subhashchandran    add_null 1
39365d15fb3SDhruvaraj Subhashchandran    printf '\x10' >> $FILE #Dump entry
39465d15fb3SDhruvaraj Subhashchandran}
39565d15fb3SDhruvaraj Subhashchandran
39665d15fb3SDhruvaraj Subhashchandran#Function to Hardware Dump Section
39765d15fb3SDhruvaraj Subhashchandran####################FORMAT##################
39865d15fb3SDhruvaraj Subhashchandran#Name            Size(bytes)    Value
39965d15fb3SDhruvaraj Subhashchandran#HWDumpHeader      8            SECTION
40065d15fb3SDhruvaraj Subhashchandran#HWDumpEntrySize   2            0x0030
40165d15fb3SDhruvaraj Subhashchandran#HWDumpPriority    2            0x02
40265d15fb3SDhruvaraj Subhashchandran#reserve6          4            NULL
40365d15fb3SDhruvaraj Subhashchandran#HWDumpEntryFlag   4            0x0001
40465d15fb3SDhruvaraj Subhashchandran#HWDumpEntryType   2            0x02
40565d15fb3SDhruvaraj Subhashchandran#reserve7          2            NULL
40665d15fb3SDhruvaraj Subhashchandran#reserve7a         4            NULL
40765d15fb3SDhruvaraj Subhashchandran#HWDumpSize        4            NULL
40865d15fb3SDhruvaraj Subhashchandran#HWDumpName[16]    16           HARDWARE DATA
40965d15fb3SDhruvaraj Subhashchandranfunction hw_dump_section() {
41065d15fb3SDhruvaraj Subhashchandran    printf "SECTION " >> "$FILE"
41165d15fb3SDhruvaraj Subhashchandran    add_null 1
41265d15fb3SDhruvaraj Subhashchandran    printf '\x30' >> "$FILE" #Section entry size
41365d15fb3SDhruvaraj Subhashchandran    add_null 1
41465d15fb3SDhruvaraj Subhashchandran    printf '\x02' >> "$FILE"
41565d15fb3SDhruvaraj Subhashchandran    add_null 7
41665d15fb3SDhruvaraj Subhashchandran    printf '\x00' >> "$FILE"
41765d15fb3SDhruvaraj Subhashchandran    add_null 1
41865d15fb3SDhruvaraj Subhashchandran    printf '\x02' >> "$FILE"
41965d15fb3SDhruvaraj Subhashchandran    add_null 6
42065d15fb3SDhruvaraj Subhashchandran    tar_size
42165d15fb3SDhruvaraj Subhashchandran    printf "HARDWARE DATA" >> "$FILE"
42265d15fb3SDhruvaraj Subhashchandran    add_null 3
42365d15fb3SDhruvaraj Subhashchandran}
42465d15fb3SDhruvaraj Subhashchandran
42565d15fb3SDhruvaraj Subhashchandran#Function to Mainstore Dump Section
42665d15fb3SDhruvaraj Subhashchandran######################FORMAT###################
42765d15fb3SDhruvaraj Subhashchandran#Name                Size(in bytes)   Value
42865d15fb3SDhruvaraj Subhashchandran#MainstoreHeader         8            SECTION
42965d15fb3SDhruvaraj Subhashchandran#MainstoreEntrySize      2            0x30
43065d15fb3SDhruvaraj Subhashchandran#MainstorePriority       2            0x02
43165d15fb3SDhruvaraj Subhashchandran#reserve8                4            NULL
43265d15fb3SDhruvaraj Subhashchandran#MainstoreEntryFlag      4            NULL
43365d15fb3SDhruvaraj Subhashchandran#MainstoreEntryType      2            0x01
43465d15fb3SDhruvaraj Subhashchandran#reserve9                2            NULL
43565d15fb3SDhruvaraj Subhashchandran#MainstoreSize           8            NULL
43665d15fb3SDhruvaraj Subhashchandran#MainstoreName           16           HYPERVISOR DATA
43765d15fb3SDhruvaraj Subhashchandranfunction mainstore_dump_section() {
43865d15fb3SDhruvaraj Subhashchandran    printf "SECTION " >> "$FILE"
43965d15fb3SDhruvaraj Subhashchandran    add_null 1
44065d15fb3SDhruvaraj Subhashchandran    printf '\x30' >> "$FILE" #Section entry size
44165d15fb3SDhruvaraj Subhashchandran    add_null 1
44265d15fb3SDhruvaraj Subhashchandran    printf '\x02' >> "$FILE"
44365d15fb3SDhruvaraj Subhashchandran    add_null 7
44465d15fb3SDhruvaraj Subhashchandran    printf '\x01' >> "$FILE"
44565d15fb3SDhruvaraj Subhashchandran    add_null 1
44665d15fb3SDhruvaraj Subhashchandran    printf '\x02' >> "$FILE"
44765d15fb3SDhruvaraj Subhashchandran    add_null 10
44865d15fb3SDhruvaraj Subhashchandran    printf "HYPERVISOR DATA" >> "$FILE"
44965d15fb3SDhruvaraj Subhashchandran    add_null 1
45065d15fb3SDhruvaraj Subhashchandran}
45165d15fb3SDhruvaraj Subhashchandran
45265d15fb3SDhruvaraj Subhashchandran#Function for platform system dump header
45365d15fb3SDhruvaraj Subhashchandran######################FORMAT##################
45465d15fb3SDhruvaraj Subhashchandran#Name                Size(in bytes)   Value
45565d15fb3SDhruvaraj Subhashchandran#eyeCatcher              8            SYS DUMP
45665d15fb3SDhruvaraj Subhashchandran#requestTimestamp        8            BCD time
45765d15fb3SDhruvaraj Subhashchandran#dumpIdentifier          4
45865d15fb3SDhruvaraj Subhashchandran#dumpVersion             2
45965d15fb3SDhruvaraj Subhashchandran#headerSize              2
46065d15fb3SDhruvaraj Subhashchandran#totalDumpSize           8
46165d15fb3SDhruvaraj Subhashchandran#machineInfo             32
46265d15fb3SDhruvaraj Subhashchandran#systemName              32
46365d15fb3SDhruvaraj Subhashchandran#systemSerialNumber      7
46465d15fb3SDhruvaraj Subhashchandran#Dump Creator BMC        1
46565d15fb3SDhruvaraj Subhashchandran#eventLogId              4
46665d15fb3SDhruvaraj Subhashchandran#fileHeaderSize          2
467*eb46252dSManojkiran Eda####################DATA NOT AVAILABLE##########
46865d15fb3SDhruvaraj Subhashchandran#srcSize                 2
46965d15fb3SDhruvaraj Subhashchandran#dumpSrc                 332
47065d15fb3SDhruvaraj Subhashchandran#toolType                4
47165d15fb3SDhruvaraj Subhashchandran#clientId                32
47265d15fb3SDhruvaraj Subhashchandran#userId                  32
47365d15fb3SDhruvaraj Subhashchandran#systemDumpFlags         2
47465d15fb3SDhruvaraj Subhashchandran#hardwareErrorFlags      2
47565d15fb3SDhruvaraj Subhashchandran#processorChipEcid       2
47665d15fb3SDhruvaraj Subhashchandran#hardwareObjectModel     1
47765d15fb3SDhruvaraj Subhashchandran#chUnused                1
47865d15fb3SDhruvaraj Subhashchandran#cecMemoryErrorFlags     8
47965d15fb3SDhruvaraj Subhashchandran#memoryDumpStartTime     8
48065d15fb3SDhruvaraj Subhashchandran#memoryDumpCompleteTime  8
48165d15fb3SDhruvaraj Subhashchandran#hypVerRelMod            8
48265d15fb3SDhruvaraj Subhashchandran#Reserved4HysrInfo       2
48365d15fb3SDhruvaraj Subhashchandran#hypMode                 1
48465d15fb3SDhruvaraj Subhashchandran#hypDumpContentPolicy    1
48565d15fb3SDhruvaraj Subhashchandran#Reserved4HWDInfo        2
48665d15fb3SDhruvaraj Subhashchandran#hardwareNodalCount      2
48765d15fb3SDhruvaraj Subhashchandran#hardwareDumpTableSize   4
48865d15fb3SDhruvaraj Subhashchandran#hardwareDumpDataSize    4
48965d15fb3SDhruvaraj Subhashchandran#totalHardwareDumpDataSize   4
49065d15fb3SDhruvaraj Subhashchandran#mdrtTableSize           4
49165d15fb3SDhruvaraj Subhashchandran#mdrtTableAddress        8
49265d15fb3SDhruvaraj Subhashchandran#memoryDumpDataSize      8
49365d15fb3SDhruvaraj Subhashchandran#hypModLoadMapTime       8
49465d15fb3SDhruvaraj Subhashchandran#hardwareCollectionEndTime   8
49565d15fb3SDhruvaraj Subhashchandran#contentType             4
49665d15fb3SDhruvaraj Subhashchandran#failingUnitId           4
49765d15fb3SDhruvaraj Subhashchandran#failingCappChipId       2
49865d15fb3SDhruvaraj Subhashchandran#failingCappUnitId       1
49965d15fb3SDhruvaraj Subhashchandran#reserve02               5
50065d15fb3SDhruvaraj Subhashchandran#hypHRMOR                8
50165d15fb3SDhruvaraj Subhashchandran#hypNACAAddress          8
50265d15fb3SDhruvaraj Subhashchandran#hardwareCollectionStartTime  8
50365d15fb3SDhruvaraj Subhashchandran#mdstTableSize           4
50465d15fb3SDhruvaraj Subhashchandran#payloadState            4
50565d15fb3SDhruvaraj Subhashchandran#creator BMC             1
50665d15fb3SDhruvaraj Subhashchandran#reservedForCreator      169
50765d15fb3SDhruvaraj Subhashchandranfunction plat_dump_header() {
50865d15fb3SDhruvaraj Subhashchandran    printf "SYS DUMP" >> "$FILE"
50965d15fb3SDhruvaraj Subhashchandran    dump_time
51065d15fb3SDhruvaraj Subhashchandran    get_dump_id "$OP_DUMP"   #Dump identifier
51165d15fb3SDhruvaraj Subhashchandran    printf '\x02' >> "$FILE"
51265d15fb3SDhruvaraj Subhashchandran    printf '\x21' >> "$FILE" #Need to cross check
51365d15fb3SDhruvaraj Subhashchandran    printf '\x04' >> "$FILE" #Dump header size 0x0400
51465d15fb3SDhruvaraj Subhashchandran    add_null 1
51565d15fb3SDhruvaraj Subhashchandran    total_size
51665d15fb3SDhruvaraj Subhashchandran    printf "%s" "$modelNo" >> "$FILE"
51765d15fb3SDhruvaraj Subhashchandran    add_null 24
51865d15fb3SDhruvaraj Subhashchandran    system_name
51965d15fb3SDhruvaraj Subhashchandran    printf "%s" "$serialNo" >> "$FILE"
52065d15fb3SDhruvaraj Subhashchandran    printf '\x01' >> "$FILE"   #Dump Creator BMC
52165d15fb3SDhruvaraj Subhashchandran    get_eid
52265d15fb3SDhruvaraj Subhashchandran    add_null 1
52365d15fb3SDhruvaraj Subhashchandran    printf '\xd0' >> "$FILE" #File Header size
52465d15fb3SDhruvaraj Subhashchandran    add_null 498
52565d15fb3SDhruvaraj Subhashchandran    content_type # 4 bytes
52665d15fb3SDhruvaraj Subhashchandran    add_null 44
52765d15fb3SDhruvaraj Subhashchandran    printf '\x01' >> "$FILE"  # BMC indicator
52865d15fb3SDhruvaraj Subhashchandran    add_null 367
52965d15fb3SDhruvaraj Subhashchandran}
53065d15fb3SDhruvaraj Subhashchandran
53165d15fb3SDhruvaraj Subhashchandran
53265d15fb3SDhruvaraj Subhashchandran#main function
53365d15fb3SDhruvaraj Subhashchandranfunction gen_header_package() {
53465d15fb3SDhruvaraj Subhashchandran    dump_file_entry
53565d15fb3SDhruvaraj Subhashchandran    dump_section_entry
53665d15fb3SDhruvaraj Subhashchandran    if [ "$dump_type" = "$OP_DUMP" ]; then
53765d15fb3SDhruvaraj Subhashchandran        hw_dump_section
53865d15fb3SDhruvaraj Subhashchandran        mainstore_dump_section
53965d15fb3SDhruvaraj Subhashchandran        plat_dump_header
54065d15fb3SDhruvaraj Subhashchandran    else
54165d15fb3SDhruvaraj Subhashchandran        dump_header
54265d15fb3SDhruvaraj Subhashchandran        dump_entry
54365d15fb3SDhruvaraj Subhashchandran    fi
54465d15fb3SDhruvaraj Subhashchandran}
54565d15fb3SDhruvaraj Subhashchandran
54665d15fb3SDhruvaraj Subhashchandranget_bmc_model_serial_number
54765d15fb3SDhruvaraj Subhashchandran
54865d15fb3SDhruvaraj Subhashchandran#Run gen_header_package
54965d15fb3SDhruvaraj Subhashchandrangen_header_package