#!/pkg/bin/ksh
###############################################
# 
# mcast_ltrace_resize
# Utility to increase size of ltrace files
# This tool is based on steps given @
# http://wiki-eng.cisco.com/engwiki/IOX_2dLTRACE_2dDYNAMIC
# 
# Currently catered for multicast related processes
# on the ASR9k platform
#
# Kiran Prakash, kiprakas@cisco.com
#
# Copyright (c) 2013-2018 by cisco Systems, Inc.
###############################################

#
# Sample usage:
# 
# For RSP process:
#
# router> run
# ksh# mcast_ltrace_resize mgid 1024000
#
# For LC process:
#
# router> run attach 0/0/cpu0
# ksh# mcast_ltrace_resize mfibv4 1024000
#

print_usage() {
    echo "Usage: ./mcast_ltrace_resize.pl <proc name> <additional entries>"; 
    echo "Proc name options: mfibv4 mfibv6 mrib mrib6 mgid snoop";
}

if [[ -n $(uname -a | grep 'x86_64') ]]; then
    path=/dev/shmem/ltrace/
    echo "Detected 64-bit machine, using $path"
else
    path=/tmp/ltrace/ 
    echo "Detected 32-bit machine, using $path"
fi

if [[ $# -lt 2 ]]; then
    echo "Missing arguments";
    print_usage
    exit
else
    if [[ $2 -lt 1 ]]; then
        echo "Invalid size";
        print_usage
        exit
    fi
    if [[ $1 = "mfibv4" ]]; then
        cd "$path""mfwd_ipv4_hw"
        pwd
        ltrace_ctrl -e error $2 102400
        ltrace_ctrl -e event $2 102400
        ltrace_ctrl -e fevent $2 102400 
        ltrace_ctrl -e init $2 102400
        ltrace_ctrl -e netio $2 102400
        exit
    fi
    if [[ $1 = "mfibv6" ]]; then
        cd "$path""mfwd_ipv6_hw"
        pwd
        ltrace_ctrl -e error $2 102400
        ltrace_ctrl -e event $2 102400
        ltrace_ctrl -e fevent $2 102400 
        ltrace_ctrl -e init $2 102400
        ltrace_ctrl -e netio $2 102400
        exit
    fi
    if [[ $1 = "mrib" ]]; then
        cd "$path""mrib"
        pwd 
        ltrace_ctrl -e plat_mrib_main $2 102400
        ltrace_ctrl -e plat_mrib_main_err $2 102400
        ltrace_ctrl -e plat_lmrib_enc_rpf $2 102400
        ltrace_ctrl -e plat_lmrib_enc_rpf_err $2 102400
        ltrace_ctrl -e plat_mrib_cluster $2 102400
        ltrace_ctrl -e plat_mrib_cluster_err $2 102400
        ltrace_ctrl -e plat_other $2 102400
        ltrace_ctrl -e plat_other_err $2 102400
        exit
    fi
    if [[ $1 = "mrib6" ]]; then
        cd "$path""mrib6"
        pwd
        ltrace_ctrl -e plat_mrib_main $2 102400
        ltrace_ctrl -e plat_mrib_main_err $2 102400
        ltrace_ctrl -e plat_lmrib_enc_rpf $2 102400
        ltrace_ctrl -e plat_lmrib_enc_rpf_err $2 102400
        ltrace_ctrl -e plat_mrib_cluster $2 102400
        ltrace_ctrl -e plat_mrib_cluster_err $2 102400
        ltrace_ctrl -e plat_other $2 102400
        ltrace_ctrl -e plat_other_err $2 102400
        exit
    fi
    if [[ $1 = "mgid" ]]; then
        cd "$path""mgid"
        pwd
        ltrace_ctrl -e error $2 102400
        ltrace_ctrl -e event $2 102400
        ltrace_ctrl -e fevent $2 102400 
        exit
    fi
    if [[ $1 = "snoop" ]]; then
        cd "$path""asr9k-l2fib/l2mc-snoop"
        pwd
        ltrace_ctrl -e error $2 102400
        ltrace_ctrl -e event $2 102400
        ltrace_ctrl -e critical $2 102400 
        ltrace_ctrl -e verbose $2 102400
        exit
    fi
    echo "Invalid proc name";
    print_usage
    exit
fi
