#!/pkg/bin/ksh
# ---------------------------------------------------------------------
# show_tech_lpts - show commands for show tech-support lpts
#                  spawned by show_tech_fast
#
# June 2009, Deepak Narula
#
# Copyright (c) 2009, 2012-2019 by cisco Systems, Inc.
# All rights reserved.
# --------------------------------------------------------------------

. /pkg/bin/show_tech_main_fragment

# Initialize variables.
local_node=""
local_nodeid=""

__cardtype="unspecified"

# Parse the arguments to the script.
while [ "$#" -gt "0" ]; do
    case "$1" in
        -t) __cardtype="$2"; shift 2;;
        *)  default_parser_function "$@"; shift $#;;
    esac
done

if [ "$__filename" = "unspecified" ]; then
    echo "show_tech_lpts: output file not specified"
    exit
fi

if [ "$__cardtype" == "unspecified" ]; then
    __cardtype=`node_type`
fi


# ***********************************************************
#  Show commands to be run by the show tech-support commands
# ***********************************************************

########################################
# Commands that run on once per system
########################################
# Use variable 'i' for array index
i=1
sys_exec[$((i+0))]="show running-config"
sys__ksh[$((i++))]='nvgen -c -l 1 -t 1 -i1 -o 1'

if [ "$platform" = "panini" ]; then
    sys_exec[$((i+0))]="show install active"
    sys__ksh[$((i++))]='sdr_instcmd show install active'
    sys_exec[$((i+0))]='show version'
    sys__ksh[$((i++))]='ng_show_version'
else  
    sys_exec[$((i+0))]="show install package all detail"
    sys__ksh[$((i++))]='instcmd show install package all detail'
    sys_exec[$((i+0))]='show version'
    sys__ksh[$((i++))]='show_version'
fi

sys_exec[$((i+0))]="show platform"
if [[ "$platform" = "viking" ]]; then
    sys__ksh[$((i++))]='show_platform_vkg -e'
elif [[ "$platform" = "hfr" ]]; then
    sys__ksh[$((i++))]='shelfmgr_show_hfr -e'
elif [[ "$platform" = "enxr" || "$platform" = "prp" ]]; then
    sys__ksh[$((i++))]='show_platform'
else
    sys__ksh[$((i++))]='show_platform_sysdb'
fi

sys_exec[$((i+0))]="show redundancy"
sys__ksh[$((i++))]='redcon_show'
sys_exec[$((i+0))]="show logging"
sys__ksh[$((i++))]='show_logging'
sys_exec[$((i+0))]="show lpts trace pa"
sys__ksh[$((i++))]='show_lpts_trace_pa -S'
sys_exec[$((i+0))]="show lpts trace pa detail"
sys__ksh[$((i++))]='show_lpts_trace_pa -w'
sys_exec[$((i+0))]="show lpts trace pa no-global fm"
sys__ksh[$((i++))]='show_lpts_trace_pa -S -O -J'
sys_exec[$((i+0))]="show process lpts_pa location all"
sys__ksh[$((i++))]='sysmgr_show -o -p lpts_pa -n all'
sys_exec[$((i+0))]="show lpts clients"
sys__ksh[$((i++))]='show_lpts_pa -c'
sys_exec[$((i+0))]="show lpts flows brief"
sys__ksh[$((i++))]='show_lpts_pa -f -B'
sys_exec[$((i+0))]="show lpts flows"
sys__ksh[$((i++))]='show_lpts_pa -f'
sys_exec[$((i+0))]="show lpts port-arbitrator statistics"
sys__ksh[$((i++))]='show_lpts_pa -s'
sys_exec[$((i+0))]="show lpts vrf"
sys__ksh[$((i++))]='show_lpts_pa -V'
sys_exec[$((i+0))]="show lpts bindings brief"
sys__ksh[$((i++))]='show_lpts_pa -a -B'
sys_exec[$((i+0))]="show lpts bindings timestamps"
sys__ksh[$((i++))]='show_lpts_pa -a -P'
sys_exec[$((i+0))]="show lpts ifib slices statistics"
sys__ksh[$((i++))]='show_lpts_ifib -m slices -s'
sys_exec[$((i+0))]="show lpts ifib slices"
sys__ksh[$((i++))]='show_lpts_ifib -m slices'
sys_exec[$((i+0))]="show lpts ifib entry brief"
sys__ksh[$((i++))]='show_lpts_ifib -m entries -b'
sys_exec[$((i+0))]="show lpts ifib timestamps"
sys__ksh[$((i++))]='show_lpts_ifib -m entries -T'
sys_exec[$((i+0))]=''
sys__ksh[$((i++))]=''

########################################
# Commands that run on all LCs
########################################
# Use variable 'i' for array index
i=1
lc_exec[$((i+0))]="show process pifibm_server_lc"
lc__ksh[$((i++))]='sysmgr_show -o -p pifibm_server_lc'
lc_exec[$((i+0))]="show lpts pifib entry brief"
lc__ksh[$((i++))]='show_lpts_pifib -z 0x0 -k 0x9 -a 0x1'
lc_exec[$((i+0))]="show lpts pifib entry timestamps"
lc__ksh[$((i++))]='show_lpts_pifib -z 0x0 -k 0x9 -a 0x0 -T'
lc_exec[$((i+0))]="show lpts pifib cache"
lc__ksh[$((i++))]='show_lpts_pifib -z 0x3'
lc_exec[$((i+0))]="show lpts trace global"
lc__ksh[$((i++))]='show_lpts_trace_global'
lc_exec[$((i+0))]="show lpts trace ff"
lc__ksh[$((i++))]='show_lpts_trace_ff -S'
lc_exec[$((i+0))]="show lpts trace ff detail"
lc__ksh[$((i++))]='show_lpts_trace_ff -w'
lc_exec[$((i+0))]="show lpts trace ff ifmgr"
lc__ksh[$((i++))]='show_lpts_trace_ff -I'
lc_exec[$((i+0))]='show lpts trace library process clns error'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x4 -R'
lc_exec[$((i+0))]='show lpts trace library process clns event'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x4 -V'
lc_exec[$((i+0))]='show lpts trace library process raw error'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x3 -R'
lc_exec[$((i+0))]='show lpts trace library process raw event'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x3 -V'
lc_exec[$((i+0))]='show lpts trace library process tcp error'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x1 -R'
lc_exec[$((i+0))]='show lpts trace library process tcp event'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x1 -V'
lc_exec[$((i+0))]='show lpts trace library process udp error'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x2 -R'
lc_exec[$((i+0))]='show lpts trace library process udp event'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x2 -V'
lc_exec[$((i+0))]='show lpts trace library process ipv4-io error'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x5 -R'
lc_exec[$((i+0))]='show lpts trace library process ipv4-io event'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x5 -V'
lc_exec[$((i+0))]='show lpts trace library process ipv6-io error'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x6 -R'
lc_exec[$((i+0))]='show lpts trace library process ipv6-io event'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0x6 -V'
lc_exec[$((i+0))]='show lpts trace library process ipv6-nd error'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0xb -R'
lc_exec[$((i+0))]='show lpts trace library process ipv6-nd event'
lc__ksh[$((i++))]='lpts_show_ltrace -P 0xb -V'
lc_exec[$((i+0))]='show lpts trace ff ifmgr'
lc__ksh[$((i++))]='show_lpts_trace_ff -I'
lc_exec[$((i+0))]='show lpts pifib cache optimized'
lc__ksh[$((i++))]='show_lpts_pifib -z 0x6'
lc_exec[$((i+0))]='show lpts pifib interface-cache'
lc__ksh[$((i++))]='show_lpts_pifib -z 0x4'
lc_exec[$((i+0))]='show lpts pifib dynamic-flows statistics location $local_node'
lc__ksh[$((i++))]='show_lpts_pifib -z 0x7'
#lc_exec[$((i+0))]='show lpts pifib dynamic-flows entries hardware location $local_node'
#lc__ksh[$((i++))]='show_lpts_pifib -z 0x8 -Q 0x1'
#lc_exec[$((i+0))]='show lpts pifib dynamic-flows entries software location $local_node'
#lc__ksh[$((i++))]='show_lpts_pifib -z 0x8 -Q 0x2'
#lc_exec[$((i+0))]='show lpts pifib dynamic-flows entries pending location $local_node'
#lc__ksh[$((i++))]='show_lpts_pifib -z 0x8 -Q 0x3'
#lc_exec[$((i+0))]='show lpts pifib dynamic-flows entries all location $local_node'
#lc__ksh[$((i++))]='show_lpts_pifib -z 0x8 -Q 0x0'
#lc_exec[$((i+0))]='show lpts pifib dynamic-flows cached def-queue location $local_node'
#lc__ksh[$((i++))]='show_lpts_pifib -z 0x9 -Q 0x0'
#lc_exec[$((i+0))]='show lpts pifib dynamic-flows cached hw-queue location $local_node'
#lc__ksh[$((i++))]='show_lpts_pifib -z 0x9 -Q 0x1'
#lc_exec[$((i+0))]='show lpts pifib dynamic-flows cached sw-queue location $local_node'
#lc__ksh[$((i++))]='show_lpts_pifib -z 0x9 -Q 0x2'
#lc_exec[$((i+0))]='show lpts pifib dynamic-flows cached hw-entries location $local_node'
#lc__ksh[$((i++))]='show_lpts_pifib -z 0x9 -Q 0x4'
lc_exec[$((i+0))]=''
lc__ksh[$((i++))]=''

########################################
# Commands that run on all DRPs
########################################
# Use variable 'i' for array index
i=1
drp_exec[$((i+0))]="show process lpts_fm"
drp__ksh[$((i++))]='sysmgr_show -o -p lpts_fm'
drp_exec[$((i+0))]="show process pifibm_server_rp"
drp__ksh[$((i++))]='sysmgr_show -o -p pifibm_server_rp'
drp_exec[$((i+0))]="show lpts trace fm"
drp__ksh[$((i++))]='show_lpts_trace_fm -S'
drp_exec[$((i+0))]="show lpts trace fm detail"
drp__ksh[$((i++))]='show_lpts_trace_fm -w'
drp_exec[$((i+0))]='show lpts ifib optimized'
drp__ksh[$((i++))]='show_lpts_ifib -m optimized'
drp_exec[$((i+0))]='show lpts ifib optimized brief statistics'
drp__ksh[$((i++))]='show_lpts_ifib -m optimized -b -s'
drp_exec[$((i+0))]='show lpts pifib optimized timestamps'
drp__ksh[$((i++))]='show_lpts_pifib -z 0x5 -k 0x9 -a 0x0 -T'
drp_exec[$((i+0))]='show lpts pifib optimized brief'
drp__ksh[$((i++))]='show_lpts_pifib -z 0x5 -k 0x9 -a 0x1'
drp_exec[$((i+0))]='show lpts pifib optimized brief statistics'
drp__ksh[$((i++))]='show_lpts_pifib -z 0x5 -k 0x9 -a 0x2'
drp_exec[$((i+0))]='show tcp brief'
drp__ksh[$((i++))]='tcp_cmd_client show brief'
drp_exec[$((i+0))]='show udp brief'
drp__ksh[$((i++))]='udp_cmd_client show brief'
drp_exec[$((i+0))]='show raw brief'
drp__ksh[$((i++))]='raw_show show brief'
drp_exec[$((i+0))]='show tcp extended-filters location $local_node'
drp__ksh[$((i++))]='lpts_show_pcb -p 0x1 -s 0x0 -N $local_nodeid -e /oper/tcp_cmd_edm/'
drp_exec[$((i+0))]='show udp extended-filters location $local_node'
drp__ksh[$((i++))]='lpts_show_pcb -p 0x2 -s 0x0 -N $local_nodeid -e /oper/udp_cmd_edm/'
drp_exec[$((i+0))]='show raw extended-filters location $local_node'
drp__ksh[$((i++))]='lpts_show_pcb -p 0x3 -f 0x0 -N $local_nodeid -e /oper/raw/'
drp_exec[$((i+0))]=''
drp__ksh[$((i++))]=''

#############################################################
# Source platform specific commands
# Note we are not adding the platform commands here because 
# sometimes they differ for different platforms. LPTS PI will
# source the platform specific script file and execute the 
# commands. Note: file name should be same for all platforms
if [ -f /pkg/bin/show_tech_lpts_platform ]; then
    . /pkg/bin/show_tech_lpts_platform
else
    . /pkg/bin/show_tech_lpts_platform_backup
fi

do_find_node_details() {

    plat=`uname`
    if [[ "$plat" = "QNX" || "$platform" = "enxr" ]]; then
        location=`uname -n`
        local_node=`uname -n`
    else
        location=`node_list_generation -f MY`
        local_node=`node_conversion -N $location`
    fi

    local_nodeid=`node_conversion -i $local_node`
}

do_pafm_mem() {
if [ "$platform" = "panini" ]; then
    print_heading "show process memory \| inc lpts_pa"
    sh_proc_memory | grep -E lpts_pa
    print_heading "show process memory \| inc lpts_fm"
    sh_proc_memory | grep -E lpts_fm
    print_heading "show process memory \| inc pifibm_server_rp"
    sh_proc_memory | grep -E pifibm_server_rp
else
    print_heading "show process memory \| inc lpts_pa"
    show_processes -m | grep -E lpts_pa
    print_heading "show process memory \| inc lpts_fm"
    show_processes -m | grep -E lpts_fm
    print_heading "show process memory \| inc pifibm_server_rp"
    show_processes -m | grep -E pifibm_server_rp
fi
    print_heading "show process pifibm_server_rp"
    sysmgr_show -o -p pifibm_server_rp
}

do_pifibm_mem() {
if [ "$platform" = "panini" ]; then
    print_heading "show process memory \| inc pifibm_server_lc"
    sh_proc_memory | grep -E pifibm_server_lc
else 
    print_heading "show process memory \| inc pifibm_server_lc"
    show_processes -m | grep -E pifibm_server_lc
fi
    print_heading "show process pifibm_server_lc"
    sysmgr_show -o -p pifibm_server_lc
}

display() {
    print_main_heading "show tech-support lpts"

    check_platform_type=`get_platform_type`

    if [ "$__cardtype" == "SYS" ]; then
        exec_commands sys
    else
        case "$__cardtype" in
        "RP"|"DRP")
            do_find_node_details
            exec_commands drp
            exec_commands lc
            do_pafm_mem
            if [ "$check_platform_type" = "ASR9k" ]; then
                do_platform_asr9k
            fi
            ;;
        "LC")
            do_find_node_details
            exec_commands lc
            exec_commands platform_lc
            do_pifibm_mem
            if [ "$check_platform_type" = "ASR9k" ]; then
                do_platform_asr9k
            fi
            ;;
        esac
    fi

    print_main_heading "show tech-support lpts complete"
}

# Run the appropriate function depending on the node specified and if a
# file is specified write the output to that file. We need to redirect
# stderr to stdout when writing to a file because some of the show
# commands output to stderr instead of stdout
. /pkg/bin/show_tech_file_fragment
