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