#! /pkg/bin/ksh
# ----------------------------------------------------------------------
# show_tech_vpdn_fast -- VPDN show tech-support script (fast)
#
# May, 2011, Andy Karch
#
# Copyright (c) 2011-2014, 2017-2018 by cisco Systems, Inc.
# All rights reserved.
#-----------------------------------------------------------------------

. /pkg/bin/show_tech_main_fragment

__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_pfi: output file not specified"
    exit
fi

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

PLATFORM_TYPE=`uname -m`

node_name_internal=`uname -n`
node_number=`node_conversion -i $node_name_internal`

#####################################################################
#  Commands that run on SYS node (i.e. the node where the show tech
#  command is issued from)
#####################################################################

vpdn_sys_show_exec[1]='show version'
if [[ "${PLATFORM_TYPE}" == "x86_64" ]]; then
    vpdn_sys_show__ksh[1]='ng_show_version'
else
    vpdn_sys_show__ksh[1]='show_version'
fi

vpdn_sys_show_exec[2]='show logging'
vpdn_sys_show__ksh[2]='show_logging'

vpdn_sys_show_exec[3]='show running-config'
vpdn_sys_show__ksh[3]='nvgen -c -l 1 -t 1 -o 1'

vpdn_sys_show_exec[4]='show platform'
if [[ "${PLATFORM_TYPE}" == "x86_64" ]]; then
    vpdn_sys_show__ksh[4]='show_platform_sysdb'
else
    vpdn_sys_show__ksh[4]='show_platform'
fi

vpdn_sys_show_exec[5]='show redundancy'
vpdn_sys_show__ksh[5]='redcon_show'

vpdn_sys_show_exec[6]='show vpdn redundancy'
vpdn_sys_show__ksh[6]='vpdn_show redundancy -R'

vpdn_sys_show_exec[7]='show l2tpv2 redundancy'
vpdn_sys_show__ksh[7]='l2tp_show_command -R -V 0x1 -I'

vpdn_sys_show_exec[8]='show l2tpv2 tunnel disconnect history'
vpdn_sys_show__ksh[8]='l2tp_show_command -H 0x5 -V 0x1 -I'

vpdn_sys_show_exec[9]='run vpdndbg -I'
vpdn_sys_show__ksh[9]='vpdndbg -I'

vpdn_sys_show_exec[10]='run vpdndbg -W'
vpdn_sys_show__ksh[10]='vpdndbg -W'

vpdn_sys_show_exec[11]='run vpdndbg -Q'
vpdn_sys_show__ksh[11]='vpdndbg -Q'

vpdn_sys_show_exec[12]='run vpdndbg -C'
vpdn_sys_show__ksh[12]='vpdndbg -C'

vpdn_sys_show_exec[13]='show l2tpv2 srg internal'
vpdn_sys_show__ksh[13]='l2tp_show_command -g -I -V 0x1'

vpdn_sys_show__ksh[14]=''

display_sys_show_active_standby() {

    vpdn_sys_active_standby_show_exec[1]='show vpdn '$1' history failure'
    vpdn_sys_active_standby_show__ksh[1]='vpdn_show history '$2''

    vpdn_sys_active_standby_show_exec[2]='show vpdn '$1' statistics'
    vpdn_sys_active_standby_show__ksh[2]='vpdn_show stats '$2''

    vpdn_sys_active_standby_show_exec[3]='show vpdn '$1' statistics internal'
    vpdn_sys_active_standby_show__ksh[3]='vpdn_show stats -E '$2''

    vpdn_sys_active_standby_show_exec[4]='show vpdn '$1' client internal'
    vpdn_sys_active_standby_show__ksh[4]='vpdn_show client -E '$2''

    vpdn_sys_active_standby_show_exec[5]='show vpdn '$1' vrf'
    vpdn_sys_active_standby_show__ksh[5]='vpdn_show vrf '$2''

    vpdn_sys_active_standby_show_exec[6]='show vpdn '$1' tunnel destination detail'
    vpdn_sys_active_standby_show__ksh[6]='vpdn_show tunnel -D '$2''

    vpdn_sys_active_standby_show_exec[7]='show vpdn '$1' session'
    vpdn_sys_active_standby_show__ksh[7]='vpdn_show session '$2''

    vpdn_sys_active_standby_show_exec[8]='show l2tpv2 '$1' session detail'
    vpdn_sys_active_standby_show__ksh[8]='l2tp_show_command -f 0x8 '$2' -V 0x1 -I'

    vpdn_sys_active_standby_show_exec[9]='show l2tpv2 '$1' tunnel detail'
    vpdn_sys_active_standby_show__ksh[9]='l2tp_show_command -e 0x5 '$2' -V 0x1 -I'

    vpdn_sys_active_standby_show_exec[10]='show l2tpv2 '$1' class'
    vpdn_sys_active_standby_show__ksh[10]='l2tp_show_command -s '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[11]='show l2tpv2 '$1' internal'
    vpdn_sys_active_standby_show__ksh[11]='l2tp_show_command -o '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[12]='show l2tpv2 '$1' counters control history failure'
    vpdn_sys_active_standby_show__ksh[12]='l2tp_show_command -t '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[13]='show l2tpv2 '$1' counters control session fsm state current'
    vpdn_sys_active_standby_show__ksh[13]='l2tp_show_command -p 0x1 '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[14]='show l2tpv2 '$1' counters control session fsm state transition'
    vpdn_sys_active_standby_show__ksh[14]='l2tp_show_command -p 0x0 '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[15]='show l2tpv2 '$1' counters control session fsm event'
    vpdn_sys_active_standby_show__ksh[15]='l2tp_show_command -p 0x2 '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[16]='show l2tpv2 '$1' counters forwarding session'
    vpdn_sys_active_standby_show__ksh[16]='l2tp_show_command -f 0x3 '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[17]='show l2tpv2 '$1' counters control tunnel'
    vpdn_sys_active_standby_show__ksh[17]='l2tp_show_command -c 0x3 '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[18]='show l2tpv2 '$1' counters control tunnel all'
    vpdn_sys_active_standby_show__ksh[18]='l2tp_show_command -d 0x3 '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[19]='show l2tpv2 '$1' counters control tunnel authentication'
    vpdn_sys_active_standby_show__ksh[19]='l2tp_show_command -a 0x3 '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[20]='show l2tpv2 '$1' statistics'
    vpdn_sys_active_standby_show__ksh[20]='l2tp_show_command -T '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[21]='show l2tpv2 '$1' counters control ppp-disconnect statistics'
    vpdn_sys_active_standby_show__ksh[21]='l2tp_show_command -Z '$2' -V 0x1'

    vpdn_sys_active_standby_show_exec[22]='show vpdn '$1' vrf statistics'
    vpdn_sys_active_standby_show__ksh[22]='vpdn_show vrf -V '$2''

    vpdn_sys_active_standby_show_exec[23]='show vpdn '$1' mirroring'
    vpdn_sys_active_standby_show__ksh[23]='vpdn_show mirroring '$2''

    vpdn_sys_active_standby_show_exec[24]='show l2tpv2 '$1' mirroring'
    vpdn_sys_active_standby_show__ksh[24]='l2tp_show_command -D '$2' -V 0x1'

    vpdn_sys_active_standby_show__ksh[25]=''

    exec_commands vpdn_sys_active_standby_show
}

################################################################
# Commands that run only on RP
################################################################

vpdn_rp_show_exec[1]='show process vpdn_mgr detail location all'
vpdn_rp_show__ksh[1]='sysmgr_show -o -p vpdn_mgr -n all -D'

vpdn_rp_show_exec[2]='show vpdn trace manager events errors'
vpdn_rp_show__ksh[2]='vpdn_ltrace_show -g -G'

vpdn_rp_show_exec[3]='show l2tpv2 trace'
vpdn_rp_show__ksh[3]='show_l2tp_trace -V 0x1 '

vpdn_rp_show__ksh[4]=''


################################################################
# Commands that should run in parallel on all RP/LC nodes
################################################################


vpdn_rplc_show_exec[1]='show proc blocked'
if [[ "${PLATFORM_TYPE}" == "x86_64" ]]; then
    vpdn_rplc_show__ksh[1]='sh_proc_ng_blocked'
else
    vpdn_rplc_show__ksh[1]='show_processes -b'
fi

vpdn_rplc_show_exec[2]='show vpdn trace lib events errors'
vpdn_rplc_show__ksh[2]='vpdn_ltrace_show -b -B'

vpdn_rplc_show_exec[3]='show vpdn summary location $location'
vpdn_rplc_show__ksh[3]='vpdn_show summary -h $node_number'

vpdn_rplc_show_exec[4]='show vpdn summary vrf location $location'
vpdn_rplc_show__ksh[4]='vpdn_show summary -A 0x1 -h $node_number'

vpdn_rplc_show_exec[5]='show vpdn tunnel destination location $location'
vpdn_rplc_show__ksh[5]='vpdn_show tunnel -h $node_number'

vpdn_rplc_show_exec[6]='show vpdn statistics internal location $location'
vpdn_rplc_show__ksh[6]='vpdn_show stats -E -h $node_number'

vpdn_rplc_show_exec[7]='show vpdn statistics location $location'
vpdn_rplc_show__ksh[7]='vpdn_show stats -h $node_number'

vpdn_rplc_show_exec[8]='show vpdn session brief location $location'
vpdn_rplc_show__ksh[8]='vpdn_show session -B -h $node_number'

vpdn_rplc_show_exec[9]='show vpdn mirroring location $location'
vpdn_rplc_show__ksh[9]='vpdn_show session -h $node_number'

vpdn_rplc_show_exec[10]='show l2tpv2 tunnel brief location $location'
vpdn_rplc_show__ksh[10]='l2tp_show_command -e 0x0 -V 0x1 -n $node_number'

vpdn_rplc_show_exec[11]='show l2tpv2 tunnel accounting statistics location $location'
vpdn_rplc_show__ksh[11]='l2tp_show_command -Y -V 0x1 -n $node_number'

vpdn_rplc_show_exec[12]='show l2tpv2 session brief location $location'
vpdn_rplc_show__ksh[12]='l2tp_show_command -f 0x6 -V 0x1 -n $node_number'

vpdn_rplc_show__ksh[13]=''


#
# A function called display() must be provided that calls the functions to
# run the required show commands. The display() function is called in
# /pkg/bin/show_tech_comp_file_frag
#
display() {

    print_main_heading "show tech-support vpdn"

    if [ "$__cardtype" == "SYS" ]; then
        exec_commands vpdn_sys_show
        display_sys_show_active_standby
        display_sys_show_active_standby redundancy -R
    else
        case "$__cardtype" in
        "DRP")
            exec_commands vpdn_rplc_show
            exec_commands vpdn_rp_show
            ;;
        "RP")
            exec_commands vpdn_rplc_show
            exec_commands vpdn_rp_show
            ;;
        "LC")
            exec_commands vpdn_rplc_show
            ;;
        esac
    fi

    print_main_heading "show tech-support vpdn 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
