#!/bin/bash
#
#Header for BMC DUMP
#This script will create header file only for IBM systems.
#This script will generate generic IBM dump header format.
#
#Note: The dump header will be imposed on the dump file i.e
#<obmdump file>.tar.xz only on IBM specific systems, user needs to
#separate out the header before extracting the dump.
#

#Constants
declare -rx INVENTORY_MANAGER='xyz.openbmc_project.Inventory.Manager'
declare -rx INVENTORY_PATH='/xyz/openbmc_project/inventory/system'
declare -rx INVENTORY_ASSET_INT='xyz.openbmc_project.Inventory.Decorator.Asset'
declare -rx DUMP_HEADER_ENTRY_SIZE='516'
declare -rx INVENTORY_BMC_BOARD='/xyz/openbmc_project/inventory/system/chassis/motherboard'
declare -rx SIZE_4='4'
declare -rx SIZE_8='8'
declare -rx SIZE_12='12'
declare -rx SIZE_32='32'

#Variables
declare -x FILE="/tmp/dumpheader_$EPOCHTIME"
declare -x dumpSize=$(ls -al $name_dir.tar.xz | awk '{print $5}')
declare -x modelNo=$(busctl get-property $INVENTORY_MANAGER $INVENTORY_PATH \
$INVENTORY_ASSET_INT Model | cut -d " " -f 2 | sed "s/^\(\"\)\(.*\)\1\$/\2/g")

declare -x serialNo=$(busctl get-property $INVENTORY_MANAGER $INVENTORY_PATH \
$INVENTORY_ASSET_INT SerialNumber | cut -d " " -f 2 | sed "s/^\(\"\)\(.*\)\1\$/\2/g")

declare -x dDay=$(date -d @$EPOCHTIME +'%Y%m%d%H%M%S')

declare -x bmcSerialNo=$(busctl call $INVENTORY_MANAGER $INVENTORY_BMC_BOARD \
org.freedesktop.DBus.Properties Get ss $INVENTORY_ASSET_INT \
SerialNumber | cut -d " " -f 3 | sed "s/^\(\"\)\(.*\)\1\$/\2/g")

#Function to add NULL
function add_null () {
    local a=$1
    printf '%*s' $a | tr ' ' "\0" >> $FILE
}

#Function to is to convert the EPOCHTIME collected
#from dreport into hex values and write the same in
#header.
function dump_time () {
    x=${#dDay}
    msize=`expr $x / 2`
    msize=`expr $SIZE_8 - $msize`
    for ((i=0;i<$x;i+=2));
    do
        printf \\x${dDay:$i:2} >> $FILE
    done
    add_null $msize
}

#Function to fetch the size of the dump
function dump_size () {
    #Adding 516 bytes as the total dump size is dump tar size
    #plus the dump header entry in this case
    #dump_header and dump_entry
    sizeDump=`expr $dumpSize + $DUMP_HEADER_ENTRY_SIZE`
    printf -v hex "%x" $sizeDump
    x=${#hex}
    if [ $(($x % 2)) -eq 1 ]; then
        hex=0$hex
        x=${#hex}
    fi
    msize=`expr $x / 2`
    msize=`expr $SIZE_8 - $msize`
    add_null $msize
    for ((i=0;i<$x;i+=2));
    do
        printf \\x${hex:$i:2} >> $FILE
    done
}

#Function to set dump id to 8 bytes format
function get_dump_id () {
    x=${#dump_id}
    nulltoadd=`expr $SIZE_8 - $x`
    printf '%*s' $nulltoadd | tr ' ' "0" >> $FILE
    printf $dump_id >> $FILE
}

#Function to get the bmc serial number
function getbmc_serial () {
    x=${#bmcSerialNo}
    nulltoadd=`expr $SIZE_12 - $x`
    printf $bmcSerialNo >> $FILE
    printf '%*s' $nulltoadd | tr ' ' "0" >> $FILE
}

#Function to add virtual file directory entry, consists of below entries
####################FORMAT################
#Name              Size(bytes)  Value
#Entry Header      8            FILE
#Entry Size        2            0x0040
#Reserved          10           NULL
#Entry Type        2            0x0001
#File Name Prefix  2            0x000F
#Dump File Type    7            BMCDUMP
#Separator         1            .
#System Serial No  7            System serial number fetched from system
#Dump Identifier   8            Dump Identifier value fetched from dump
#Separator         1            .
#Time stamp        14           Form should be yyyymmddhhmmss
#Null Terminator   1            0x00
function dump_file_entry () {
    printf "FILE    " >> $FILE
    add_null 1
    printf '\x40' >> $FILE #Virtual file directory entry size
    add_null 11
    printf '\x01' >> $FILE
    add_null 1
    printf '\x0F' >> $FILE
    printf "BMPDUMP.%s." "$serialNo" >> $FILE
    get_dump_id
    printf "." >> $FILE
    printf $dDay >> $FILE  #UTC time stamp
    add_null 1
}

#Function section directory entry, consists of below entries
####################FORMAT################
#Name              Size(bytes)  Value
#Entry Header      8            SECTION
#Entry Size        2            0x0030
#Section Priority  2            0x0000
#Reserved          4            NULL
#Entry Flags       4            0x00000001
#Entry Types       2            0x0002
#Reserved          2            NULL
#Dump Size         8            Dump size in hex + dump header
#Optional Section  16           BMCDUMP
function dump_section_entry () {
    printf "SECTION " >> $FILE
    add_null 1
    printf '\x30' >> $FILE #Section entry size
    add_null 9
    printf '\x01' >> $FILE
    add_null 1
    printf '\x02' >> $FILE
    add_null 2
    dump_size    #Dump size
    printf "BMCDUMP" >> $FILE
    add_null 9
}

#Function to add dump header, consists of below entries
####################FORMAT################
#Name              Size(bytes)  Value
#Dump type         8            BMC DUMP
#Dump Request time 8            Dump request time stamp (in BCD)
#Dump Identifier   4            Dump identifer fetched from dump
#Dump version      2            0x0210
#Dump header       2            0x200
#Total dump size   8            Dump size + dump header
#Panel function    32           System model, feature, type and IPL mode
#System Name       32           System Name (in ASCII)
#Serial number     7            System serial number
#Reserved          1            NULL
#PLID              4            Comes from errorlog
#File Header Size  2            0x70
#Dump SRC Size     2            Dump SRC Size. Currently NULL
#DUMP SRC          320          DUMP SRC. Currently NULL
#Dump Req Type     4            Dump requester user interface type.
#Dump Req ID       32           Dump requester user interface ID
#Dump Req user ID  32           Dump requester user ID.
#
#TODO: Github issue #2639, to populate the unpopulated elements.
#Note: Unpopulated elements are listed below are set as NULL
#PLID
#SRC size
#SRC dump
#Dump requestor type
#Dump Req ID
#Dump Req user ID
function dump_header () {
    printf "BMC DUMP" >> $FILE
    dump_time
    add_null 4 #Dump Identifier
    printf '\x02' >> $FILE #Dump version 0x0210
    printf '\x10' >> $FILE
    printf '\x02' >> $FILE #Dump header size 0x0200
    add_null 1
    dump_size  #dump size
    printf $modelNo >> $FILE
    add_null 24
    printf "Server-%s-SN-%s" "$modelNo" "$serialNo" >> $FILE
    add_null 7
    printf $serialNo >> $FILE
    add_null 1
    add_null 4 #PLID
    printf '\x70' >> $FILE #File header size
    add_null 2 # SRC size
    add_null 320 # SRC dump
    getbmc_serial
    add_null 68 # Dump requester details
}

#Function to add Dump entry, consists of below entries
####################FORMAT################
#Name               Size(bytes)  Value
#Dump Entry Version 1            0x01
#BMC Dump Valid     1            0x01
#No of Dump Entry   2            Number of Dump Entry
#
function dump_entry () {
    printf '\x01' >> $FILE #Dump entry version
    printf '\x01' >> $FILE #Dump valid
    add_null 1
    printf '\x10' >> $FILE #Dump entry
}

#main function
function gen_header_package () {
    dump_file_entry
    dump_section_entry
    dump_header
    dump_entry
}

#Run gen_header_package
gen_header_package
