xref: /openbmc/openpower-debug-collector/dump/tools/common/include/gendumpheader (revision 65d15fb34594a29c2ffa4c14f5b8370e0a65c81e)
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