#!/pkg/bin/ksh
# --------------------------------------------------------------------
# perf_meas_show_tech
#
# June 2017 - Wail Khemir
#
# Copyright (c) 2017-2023 by cisco Systems, Inc.
# All rights reserved.
#---------------------------------------------------------------------
. /pkg/bin/show_tech_main_fragment

# Initialise any variables used.
__cardtype="unspecified"

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

int_node_name=$showtech_node_name
ext_node_name=`node_conversion -E $int_node_name`
fq_nodeid=`node_conversion -i $int_node_name`
location=$ext_node_name

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

OS_STRING=`uname -s`
PLATFORM_VARIANT=`echo $(grep "platform" /proc/cmdline | cut -d'=' -f3 | cut -d' ' -f1)`

#### Following commands are ran for every RP/LC ######

i=1
j=1
pm_local_summary_show_exec[$((i++))]='show performance-measurement summary detail private location $location'
pm_local_summary_show__ksh[$((j++))]='perf_meas_show -c 0x9 -d -p -N $fq_nodeid'

# PM traces
i=1
j=1
pm_local_trace_exec[$((i++))]='show performance-measurement trace unique location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -u -i $fq_nodeid -T 0xc'

pm_local_trace_exec[$((i++))]='show performance-measurement trace event location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0x1'

pm_local_trace_exec[$((i++))]='show performance-measurement trace proc-fsm location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0x2'

pm_local_trace_exec[$((i++))]='show performance-measurement trace error location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0x3'

pm_local_trace_exec[$((i++))]='show performance-measurement trace notif location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0x4'

pm_local_trace_exec[$((i++))]='show performance-measurement trace resp location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0x5'

pm_local_trace_exec[$((i++))]='show performance-measurement trace pkts location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0x7'


pm_local_trace_exec[$((i++))]='show performance-measurement trace resp-pkt location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0x8'


pm_local_trace_exec[$((i++))]='show performance-measurement trace api location $location'
pm_local_trace__ksh[$((j++))]='pm_api_show_ltrace -i $fq_nodeid'

pm_local_trace_exec[$((i++))]='show performance-measurement trace session-create location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0xb'

pm_local_trace_exec[$((i++))]='show performance-measurement trace protect location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0xc'

pm_local_trace_exec[$((i++))]='show performance-measurement trace npu-offload location $location'
pm_local_trace__ksh[$((j++))]='perf_meas_ltrace -i $fq_nodeid -T 0xe'

pm_local_trace_exec[$((i++))]='show performance-measurement platform trace all wrapping location $location'
pm_local_trace__ksh[$((j++))]='pm_offload_show_ltrace -E -N -w -i $fq_nodeid'

pm_local_trace_exec[$((i++))]='show spio platform trace pm rxpkt wrapping location $location'
pm_local_trace__ksh[$((j++))]='spio_pd_show_ltrace -w -Q -R -i $fq_nodeid'

# PM show commands
i=1
j=1
# Interface
pm_local_show_exec[$((i++))]='show performance-measurement interfaces detail private location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x1 -d -p -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement counters interfaces detail private location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x2 -d -p -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history probe-computation interfaces location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x4 -t 0x3 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history aggregation interfaces location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x5 -t 0x3 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history advertisement interfaces location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x14 -t 0x3 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement responder interfaces location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x7 -N $fq_nodeid'


# SR Policy
pm_local_show_exec[$((i++))]='show performance-measurement sr-policy detail verbose private location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x11 -d -p -v -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history aggregation sr-policy location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x5 -t 0x13 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history probe-computation sr-policy location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x4 -t 0x13 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history advertisement sr-policy location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x14 -t 0x13 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history liveness-notification sr-policy location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x1b -t 0x13 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement counters sr-policy detail private location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x12 -d -p -N $fq_nodeid'


# RSVP-TE
pm_local_show_exec[$((i++))]='show performance-measurement rsvp-te detail private location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0xf -d -p -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement counters rsvp-te detail private location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x10 -d -p -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history aggregation rsvp-te location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x5 -t 0x15 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history probe rsvp-te location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x4 -t 0x15 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history advertisement rsvp-te location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x14 -t 0x15 -N $fq_nodeid'

# Endpoint
pm_local_show_exec[$((i++))]='show performance-measurement endpoint detail private location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x1a -d -p -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement counters endpoint detail private location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x1c -d -p -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history probe endpoint location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x4 -t 0x1d -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history aggregation endpoint location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x5 -t 0x1d -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history advertisement endpoint location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x14 -t 0x1d -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement history liveness-notification endpoint location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x1b -t 0x1d -N $fq_nodeid'

# General
pm_local_show_exec[$((i++))]='show performance-measurement responder summary location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0xa -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement responder counters location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x8 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement rx-thread location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0xb -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement chkpt location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0xc -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement proc-fsm location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0xd -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement counters batch location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0xe -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement sessions detail location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x6 -d $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement profile location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x17 -N $fq_nodeid'

#capability
pm_local_show_exec[$((i++))]='show performance-measurement pps detail location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x1e -d -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement local-capability location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x1f $fq_nodeid'

#pm_local_show_exec[$((i++))]='show performance-measurement endpoint detail verbose private location $location'
#pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x1a -d -p -v -N $fq_nodeid'
#npu offload
pm_local_show_exec[$((i++))]='show performance-measurement npu-db location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x20 -N $fq_nodeid'

pm_local_show_exec[$((i++))]='show performance-measurement distribution-retry-queue location $location'
pm_local_show__ksh[$((j++))]='perf_meas_show -c 0x22 $fq_nodeid'

# Other show commands
pm_local_show_exec[$((i++))]='show im database location $location'
pm_local_show__ksh[$((j++))]='im_show database -h $fq_nodeid'

pm_local_show_exec[$((i++))]='show route 127.0.0.1/8 detail'
pm_local_show__ksh[$((j++))]='show_ipv4_rib -X 0x1 -Y 0x1 -Z ________ -V ________ -p 7f000001 -l 0x8 -3 ipv4 ________'


pm_local_show_exec[$((i++))]='show route 127.0.0.1/8 detail standby'
pm_local_show__ksh[$((j++))]='show_ipv4_rib -X 0x1 -Y 0x1 -Z ________ -V ________ -p 7f000001 -l 0x8 -t -3 ipv4 ________'

pm_local_show_exec[$((i++))]='show route ipv6 ::ffff:127.0.0.0 detail'
pm_local_show__ksh[$((j++))]='show_ipv6_rib -X 0x2 -Y 0x1 -Z ________ -V ________ -p ::ffff:127.0.0.0 -3 ipv6 ________'

pm_local_show_exec[$((i++))]='show route ipv6 ::ffff:127.0.0.0 detail standby'
pm_local_show__ksh[$((j++))]='show_ipv6_rib -X 0x2 -Y 0x1 -Z ________ -V ________ -p ::ffff:127.0.0.0 -t -3 ipv6 ________'

pm_local_show_exec[$((i++))]='show process blocked'
if [ "$platform" = "panini" ]
then
    pm_local_show__ksh[$((j++))]='sh_proc_ng_blocked'
else
    pm_local_show__ksh[$((j++))]='show_processes -b'
fi

pm_local_show_exec[$((i++))]='show process perf_meas location $location'
pm_local_show__ksh[$((j++))]='sysmgr_show -o -p perf_meas'

pm_local_show_exec[$((i++))]='show process ifmgr location $location'
pm_local_show__ksh[$((j++))]='sysmgr_show -o -p ifmgr'

pm_local_show_exec[$((i++))]='show udp statistics clients location $location'
pm_local_show__ksh[$((j++))]='udp_cmd_client show statistics -c -l $fq_nodeid'

pm_local_show_exec[$((i++))]='show lpts pifib entry brief statistic location $location'
pm_local_show__ksh[$((j++))]='show_lpts_pifib -z 0x0 -k 0x9 -a 0x2 -i $fq_nodeid'

####### End of RP/LC commands #######

###### Following commands only run RP ##########

i=1
j=1
#Only avaiable on RP
pm_rp_show_exec[$((i++))]='show performance-measurement distribution'
pm_rp_show__ksh[$((j++))]='perf_meas_show -c 0x18'

#Only avaiable on RP
pm_rp_show_exec[$((i++))]='show performance-measurement dr-chkpt'
pm_rp_show__ksh[$((j++))]='perf_meas_show -c 0x19'

pm_rp_show_exec[$((i++))]='show performance-measurement dr-db-chkpt'
pm_rp_show__ksh[$((j++))]='perf_meas_show -c 0x21'
###### End of RP only commands ##########

###### Following commands are platform dependent ##########
i=1
j=1
if [[ "$platform" != "enxr" ]]; then
   pd_lc_show_exec[$((i++))]='show lpts pifib hardware police location $location'
   if [[ "$PLATFORM_VARIANT" = "viking" || "$PLATFORM_VARIANT" = "asr9k" || "$PLATFORM_VARIANT" = "hfr" ]]; then
       #asr9k(viking),  hfr(crs, topaz)
       pd_lc_show__ksh[$((j++))]='platform_show_pifib -z 0x6 -i $fq_nodeid'
   else 
       #ncs5*, ncs6k, spitfire
       pd_lc_show__ksh[$((j++))]='platform_show_pifib -z 0x7 -i $fq_nodeid'
   fi

   pd_lc_show_exec[$((i++))]='show lpts pifib hardware entry brief location $location'
   pd_lc_show__ksh[$((j++))]='platform_show_pifib -z 0x2 -i $fq_nodeid'

   pd_lc_show_exec[$((i++))]='show controllers npu voq-usage interface all instance all location $location'
   pd_lc_show__ksh[$((j++))]='dpa_qosea_voq_show -v x -i 0x10 -n $fq_nodeid -t n -p 0x0'
   #RP/0/RP0/CPU0:F5-5501-SE#show controllers npu voq-usage interface all instance all loca$
   #Thu Apr  9 03:07:59.701 UTC
   #Not supported on this location 0/RP0/CPU0 or Data not found
   #
   #-------------------------------------------------------------------
   #Node ID: 0/0/CPU0
   #Intf         Intf     NPU NPU  PP   Sys   VOQ   Flow   VOQ    Port
   #name         handle    #  core Port Port  base  base   port   speed
   #             (hex)                                     type
   #----------------------------------------------------------------------
   #Hu0/0/1/3    8         0   1    1     1   1344   5376 local   100G
   #Hu0/0/1/2    28        0   1    5     5   1368   5400 local   100G
   #Hu0/0/1/1    48        0   1    9     9   1352   5384 local   100G
   #Hu0/0/1/0    68        0   1   13    13   1360   5392 local   100G
   #Te0/0/0/14   88        0   0   17    17   1184   5544 local    10G
   #Te0/0/0/15   90        0   0   18    18   1192   5552 local    10G
   #Te0/0/0/12   98        0   0   19    19   1168   5528 local    10G
   #Te0/0/0/13   a0        0   0   20    20   1176   5536 local    10G
   #Te0/0/0/9    a8        0   0   21    21   1144   5504 local    10G
   #Te0/0/0/8    b0        0   0   22    22   1136   5496 local    10G
   #Te0/0/0/11   b8        0   0   23    23   1160   5520 local    10G
   #Te0/0/0/10   c0        0   0   24    24   1152   5512 local    10G
   #Te0/0/0/6    c8        0   0   25    25   1120   5480 local    10G:w

   #Take the NPU# and  core#  from and output of the  above command on RX 
   #interface and run the following command to check the  IPV6 PM-TWAMP packet.
   #show  control fia  diag <NPU#> "diag last core=<core#>" location <LC nodeid>
   #eg. show controllers fia diagshell 0 "diag last core=0" location 0/0/CPU0
   # Node ID: 0/0/CPU0
   #
   #Core 0:
   #Last packet information: is_valid=1  tm_port=232
   #pp_port=240  src_syst_port=296  port_header_type=tm packet_size=68
   #Packet start, offset in bytes:
   #00: 70e8800c 00001000 00000000 00000000 00000000 00000000 00000000 00890200
   #20: 2f002000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
   #40: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
   #60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
   #

fi

###### End of platform dependent commands ##########

##### PD commands #####
i=1
j=1

if [[ "$platform" != "enxr" ]]; then
   pd_rplc_show_exec[$((i++))]='show ntp status'
   pd_rplc_show__ksh[$((j++))]='ntp_command show -s'
   
   pd_rplc_show_exec[$((i++))]='show ptp platform servo'
   pd_rplc_show__ksh[$((j++))]='ptp_pd_show_servo'

   pd_rplc_show_exec[$((i++))]='show netio rates'
   pd_rplc_show__ksh[$((j++))]='netio_show -r'

   pd_lc_show_exec[$((i++))]='show spp node-counters location $location'
   pd_lc_show__ksh[$((j++))]='spp_sysdb_get -L $fq_nodeid node_counters'
fi

##### End of PD commands #####

###### Following commands are global ##########
i=1
j=1

basic_exec[$((i++))]='show performance-measurement summary detail location all'
basic__ksh[$((j++))]='perf_meas_show -c 0x9 -d -A'

basic_exec[$((i++))]='show running-config'
basic__ksh[$((j++))]='nvgen -c -l 1 -t 1 -o 1'

basic_exec[$((i++))]='show platform'
if [ "$platform" = "panini" ]
then
    basic__ksh[$((j++))]='show_platform_sysdb'
else
    basic__ksh[$((j++))]='show_platform'
fi

basic_exec[$((i++))]='show install active'
if [[ "$platform" = "panini" ]]; then
    basic__ksh[$((j++))]='sdr_instcmd show install active'
else
    basic__ksh[$((j++))]='instcmd show install active'
fi

basic_exec[$((i++))]='show version'
if [[ "$platform" = "panini" ]]; then
    basic__ksh[$((j++))]='ng_show_version'
else
    basic__ksh[$((j++))]='show_version'
fi

basic_exec[$((i++))]='show context'
if [[ "$platform" = "panini" ]]; then
    basic__ksh[$((j++))]='corehelper_context -c 0x1 -n all'
else
    basic__ksh[$((j++))]='dumper_context -c 0x1 -n all'
fi

basic_exec[$((i++))]='show logging process perf_meas'
basic__ksh[$((j++))]='show_logging -p perf_meas'

basic_exec[$((i++))]='show ipv4 interface brief'
basic__ksh[$((j++))]='show_ip_interface -b -v default'

basic_exec[$((i++))]='show ipv6 interface brief'
basic__ksh[$((j++))]='show_ipv6_interface -b -v default'

basic_exec[$((i++))]='show redundancy'
basic__ksh[$((j++))]='redcon_show'

basic_exec[$((i++))]='show configuration history detail'
basic__ksh[$((j++))]='cfgmgr_show_history -s -f -n 0x5dc -t all -d'

basic_exec[$((i++))]='show ospf interface'
basic__ksh[$((j++))]='ospf_show -T + -v + -l active -I -X 0x0 -Y 0x0 -f 0x0 -b 0x0'

basic_exec[$((i++))]='show isis interface'
basic__ksh[$((j++))]='isis_show --cmd interface'

basic_exec[$((i++))]='show adjacency'
basic__ksh[$((j++))]='aib_show_command'

basic_exec[$((i++))]='show isis adjacency'
basic__ksh[$((j++))]='isis_show --cmd adjacency'

basic_exec[$((i++))]='show ospf neighbor'
basic__ksh[$((j++))]='ospf_show -T + -v + -l active -N -X 0x0 -Y 0x0 -f 0x0 -i 0x0 -a 0x0 -d 0x0 -j 0x0'

basic_exec[$((i++))]='show mpls traffic-eng topology'
basic__ksh[$((j++))]='mpls_te_show 0x2'

basic_exec[$((i++))]='show segment-routing traffic-eng policy detail'
basic__ksh[$((j++))]='xtc_show -c 0x4 -m 0x3'

basic_exec[$((i++))]='show spp client detail'
basic__ksh[$((j++))]='spp_sysdb_get -M client_status_detail'

basic_exec[$((i++))]='show ntp drift'
basic__ksh[$((j++))]='ntp_command show -c'

###### End of global commands ##########

###### Following commands are for debug platform check on PD show commands ##########
i=1
j=1

pm_debug_exec[$((i++))]='DEBUG INFO'
pm_debug__ksh[$((j++))]='echo machine = $machine, platform = $platform, os_kernel = $os_kernel, platform_variant = $platform_variant, PLATFORM_VARIANT = $PLATFORM_VARIANT, cardtype = $__cardtype'
###### End of debug command   ##########

#############################################################
#  Display function for show tech testing Script       #
#############################################################
display() {
    print_main_heading "show tech-support performance-measurement"

    if [ "$__cardtype" = "SYS" ]; then
        exec_commands basic
    else
        exec_commands pm_local_summary_show
        exec_commands pm_local_trace
        exec_commands pm_local_show
        exec_commands pd_rplc_show 
        if [ "$__cardtype" = "LC" ]; then
            exec_commands pd_lc_show 
        else 
            if [[ "$__cardtype" = "RP" || "$__cardtype" = "DRP" ]]; then 
                exec_commands pm_rp_show
            fi
        fi
    fi

    exec_commands pm_debug
    print_main_heading "show tech-support performance-measurement 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

