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