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