1*65d15fb3SDhruvaraj Subhashchandran#!/bin/bash 2*65d15fb3SDhruvaraj Subhashchandran# 3*65d15fb3SDhruvaraj Subhashchandran#Header for BMC DUMP 4*65d15fb3SDhruvaraj Subhashchandran#This script will create header file only for IBM systems. 5*65d15fb3SDhruvaraj Subhashchandran#This script will generate generic IBM dump header format. 6*65d15fb3SDhruvaraj Subhashchandran# 7*65d15fb3SDhruvaraj Subhashchandran#Note: The dump header will be imposed on the dump file i.e 8*65d15fb3SDhruvaraj Subhashchandran#<dump name>.tar.xz/gz only on IBM specific systems, user needs to 9*65d15fb3SDhruvaraj Subhashchandran#separate out the header before extracting the dump. 10*65d15fb3SDhruvaraj Subhashchandran# 11*65d15fb3SDhruvaraj Subhashchandran 12*65d15fb3SDhruvaraj Subhashchandran#Constants 13*65d15fb3SDhruvaraj Subhashchandrandeclare -rx DUMP_HEADER_ENTRY_SIZE='516' 14*65d15fb3SDhruvaraj Subhashchandrandeclare -rx SIZE_4='4' 15*65d15fb3SDhruvaraj Subhashchandrandeclare -rx SIZE_8='8' 16*65d15fb3SDhruvaraj Subhashchandrandeclare -rx SIZE_12='12' 17*65d15fb3SDhruvaraj Subhashchandrandeclare -rx SIZE_32='32' 18*65d15fb3SDhruvaraj Subhashchandran#Dump Summary size without header 19*65d15fb3SDhruvaraj Subhashchandrandeclare -rx DUMP_SUMMARY_SIZE='1024' 20*65d15fb3SDhruvaraj Subhashchandrandeclare -rx HW_DUMP='00' 21*65d15fb3SDhruvaraj Subhashchandrandeclare -rx HB_DUMP='20' 22*65d15fb3SDhruvaraj Subhashchandrandeclare -rx SBE_DUMP='30' 23*65d15fb3SDhruvaraj Subhashchandrandeclare -rx OP_DUMP="opdump" 24*65d15fb3SDhruvaraj Subhashchandrandeclare -rx INVENTORY_MANAGER='xyz.openbmc_project.Inventory.Manager' 25*65d15fb3SDhruvaraj Subhashchandrandeclare -rx INVENTORY_PATH='/xyz/openbmc_project/inventory/system' 26*65d15fb3SDhruvaraj Subhashchandrandeclare -rx INVENTORY_ASSET_INT='xyz.openbmc_project.Inventory.Decorator.Asset' 27*65d15fb3SDhruvaraj Subhashchandrandeclare -rx INVENTORY_BMC_BOARD='/xyz/openbmc_project/inventory/system/chassis/motherboard' 28*65d15fb3SDhruvaraj Subhashchandrandeclare -rx PHOSPHOR_LOGGING='xyz.openbmc_project.Logging' 29*65d15fb3SDhruvaraj Subhashchandrandeclare -rx PEL_ENTRY='org.open_power.Logging.PEL.Entry' 30*65d15fb3SDhruvaraj Subhashchandrandeclare -rx PEL_ID_PROP='PlatformLogID' 31*65d15fb3SDhruvaraj Subhashchandran 32*65d15fb3SDhruvaraj Subhashchandran#Variables 33*65d15fb3SDhruvaraj Subhashchandrandeclare -x modelNo 34*65d15fb3SDhruvaraj SubhashchandranmodelNo=$(busctl get-property $INVENTORY_MANAGER $INVENTORY_PATH \ 35*65d15fb3SDhruvaraj Subhashchandran $INVENTORY_ASSET_INT Model | cut -d " " -f 2 | sed "s/^\(\"\)\(.*\)\1\$/\2/g") 36*65d15fb3SDhruvaraj Subhashchandran#Variables 37*65d15fb3SDhruvaraj Subhashchandrandeclare -x serialNo 38*65d15fb3SDhruvaraj SubhashchandranserialNo=$(busctl get-property $INVENTORY_MANAGER $INVENTORY_PATH \ 39*65d15fb3SDhruvaraj Subhashchandran $INVENTORY_ASSET_INT SerialNumber | cut -d " " -f 2 | sed "s/^\(\"\)\(.*\)\1\$/\2/g") 40*65d15fb3SDhruvaraj Subhashchandrandeclare -x dDay 41*65d15fb3SDhruvaraj SubhashchandrandDay=$(date -d @"$EPOCHTIME" +'%Y%m%d%H%M%S') 42*65d15fb3SDhruvaraj Subhashchandrandeclare -x bmcSerialNo 43*65d15fb3SDhruvaraj SubhashchandranbmcSerialNo=$(busctl call $INVENTORY_MANAGER $INVENTORY_BMC_BOARD \ 44*65d15fb3SDhruvaraj Subhashchandran org.freedesktop.DBus.Properties Get ss $INVENTORY_ASSET_INT \ 45*65d15fb3SDhruvaraj Subhashchandran SerialNumber | cut -d " " -f 3 | sed "s/^\(\"\)\(.*\)\1\$/\2/g") 46*65d15fb3SDhruvaraj Subhashchandran 47*65d15fb3SDhruvaraj Subhashchandran#Function to add NULL 48*65d15fb3SDhruvaraj Subhashchandranfunction add_null() { 49*65d15fb3SDhruvaraj Subhashchandran local a=$1 50*65d15fb3SDhruvaraj Subhashchandran printf '%*s' $a | tr ' ' "\0" >> $FILE 51*65d15fb3SDhruvaraj Subhashchandran} 52*65d15fb3SDhruvaraj Subhashchandran 53*65d15fb3SDhruvaraj Subhashchandran#Function to is to convert the EPOCHTIME collected 54*65d15fb3SDhruvaraj Subhashchandran#from dreport into hex values and write the same in 55*65d15fb3SDhruvaraj Subhashchandran#header. 56*65d15fb3SDhruvaraj Subhashchandranfunction dump_time() { 57*65d15fb3SDhruvaraj Subhashchandran x=${#dDay} 58*65d15fb3SDhruvaraj Subhashchandran msize=`expr $x / 2` 59*65d15fb3SDhruvaraj Subhashchandran msize=`expr $SIZE_8 - $msize` 60*65d15fb3SDhruvaraj Subhashchandran for ((i=0;i<$x;i+=2)); 61*65d15fb3SDhruvaraj Subhashchandran do 62*65d15fb3SDhruvaraj Subhashchandran printf \\x${dDay:$i:2} >> $FILE 63*65d15fb3SDhruvaraj Subhashchandran done 64*65d15fb3SDhruvaraj Subhashchandran add_null $msize 65*65d15fb3SDhruvaraj Subhashchandran} 66*65d15fb3SDhruvaraj Subhashchandran 67*65d15fb3SDhruvaraj Subhashchandran#Function to fetch the size of the dump 68*65d15fb3SDhruvaraj Subhashchandranfunction dump_size() { 69*65d15fb3SDhruvaraj Subhashchandran #Adding 516 bytes as the total dump size is dump tar size 70*65d15fb3SDhruvaraj Subhashchandran #plus the dump header entry in this case 71*65d15fb3SDhruvaraj Subhashchandran #dump_header and dump_entry 72*65d15fb3SDhruvaraj Subhashchandran # shellcheck disable=SC2154 # name_dir comes from elsewhere. 73*65d15fb3SDhruvaraj Subhashchandran dumpSize=$(stat -c %s "$name_dir.bin") 74*65d15fb3SDhruvaraj Subhashchandran sizeDump=$(( dumpSize + DUMP_HEADER_ENTRY_SIZE )) 75*65d15fb3SDhruvaraj Subhashchandran printf -v hex "%x" "$sizeDump" 76*65d15fb3SDhruvaraj Subhashchandran x=${#hex} 77*65d15fb3SDhruvaraj Subhashchandran if [ $(($x % 2)) -eq 1 ]; then 78*65d15fb3SDhruvaraj Subhashchandran hex=0$hex 79*65d15fb3SDhruvaraj Subhashchandran x=${#hex} 80*65d15fb3SDhruvaraj Subhashchandran fi 81*65d15fb3SDhruvaraj Subhashchandran msize=`expr $x / 2` 82*65d15fb3SDhruvaraj Subhashchandran msize=`expr $SIZE_8 - $msize` 83*65d15fb3SDhruvaraj Subhashchandran add_null $msize 84*65d15fb3SDhruvaraj Subhashchandran for ((i=0;i<$x;i+=2)); 85*65d15fb3SDhruvaraj Subhashchandran do 86*65d15fb3SDhruvaraj Subhashchandran printf \\x${hex:$i:2} >> $FILE 87*65d15fb3SDhruvaraj Subhashchandran done 88*65d15fb3SDhruvaraj Subhashchandran} 89*65d15fb3SDhruvaraj Subhashchandran 90*65d15fb3SDhruvaraj Subhashchandran#Function to set dump id to 8 bytes format 91*65d15fb3SDhruvaraj Subhashchandranfunction get_dump_id() { 92*65d15fb3SDhruvaraj Subhashchandran # shellcheck disable=SC2154 93*65d15fb3SDhruvaraj Subhashchandran size=${#dump_id} 94*65d15fb3SDhruvaraj Subhashchandran if [ "$1" == "$OP_DUMP" ]; then 95*65d15fb3SDhruvaraj Subhashchandran nulltoadd=$(( SIZE_4 - size / 2 - size % 2 )) 96*65d15fb3SDhruvaraj Subhashchandran add_null "$nulltoadd" 97*65d15fb3SDhruvaraj Subhashchandran for ((i=0;i<size;i+=2)); 98*65d15fb3SDhruvaraj Subhashchandran do 99*65d15fb3SDhruvaraj Subhashchandran # shellcheck disable=SC2059 100*65d15fb3SDhruvaraj Subhashchandran printf "\\x${dump_id:$i:2}" >> "$FILE" 101*65d15fb3SDhruvaraj Subhashchandran done 102*65d15fb3SDhruvaraj Subhashchandran else 103*65d15fb3SDhruvaraj Subhashchandran nulltoadd=$(( SIZE_8 - size )) 104*65d15fb3SDhruvaraj Subhashchandran printf '%*s' "$nulltoadd" | tr ' ' "0" >> "$FILE" 105*65d15fb3SDhruvaraj Subhashchandran printf "%s" "$dump_id" >> "$FILE" 106*65d15fb3SDhruvaraj Subhashchandran fi 107*65d15fb3SDhruvaraj Subhashchandran} 108*65d15fb3SDhruvaraj Subhashchandran 109*65d15fb3SDhruvaraj Subhashchandran#Function to get the bmc serial number 110*65d15fb3SDhruvaraj Subhashchandranfunction getbmc_serial() { 111*65d15fb3SDhruvaraj Subhashchandran x=${#bmcSerialNo} 112*65d15fb3SDhruvaraj Subhashchandran nulltoadd=`expr $SIZE_12 - $x` 113*65d15fb3SDhruvaraj Subhashchandran printf $bmcSerialNo >> $FILE 114*65d15fb3SDhruvaraj Subhashchandran printf '%*s' $nulltoadd | tr ' ' "0" >> $FILE 115*65d15fb3SDhruvaraj Subhashchandran} 116*65d15fb3SDhruvaraj Subhashchandran 117*65d15fb3SDhruvaraj Subhashchandran#Function to fetch the hostname 118*65d15fb3SDhruvaraj Subhashchandranfunction system_name() { 119*65d15fb3SDhruvaraj Subhashchandran name=$(hostname) 120*65d15fb3SDhruvaraj Subhashchandran len=${#name} 121*65d15fb3SDhruvaraj Subhashchandran nulltoadd=$(( SIZE_32 - len )) 122*65d15fb3SDhruvaraj Subhashchandran printf "%s" "$name" >> "$FILE" 123*65d15fb3SDhruvaraj Subhashchandran add_null "$nulltoadd" 124*65d15fb3SDhruvaraj Subhashchandran} 125*65d15fb3SDhruvaraj Subhashchandran 126*65d15fb3SDhruvaraj Subhashchandran#Function to get the errorlog ID 127*65d15fb3SDhruvaraj Subhashchandranfunction get_eid() { 128*65d15fb3SDhruvaraj Subhashchandran # shellcheck disable=SC2154 # dump_type comes from elsewhere 129*65d15fb3SDhruvaraj Subhashchandran if [ "$dump_type" = "$OP_DUMP" ]; then 130*65d15fb3SDhruvaraj Subhashchandran # shellcheck disable=SC2154 # elog_id comes from elsewhere 131*65d15fb3SDhruvaraj Subhashchandran x=${#elog_id} 132*65d15fb3SDhruvaraj Subhashchandran if [ "$x" = 8 ]; then 133*65d15fb3SDhruvaraj Subhashchandran msize=$(( x / 2 )) 134*65d15fb3SDhruvaraj Subhashchandran msize=$(( SIZE_4 - msize )) 135*65d15fb3SDhruvaraj Subhashchandran for ((i=0;i<x;i+=2)); 136*65d15fb3SDhruvaraj Subhashchandran do 137*65d15fb3SDhruvaraj Subhashchandran printf "\\x${elog_id:$i:2}" >> "$FILE" 138*65d15fb3SDhruvaraj Subhashchandran done 139*65d15fb3SDhruvaraj Subhashchandran add_null "$msize" 140*65d15fb3SDhruvaraj Subhashchandran else 141*65d15fb3SDhruvaraj Subhashchandran add_null 4 142*65d15fb3SDhruvaraj Subhashchandran fi 143*65d15fb3SDhruvaraj Subhashchandran else 144*65d15fb3SDhruvaraj Subhashchandran if ! { [[ $dump_type = "$TYPE_ELOG" ]] || \ 145*65d15fb3SDhruvaraj Subhashchandran [[ $dump_type = "$TYPE_CHECKSTOP" ]]; }; then 146*65d15fb3SDhruvaraj Subhashchandran x=${#elog_id} 147*65d15fb3SDhruvaraj Subhashchandran if [ "$x" = 8 ]; then 148*65d15fb3SDhruvaraj Subhashchandran for ((i=0;i<x;i+=2)); 149*65d15fb3SDhruvaraj Subhashchandran do 150*65d15fb3SDhruvaraj Subhashchandran printf "\\x${elog_id:$i:2}" >> "$FILE" 151*65d15fb3SDhruvaraj Subhashchandran done 152*65d15fb3SDhruvaraj Subhashchandran else 153*65d15fb3SDhruvaraj Subhashchandran add_null 4 154*65d15fb3SDhruvaraj Subhashchandran fi 155*65d15fb3SDhruvaraj Subhashchandran else 156*65d15fb3SDhruvaraj Subhashchandran strpelid=$(busctl get-property $PHOSPHOR_LOGGING \ 157*65d15fb3SDhruvaraj Subhashchandran $optional_path $PEL_ENTRY $PEL_ID_PROP | cut -d " " -f 2) 158*65d15fb3SDhruvaraj Subhashchandran decpelid=$(expr "$strpelid" + 0) 159*65d15fb3SDhruvaraj Subhashchandran hexpelid=$(printf "%x" "$decpelid") 160*65d15fb3SDhruvaraj Subhashchandran x=${#hexpelid} 161*65d15fb3SDhruvaraj Subhashchandran if [ "$x" = 8 ]; then 162*65d15fb3SDhruvaraj Subhashchandran for ((i=0;i<x;i+=2)); 163*65d15fb3SDhruvaraj Subhashchandran do 164*65d15fb3SDhruvaraj Subhashchandran printf "\\x${hexpelid:$i:2}" >> "$FILE" 165*65d15fb3SDhruvaraj Subhashchandran done 166*65d15fb3SDhruvaraj Subhashchandran else 167*65d15fb3SDhruvaraj Subhashchandran add_null 4 168*65d15fb3SDhruvaraj Subhashchandran fi 169*65d15fb3SDhruvaraj Subhashchandran fi 170*65d15fb3SDhruvaraj Subhashchandran fi 171*65d15fb3SDhruvaraj Subhashchandran} 172*65d15fb3SDhruvaraj Subhashchandran 173*65d15fb3SDhruvaraj Subhashchandran#Function to get the tar size of the dump 174*65d15fb3SDhruvaraj Subhashchandranfunction tar_size() { 175*65d15fb3SDhruvaraj Subhashchandran printf -v hex "%x" "$size_dump" 176*65d15fb3SDhruvaraj Subhashchandran x=${#hex} 177*65d15fb3SDhruvaraj Subhashchandran if [ $((x % 2)) -eq 1 ]; then 178*65d15fb3SDhruvaraj Subhashchandran hex=0$hex 179*65d15fb3SDhruvaraj Subhashchandran x=${#hex} 180*65d15fb3SDhruvaraj Subhashchandran fi 181*65d15fb3SDhruvaraj Subhashchandran msize=$(( x / 2 )) 182*65d15fb3SDhruvaraj Subhashchandran msize=$(( SIZE_4 - msize )) 183*65d15fb3SDhruvaraj Subhashchandran add_null "$msize" 184*65d15fb3SDhruvaraj Subhashchandran for ((i=0;i<x;i+=2)); 185*65d15fb3SDhruvaraj Subhashchandran do 186*65d15fb3SDhruvaraj Subhashchandran # shellcheck disable=SC2059 # using 'hex' as a variable is safe here. 187*65d15fb3SDhruvaraj Subhashchandran printf "\\x${hex:$i:2}" >> "$FILE" 188*65d15fb3SDhruvaraj Subhashchandran done 189*65d15fb3SDhruvaraj Subhashchandran} 190*65d15fb3SDhruvaraj Subhashchandran 191*65d15fb3SDhruvaraj Subhashchandran#Function will get the total size of the dump without header 192*65d15fb3SDhruvaraj Subhashchandran# i.e. Dump summary size i.e. 1024 bytes + the tar file size 193*65d15fb3SDhruvaraj Subhashchandranfunction total_size() { 194*65d15fb3SDhruvaraj Subhashchandran size_dump=$(( size_dump + DUMP_SUMMARY_SIZE )) 195*65d15fb3SDhruvaraj Subhashchandran printf -v hex "%x" "$size_dump" 196*65d15fb3SDhruvaraj Subhashchandran x=${#hex} 197*65d15fb3SDhruvaraj Subhashchandran if [ $((x % 2)) -eq 1 ]; then 198*65d15fb3SDhruvaraj Subhashchandran hex=0$hex 199*65d15fb3SDhruvaraj Subhashchandran x=${#hex} 200*65d15fb3SDhruvaraj Subhashchandran fi 201*65d15fb3SDhruvaraj Subhashchandran msize=$(( x / 2 )) 202*65d15fb3SDhruvaraj Subhashchandran msize=$(( SIZE_8 - msize )) 203*65d15fb3SDhruvaraj Subhashchandran add_null "$msize" 204*65d15fb3SDhruvaraj Subhashchandran for ((i=0;i<x;i+=2)); 205*65d15fb3SDhruvaraj Subhashchandran do 206*65d15fb3SDhruvaraj Subhashchandran # shellcheck disable=SC2059 # using 'hex' as a variable is safe here. 207*65d15fb3SDhruvaraj Subhashchandran printf "\\x${hex:$i:2}" >> "$FILE" 208*65d15fb3SDhruvaraj Subhashchandran done 209*65d15fb3SDhruvaraj Subhashchandran} 210*65d15fb3SDhruvaraj Subhashchandran 211*65d15fb3SDhruvaraj Subhashchandran#Function to populate content type based on dump type 212*65d15fb3SDhruvaraj Subhashchandranfunction content_type() { 213*65d15fb3SDhruvaraj Subhashchandran type="00000000" 214*65d15fb3SDhruvaraj Subhashchandran # content type: 215*65d15fb3SDhruvaraj Subhashchandran # Hostboot dump = "20" 216*65d15fb3SDhruvaraj Subhashchandran # Hardware dump = "00" 217*65d15fb3SDhruvaraj Subhashchandran # SBE dump = "30" 218*65d15fb3SDhruvaraj Subhashchandran if [ "$dump_content_type" = "$HB_DUMP" ]; then 219*65d15fb3SDhruvaraj Subhashchandran type="00000200" 220*65d15fb3SDhruvaraj Subhashchandran elif [ "$dump_content_type" = "$HW_DUMP" ]; then 221*65d15fb3SDhruvaraj Subhashchandran type="40000000" 222*65d15fb3SDhruvaraj Subhashchandran elif [ "$dump_content_type" = "$SBE_DUMP" ]; then 223*65d15fb3SDhruvaraj Subhashchandran type="02000000" 224*65d15fb3SDhruvaraj Subhashchandran fi 225*65d15fb3SDhruvaraj Subhashchandran x=${#type} 226*65d15fb3SDhruvaraj Subhashchandran for ((i=0;i<$x;i+=2)); 227*65d15fb3SDhruvaraj Subhashchandran do 228*65d15fb3SDhruvaraj Subhashchandran # shellcheck disable=SC2059 # using 'type' as a variable is safe here. 229*65d15fb3SDhruvaraj Subhashchandran printf "\\x${type:$i:2}" >> "$FILE" 230*65d15fb3SDhruvaraj Subhashchandran done 231*65d15fb3SDhruvaraj Subhashchandran} 232*65d15fb3SDhruvaraj Subhashchandran 233*65d15fb3SDhruvaraj Subhashchandran# @brief Fetching model number and serial number property from inventory 234*65d15fb3SDhruvaraj Subhashchandran# If the busctl command fails, populating the model and serial number 235*65d15fb3SDhruvaraj Subhashchandran# with default value i.e. 0 236*65d15fb3SDhruvaraj Subhashchandranfunction get_bmc_model_serial_number() { 237*65d15fb3SDhruvaraj Subhashchandran modelNo=$(busctl get-property $INVENTORY_MANAGER $INVENTORY_PATH \ 238*65d15fb3SDhruvaraj Subhashchandran $INVENTORY_ASSET_INT Model | cut -d " " -f 2 | sed "s/^\(\"\)\(.*\)\1\$/\2/g") 239*65d15fb3SDhruvaraj Subhashchandran 240*65d15fb3SDhruvaraj Subhashchandran if [ -z "$modelNo" ]; then 241*65d15fb3SDhruvaraj Subhashchandran modelNo="00000000" 242*65d15fb3SDhruvaraj Subhashchandran fi 243*65d15fb3SDhruvaraj Subhashchandran 244*65d15fb3SDhruvaraj Subhashchandran bmcSerialNo=$(busctl call $INVENTORY_MANAGER $INVENTORY_BMC_BOARD \ 245*65d15fb3SDhruvaraj Subhashchandran org.freedesktop.DBus.Properties Get ss $INVENTORY_ASSET_INT \ 246*65d15fb3SDhruvaraj Subhashchandran SerialNumber | cut -d " " -f 3 | sed "s/^\(\"\)\(.*\)\1\$/\2/g") 247*65d15fb3SDhruvaraj Subhashchandran 248*65d15fb3SDhruvaraj Subhashchandran if [ -z "$bmcSerialNo" ]; then 249*65d15fb3SDhruvaraj Subhashchandran bmcSerialNo="000000000000" 250*65d15fb3SDhruvaraj Subhashchandran fi 251*65d15fb3SDhruvaraj Subhashchandran} 252*65d15fb3SDhruvaraj Subhashchandran 253*65d15fb3SDhruvaraj Subhashchandran#Function to add virtual file directory entry, consists of below entries 254*65d15fb3SDhruvaraj Subhashchandran####################FORMAT################ 255*65d15fb3SDhruvaraj Subhashchandran#Name Size(bytes) Value 256*65d15fb3SDhruvaraj Subhashchandran#Entry Header 8 FILE 257*65d15fb3SDhruvaraj Subhashchandran#Entry Size 2 0x0040 258*65d15fb3SDhruvaraj Subhashchandran#Reserved 10 NULL 259*65d15fb3SDhruvaraj Subhashchandran#Entry Type 2 0x0001 260*65d15fb3SDhruvaraj Subhashchandran#File Name Prefix 2 0x000F 261*65d15fb3SDhruvaraj Subhashchandran#Dump File Type 7 BMCDUMP/SYSDUMP/NAGDUMP 262*65d15fb3SDhruvaraj Subhashchandran#Separator 1 . 263*65d15fb3SDhruvaraj Subhashchandran#System Serial No 7 System serial number fetched from system 264*65d15fb3SDhruvaraj Subhashchandran#Dump Identifier 8 Dump Identifier value fetched from dump 265*65d15fb3SDhruvaraj Subhashchandran#Separator 1 . 266*65d15fb3SDhruvaraj Subhashchandran#Time stamp 14 Form should be yyyymmddhhmmss 267*65d15fb3SDhruvaraj Subhashchandran#Null Terminator 1 0x00 268*65d15fb3SDhruvaraj Subhashchandranfunction dump_file_entry() { 269*65d15fb3SDhruvaraj Subhashchandran printf "FILE " >> $FILE 270*65d15fb3SDhruvaraj Subhashchandran add_null 1 271*65d15fb3SDhruvaraj Subhashchandran printf '\x40' >> $FILE #Virtual file directory entry size 272*65d15fb3SDhruvaraj Subhashchandran add_null 11 273*65d15fb3SDhruvaraj Subhashchandran printf '\x01' >> $FILE 274*65d15fb3SDhruvaraj Subhashchandran add_null 1 275*65d15fb3SDhruvaraj Subhashchandran printf '\x0F' >> "$FILE" 276*65d15fb3SDhruvaraj Subhashchandran if [ "$dump_type" = "$OP_DUMP" ]; then 277*65d15fb3SDhruvaraj Subhashchandran printf "SYSDUMP.%s." "$serialNo" >> "$FILE" 278*65d15fb3SDhruvaraj Subhashchandran else 279*65d15fb3SDhruvaraj Subhashchandran printf "%s.%s." "$header_dump_name" "$serialNo" >> "$FILE" 280*65d15fb3SDhruvaraj Subhashchandran fi 281*65d15fb3SDhruvaraj Subhashchandran get_dump_id 282*65d15fb3SDhruvaraj Subhashchandran printf "." >> $FILE 283*65d15fb3SDhruvaraj Subhashchandran printf $dDay >> $FILE #UTC time stamp 284*65d15fb3SDhruvaraj Subhashchandran add_null 1 285*65d15fb3SDhruvaraj Subhashchandran} 286*65d15fb3SDhruvaraj Subhashchandran 287*65d15fb3SDhruvaraj Subhashchandran#Function section directory entry, consists of below entries 288*65d15fb3SDhruvaraj Subhashchandran####################FORMAT################ 289*65d15fb3SDhruvaraj Subhashchandran#Name Size(bytes) Value 290*65d15fb3SDhruvaraj Subhashchandran#Entry Header 8 SECTION 291*65d15fb3SDhruvaraj Subhashchandran#Entry Size 2 0x0030 292*65d15fb3SDhruvaraj Subhashchandran#Section Priority 2 0x0000 293*65d15fb3SDhruvaraj Subhashchandran#Reserved 4 NULL 294*65d15fb3SDhruvaraj Subhashchandran#Entry Flags 4 0x00000001 295*65d15fb3SDhruvaraj Subhashchandran#Entry Types 2 0x0002 296*65d15fb3SDhruvaraj Subhashchandran#Reserved 2 NULL 297*65d15fb3SDhruvaraj Subhashchandran#Dump Size 8 Dump size in hex + dump header 298*65d15fb3SDhruvaraj Subhashchandran#Optional Section 16 BMCDUMP/NAGDUMP/DUMP SUMMARY 299*65d15fb3SDhruvaraj Subhashchandranfunction dump_section_entry() { 300*65d15fb3SDhruvaraj Subhashchandran printf "SECTION " >> $FILE 301*65d15fb3SDhruvaraj Subhashchandran add_null 1 302*65d15fb3SDhruvaraj Subhashchandran printf '\x30' >> "$FILE" #Section entry size 303*65d15fb3SDhruvaraj Subhashchandran add_null 9 304*65d15fb3SDhruvaraj Subhashchandran if [ "$dump_type" = "$OP_DUMP" ]; then 305*65d15fb3SDhruvaraj Subhashchandran add_null 1 306*65d15fb3SDhruvaraj Subhashchandran else 307*65d15fb3SDhruvaraj Subhashchandran printf '\x01' >> "$FILE" 308*65d15fb3SDhruvaraj Subhashchandran fi 309*65d15fb3SDhruvaraj Subhashchandran add_null 1 310*65d15fb3SDhruvaraj Subhashchandran printf '\x02' >> "$FILE" 311*65d15fb3SDhruvaraj Subhashchandran add_null 2 312*65d15fb3SDhruvaraj Subhashchandran if [ "$dump_type" = "$OP_DUMP" ]; then 313*65d15fb3SDhruvaraj Subhashchandran add_null 6 314*65d15fb3SDhruvaraj Subhashchandran printf '\x04' >> "$FILE" 315*65d15fb3SDhruvaraj Subhashchandran add_null 1 316*65d15fb3SDhruvaraj Subhashchandran printf "DUMP SUMMARY" >> "$FILE" 317*65d15fb3SDhruvaraj Subhashchandran add_null 4 318*65d15fb3SDhruvaraj Subhashchandran else 319*65d15fb3SDhruvaraj Subhashchandran dump_size #Dump size 320*65d15fb3SDhruvaraj Subhashchandran printf "%s" "$header_dump_name" >> "$FILE" 321*65d15fb3SDhruvaraj Subhashchandran add_null 9 322*65d15fb3SDhruvaraj Subhashchandran fi 323*65d15fb3SDhruvaraj Subhashchandran} 324*65d15fb3SDhruvaraj Subhashchandran 325*65d15fb3SDhruvaraj Subhashchandran#Function to add dump header, consists of below entries 326*65d15fb3SDhruvaraj Subhashchandran####################FORMAT################ 327*65d15fb3SDhruvaraj Subhashchandran#Name Size(bytes) Value 328*65d15fb3SDhruvaraj Subhashchandran#Dump type 8 BMC/NAG DUMP 329*65d15fb3SDhruvaraj Subhashchandran#Dump Request time 8 Dump request time stamp (in BCD) 330*65d15fb3SDhruvaraj Subhashchandran#Dump Identifier 4 Dump identifer fetched from dump 331*65d15fb3SDhruvaraj Subhashchandran#Dump version 2 0x0210 332*65d15fb3SDhruvaraj Subhashchandran#Dump header 2 0x200 333*65d15fb3SDhruvaraj Subhashchandran#Total dump size 8 Dump size + dump header 334*65d15fb3SDhruvaraj Subhashchandran#Panel function 32 System model, feature, type and IPL mode 335*65d15fb3SDhruvaraj Subhashchandran#System Name 32 System Name (in ASCII) 336*65d15fb3SDhruvaraj Subhashchandran#Serial number 7 System serial number 337*65d15fb3SDhruvaraj Subhashchandran#Reserved 1 NULL 338*65d15fb3SDhruvaraj Subhashchandran#PLID 4 Comes from errorlog 339*65d15fb3SDhruvaraj Subhashchandran#File Header Size 2 0x70 340*65d15fb3SDhruvaraj Subhashchandran#Dump SRC Size 2 Dump SRC Size. Currently NULL 341*65d15fb3SDhruvaraj Subhashchandran#DUMP SRC 320 DUMP SRC. Currently NULL 342*65d15fb3SDhruvaraj Subhashchandran#Dump Req Type 4 Dump requester user interface type. 343*65d15fb3SDhruvaraj Subhashchandran#Dump Req ID 32 Dump requester user interface ID 344*65d15fb3SDhruvaraj Subhashchandran#Dump Req user ID 32 Dump requester user ID. 345*65d15fb3SDhruvaraj Subhashchandran# 346*65d15fb3SDhruvaraj Subhashchandran#TODO: Github issue #2639, to populate the unpopulated elements. 347*65d15fb3SDhruvaraj Subhashchandran#Note: Unpopulated elements are listed below are set as NULL 348*65d15fb3SDhruvaraj Subhashchandran#PLID 349*65d15fb3SDhruvaraj Subhashchandran#SRC size 350*65d15fb3SDhruvaraj Subhashchandran#SRC dump 351*65d15fb3SDhruvaraj Subhashchandran#Dump requestor type 352*65d15fb3SDhruvaraj Subhashchandran#Dump Req ID 353*65d15fb3SDhruvaraj Subhashchandran#Dump Req user ID 354*65d15fb3SDhruvaraj Subhashchandranfunction dump_header() { 355*65d15fb3SDhruvaraj Subhashchandran if [ $dump_type = "$TYPE_FAULTDATA" ]; then 356*65d15fb3SDhruvaraj Subhashchandran printf "FLT DUMP" >> $FILE 357*65d15fb3SDhruvaraj Subhashchandran else 358*65d15fb3SDhruvaraj Subhashchandran printf "BMC DUMP" >> $FILE 359*65d15fb3SDhruvaraj Subhashchandran fi 360*65d15fb3SDhruvaraj Subhashchandran dump_time 361*65d15fb3SDhruvaraj Subhashchandran add_null 4 #Dump Identifier 362*65d15fb3SDhruvaraj Subhashchandran printf '\x02' >> $FILE #Dump version 0x0210 363*65d15fb3SDhruvaraj Subhashchandran printf '\x10' >> $FILE 364*65d15fb3SDhruvaraj Subhashchandran printf '\x02' >> $FILE #Dump header size 0x0200 365*65d15fb3SDhruvaraj Subhashchandran add_null 1 366*65d15fb3SDhruvaraj Subhashchandran dump_size #dump size 367*65d15fb3SDhruvaraj Subhashchandran printf "$modelNo" >> "$FILE" 368*65d15fb3SDhruvaraj Subhashchandran add_null 24 369*65d15fb3SDhruvaraj Subhashchandran printf "Server-%s-SN%s" "$modelNo" "$serialNo" >> "$FILE" 370*65d15fb3SDhruvaraj Subhashchandran add_null 7 371*65d15fb3SDhruvaraj Subhashchandran printf "$serialNo" >> "$FILE" 372*65d15fb3SDhruvaraj Subhashchandran add_null 1 373*65d15fb3SDhruvaraj Subhashchandran get_eid 374*65d15fb3SDhruvaraj Subhashchandran add_null 1 375*65d15fb3SDhruvaraj Subhashchandran printf '\x70' >> "$FILE" #File header size 376*65d15fb3SDhruvaraj Subhashchandran add_null 2 # SRC size 377*65d15fb3SDhruvaraj Subhashchandran add_null 320 # SRC dump 378*65d15fb3SDhruvaraj Subhashchandran getbmc_serial 379*65d15fb3SDhruvaraj Subhashchandran add_null 68 # Dump requester details 380*65d15fb3SDhruvaraj Subhashchandran} 381*65d15fb3SDhruvaraj Subhashchandran 382*65d15fb3SDhruvaraj Subhashchandran#Function to add Dump entry, consists of below entries 383*65d15fb3SDhruvaraj Subhashchandran####################FORMAT################ 384*65d15fb3SDhruvaraj Subhashchandran#Name Size(bytes) Value 385*65d15fb3SDhruvaraj Subhashchandran#Dump Entry Version 1 0x01 386*65d15fb3SDhruvaraj Subhashchandran#BMC Dump Valid 1 0x01 387*65d15fb3SDhruvaraj Subhashchandran#No of Dump Entry 2 Number of Dump Entry 388*65d15fb3SDhruvaraj Subhashchandran# 389*65d15fb3SDhruvaraj Subhashchandranfunction dump_entry() { 390*65d15fb3SDhruvaraj Subhashchandran printf '\x01' >> $FILE #Dump entry version 391*65d15fb3SDhruvaraj Subhashchandran printf '\x01' >> $FILE #Dump valid 392*65d15fb3SDhruvaraj Subhashchandran add_null 1 393*65d15fb3SDhruvaraj Subhashchandran printf '\x10' >> $FILE #Dump entry 394*65d15fb3SDhruvaraj Subhashchandran} 395*65d15fb3SDhruvaraj Subhashchandran 396*65d15fb3SDhruvaraj Subhashchandran#Function to Hardware Dump Section 397*65d15fb3SDhruvaraj Subhashchandran####################FORMAT################## 398*65d15fb3SDhruvaraj Subhashchandran#Name Size(bytes) Value 399*65d15fb3SDhruvaraj Subhashchandran#HWDumpHeader 8 SECTION 400*65d15fb3SDhruvaraj Subhashchandran#HWDumpEntrySize 2 0x0030 401*65d15fb3SDhruvaraj Subhashchandran#HWDumpPriority 2 0x02 402*65d15fb3SDhruvaraj Subhashchandran#reserve6 4 NULL 403*65d15fb3SDhruvaraj Subhashchandran#HWDumpEntryFlag 4 0x0001 404*65d15fb3SDhruvaraj Subhashchandran#HWDumpEntryType 2 0x02 405*65d15fb3SDhruvaraj Subhashchandran#reserve7 2 NULL 406*65d15fb3SDhruvaraj Subhashchandran#reserve7a 4 NULL 407*65d15fb3SDhruvaraj Subhashchandran#HWDumpSize 4 NULL 408*65d15fb3SDhruvaraj Subhashchandran#HWDumpName[16] 16 HARDWARE DATA 409*65d15fb3SDhruvaraj Subhashchandranfunction hw_dump_section() { 410*65d15fb3SDhruvaraj Subhashchandran printf "SECTION " >> "$FILE" 411*65d15fb3SDhruvaraj Subhashchandran add_null 1 412*65d15fb3SDhruvaraj Subhashchandran printf '\x30' >> "$FILE" #Section entry size 413*65d15fb3SDhruvaraj Subhashchandran add_null 1 414*65d15fb3SDhruvaraj Subhashchandran printf '\x02' >> "$FILE" 415*65d15fb3SDhruvaraj Subhashchandran add_null 7 416*65d15fb3SDhruvaraj Subhashchandran printf '\x00' >> "$FILE" 417*65d15fb3SDhruvaraj Subhashchandran add_null 1 418*65d15fb3SDhruvaraj Subhashchandran printf '\x02' >> "$FILE" 419*65d15fb3SDhruvaraj Subhashchandran add_null 6 420*65d15fb3SDhruvaraj Subhashchandran tar_size 421*65d15fb3SDhruvaraj Subhashchandran printf "HARDWARE DATA" >> "$FILE" 422*65d15fb3SDhruvaraj Subhashchandran add_null 3 423*65d15fb3SDhruvaraj Subhashchandran} 424*65d15fb3SDhruvaraj Subhashchandran 425*65d15fb3SDhruvaraj Subhashchandran#Function to Mainstore Dump Section 426*65d15fb3SDhruvaraj Subhashchandran######################FORMAT################### 427*65d15fb3SDhruvaraj Subhashchandran#Name Size(in bytes) Value 428*65d15fb3SDhruvaraj Subhashchandran#MainstoreHeader 8 SECTION 429*65d15fb3SDhruvaraj Subhashchandran#MainstoreEntrySize 2 0x30 430*65d15fb3SDhruvaraj Subhashchandran#MainstorePriority 2 0x02 431*65d15fb3SDhruvaraj Subhashchandran#reserve8 4 NULL 432*65d15fb3SDhruvaraj Subhashchandran#MainstoreEntryFlag 4 NULL 433*65d15fb3SDhruvaraj Subhashchandran#MainstoreEntryType 2 0x01 434*65d15fb3SDhruvaraj Subhashchandran#reserve9 2 NULL 435*65d15fb3SDhruvaraj Subhashchandran#MainstoreSize 8 NULL 436*65d15fb3SDhruvaraj Subhashchandran#MainstoreName 16 HYPERVISOR DATA 437*65d15fb3SDhruvaraj Subhashchandranfunction mainstore_dump_section() { 438*65d15fb3SDhruvaraj Subhashchandran printf "SECTION " >> "$FILE" 439*65d15fb3SDhruvaraj Subhashchandran add_null 1 440*65d15fb3SDhruvaraj Subhashchandran printf '\x30' >> "$FILE" #Section entry size 441*65d15fb3SDhruvaraj Subhashchandran add_null 1 442*65d15fb3SDhruvaraj Subhashchandran printf '\x02' >> "$FILE" 443*65d15fb3SDhruvaraj Subhashchandran add_null 7 444*65d15fb3SDhruvaraj Subhashchandran printf '\x01' >> "$FILE" 445*65d15fb3SDhruvaraj Subhashchandran add_null 1 446*65d15fb3SDhruvaraj Subhashchandran printf '\x02' >> "$FILE" 447*65d15fb3SDhruvaraj Subhashchandran add_null 10 448*65d15fb3SDhruvaraj Subhashchandran printf "HYPERVISOR DATA" >> "$FILE" 449*65d15fb3SDhruvaraj Subhashchandran add_null 1 450*65d15fb3SDhruvaraj Subhashchandran} 451*65d15fb3SDhruvaraj Subhashchandran 452*65d15fb3SDhruvaraj Subhashchandran#Function for platform system dump header 453*65d15fb3SDhruvaraj Subhashchandran######################FORMAT################## 454*65d15fb3SDhruvaraj Subhashchandran#Name Size(in bytes) Value 455*65d15fb3SDhruvaraj Subhashchandran#eyeCatcher 8 SYS DUMP 456*65d15fb3SDhruvaraj Subhashchandran#requestTimestamp 8 BCD time 457*65d15fb3SDhruvaraj Subhashchandran#dumpIdentifier 4 458*65d15fb3SDhruvaraj Subhashchandran#dumpVersion 2 459*65d15fb3SDhruvaraj Subhashchandran#headerSize 2 460*65d15fb3SDhruvaraj Subhashchandran#totalDumpSize 8 461*65d15fb3SDhruvaraj Subhashchandran#machineInfo 32 462*65d15fb3SDhruvaraj Subhashchandran#systemName 32 463*65d15fb3SDhruvaraj Subhashchandran#systemSerialNumber 7 464*65d15fb3SDhruvaraj Subhashchandran#Dump Creator BMC 1 465*65d15fb3SDhruvaraj Subhashchandran#eventLogId 4 466*65d15fb3SDhruvaraj Subhashchandran#fileHeaderSize 2 467*65d15fb3SDhruvaraj Subhashchandran####################DATA NOT AVAIABLE########## 468*65d15fb3SDhruvaraj Subhashchandran#srcSize 2 469*65d15fb3SDhruvaraj Subhashchandran#dumpSrc 332 470*65d15fb3SDhruvaraj Subhashchandran#toolType 4 471*65d15fb3SDhruvaraj Subhashchandran#clientId 32 472*65d15fb3SDhruvaraj Subhashchandran#userId 32 473*65d15fb3SDhruvaraj Subhashchandran#systemDumpFlags 2 474*65d15fb3SDhruvaraj Subhashchandran#hardwareErrorFlags 2 475*65d15fb3SDhruvaraj Subhashchandran#processorChipEcid 2 476*65d15fb3SDhruvaraj Subhashchandran#hardwareObjectModel 1 477*65d15fb3SDhruvaraj Subhashchandran#chUnused 1 478*65d15fb3SDhruvaraj Subhashchandran#cecMemoryErrorFlags 8 479*65d15fb3SDhruvaraj Subhashchandran#memoryDumpStartTime 8 480*65d15fb3SDhruvaraj Subhashchandran#memoryDumpCompleteTime 8 481*65d15fb3SDhruvaraj Subhashchandran#hypVerRelMod 8 482*65d15fb3SDhruvaraj Subhashchandran#Reserved4HysrInfo 2 483*65d15fb3SDhruvaraj Subhashchandran#hypMode 1 484*65d15fb3SDhruvaraj Subhashchandran#hypDumpContentPolicy 1 485*65d15fb3SDhruvaraj Subhashchandran#Reserved4HWDInfo 2 486*65d15fb3SDhruvaraj Subhashchandran#hardwareNodalCount 2 487*65d15fb3SDhruvaraj Subhashchandran#hardwareDumpTableSize 4 488*65d15fb3SDhruvaraj Subhashchandran#hardwareDumpDataSize 4 489*65d15fb3SDhruvaraj Subhashchandran#totalHardwareDumpDataSize 4 490*65d15fb3SDhruvaraj Subhashchandran#mdrtTableSize 4 491*65d15fb3SDhruvaraj Subhashchandran#mdrtTableAddress 8 492*65d15fb3SDhruvaraj Subhashchandran#memoryDumpDataSize 8 493*65d15fb3SDhruvaraj Subhashchandran#hypModLoadMapTime 8 494*65d15fb3SDhruvaraj Subhashchandran#hardwareCollectionEndTime 8 495*65d15fb3SDhruvaraj Subhashchandran#contentType 4 496*65d15fb3SDhruvaraj Subhashchandran#failingUnitId 4 497*65d15fb3SDhruvaraj Subhashchandran#failingCappChipId 2 498*65d15fb3SDhruvaraj Subhashchandran#failingCappUnitId 1 499*65d15fb3SDhruvaraj Subhashchandran#reserve02 5 500*65d15fb3SDhruvaraj Subhashchandran#hypHRMOR 8 501*65d15fb3SDhruvaraj Subhashchandran#hypNACAAddress 8 502*65d15fb3SDhruvaraj Subhashchandran#hardwareCollectionStartTime 8 503*65d15fb3SDhruvaraj Subhashchandran#mdstTableSize 4 504*65d15fb3SDhruvaraj Subhashchandran#payloadState 4 505*65d15fb3SDhruvaraj Subhashchandran#creator BMC 1 506*65d15fb3SDhruvaraj Subhashchandran#reservedForCreator 169 507*65d15fb3SDhruvaraj Subhashchandranfunction plat_dump_header() { 508*65d15fb3SDhruvaraj Subhashchandran printf "SYS DUMP" >> "$FILE" 509*65d15fb3SDhruvaraj Subhashchandran dump_time 510*65d15fb3SDhruvaraj Subhashchandran get_dump_id "$OP_DUMP" #Dump identifier 511*65d15fb3SDhruvaraj Subhashchandran printf '\x02' >> "$FILE" 512*65d15fb3SDhruvaraj Subhashchandran printf '\x21' >> "$FILE" #Need to cross check 513*65d15fb3SDhruvaraj Subhashchandran printf '\x04' >> "$FILE" #Dump header size 0x0400 514*65d15fb3SDhruvaraj Subhashchandran add_null 1 515*65d15fb3SDhruvaraj Subhashchandran total_size 516*65d15fb3SDhruvaraj Subhashchandran printf "%s" "$modelNo" >> "$FILE" 517*65d15fb3SDhruvaraj Subhashchandran add_null 24 518*65d15fb3SDhruvaraj Subhashchandran system_name 519*65d15fb3SDhruvaraj Subhashchandran printf "%s" "$serialNo" >> "$FILE" 520*65d15fb3SDhruvaraj Subhashchandran printf '\x01' >> "$FILE" #Dump Creator BMC 521*65d15fb3SDhruvaraj Subhashchandran get_eid 522*65d15fb3SDhruvaraj Subhashchandran add_null 1 523*65d15fb3SDhruvaraj Subhashchandran printf '\xd0' >> "$FILE" #File Header size 524*65d15fb3SDhruvaraj Subhashchandran add_null 498 525*65d15fb3SDhruvaraj Subhashchandran content_type # 4 bytes 526*65d15fb3SDhruvaraj Subhashchandran add_null 44 527*65d15fb3SDhruvaraj Subhashchandran printf '\x01' >> "$FILE" # BMC indicator 528*65d15fb3SDhruvaraj Subhashchandran add_null 367 529*65d15fb3SDhruvaraj Subhashchandran} 530*65d15fb3SDhruvaraj Subhashchandran 531*65d15fb3SDhruvaraj Subhashchandran 532*65d15fb3SDhruvaraj Subhashchandran#main function 533*65d15fb3SDhruvaraj Subhashchandranfunction gen_header_package() { 534*65d15fb3SDhruvaraj Subhashchandran dump_file_entry 535*65d15fb3SDhruvaraj Subhashchandran dump_section_entry 536*65d15fb3SDhruvaraj Subhashchandran if [ "$dump_type" = "$OP_DUMP" ]; then 537*65d15fb3SDhruvaraj Subhashchandran hw_dump_section 538*65d15fb3SDhruvaraj Subhashchandran mainstore_dump_section 539*65d15fb3SDhruvaraj Subhashchandran plat_dump_header 540*65d15fb3SDhruvaraj Subhashchandran else 541*65d15fb3SDhruvaraj Subhashchandran dump_header 542*65d15fb3SDhruvaraj Subhashchandran dump_entry 543*65d15fb3SDhruvaraj Subhashchandran fi 544*65d15fb3SDhruvaraj Subhashchandran} 545*65d15fb3SDhruvaraj Subhashchandran 546*65d15fb3SDhruvaraj Subhashchandranget_bmc_model_serial_number 547*65d15fb3SDhruvaraj Subhashchandran 548*65d15fb3SDhruvaraj Subhashchandran#Run gen_header_package 549*65d15fb3SDhruvaraj Subhashchandrangen_header_package