#!/bin/bash

G4XDIAGNOSTICS=/opt/G4XTOOLS/Linux/g4Xdiagnostics.`uname -m`

if [ -f $G4XDIAGNOSTICS ]; then
    rm -rf /tmp/bcm_sosreport_g4x_otc
    mkdir /tmp/bcm_sosreport_g4x_otc

    chmod +x $G4XDIAGNOSTICS

    INDEXFILE=$( mktemp )
    $G4XDIAGNOSTICS --list | grep -E ' +[0-9]+\).+MPI *$' | awk '{ print $1; }' | sed 's/)//' > $INDEXFILE

    if [ $( stat -c '%s' $INDEXFILE) -eq 0 ] && [ -f /opt/G4XTOOLS/Linux/sdrv/linux/sliff.ko ]; then
        rmmod sliff
        insmod /opt/G4XTOOLS/Linux/sdrv/linux/sliff.ko
        $G4XDIAGNOSTICS --list | grep -E ' +[0-9]+\).+MPI *$' | awk '{ print $1; }' | sed 's/)//' > $INDEXFILE
    fi

    if [ $( stat -c '%s' $INDEXFILE) -gt 0 ]; then
        $G4XDIAGNOSTICS -i 1 otc -o /tmp/bcm_sosreport_g4x_otc

        for index in $( cat $INDEXFILE ); do
            $G4XDIAGNOSTICS -i $index show -ftbl | grep 'Core Dump' | grep -q 'No$'

            if [ $? -eq 0 ]; then
                $G4XDIAGNOSTICS -i $index cli coredump generate
            fi
        done

        for index in $( cat $INDEXFILE ); do
            $G4XDIAGNOSTICS -i $index cli coredump > /tmp/bcm_sosreport_g4x_otc/${index}-switch/coredump.txt
        done
    else
        echo Could not find any PCIe switch devices
    fi

    rm $INDEXFILE
fi