#!/bin/bash # read SONiC immutable variables [ -f /etc/sonic/sonic-environment ] && . /etc/sonic/sonic-environment PLATFORM=${PLATFORM:-`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`} if [[ $1 == "TSA" ]]; then TSA_STATE_UPDATE='{"BGP_DEVICE_GLOBAL":{"STATE":{"tsa_enabled": "true"}}}' log_msg='System Mode: Normal -> Maintenance' err_msg='System is already in Maintenance' desired_tsa_state=true elif [[ $1 == "TSB" ]]; then TSA_STATE_UPDATE='{"BGP_DEVICE_GLOBAL":{"STATE":{"tsa_enabled": "false"}}}' log_msg='System Mode: Maintenance -> Normal' err_msg='System is already in Normal mode' desired_tsa_state=false fi # Parse the device specific asic conf file, if it exists ASIC_CONF=/usr/share/sonic/device/$PLATFORM/asic.conf [ -f $ASIC_CONF ] && . $ASIC_CONF if [[ ($NUM_ASIC -gt 1) ]]; then asic=0 NAMESPACE_PREFIX='asic' while [ $asic -lt $NUM_ASIC ] do # Run TSA/TSB/TSC scripts in BGP instance for frontend ASICs. sub_role=`sonic-cfggen -d -v "DEVICE_METADATA['localhost']['sub_role']" -n $NAMESPACE_PREFIX$asic` if [ $sub_role == 'FrontEnd' ] then echo -e "BGP"$asic" : \c" if [[ -n "$TSA_STATE_UPDATE" ]]; then current_tsa_state="$(sonic-cfggen -d -v BGP_DEVICE_GLOBAL.STATE.tsa_enabled -n $NAMESPACE_PREFIX$asic)" if [[ $current_tsa_state == $desired_tsa_state ]]; then echo "$err_msg" logger -t $1 -p user.info "$err_msg" else sonic-cfggen -a "$TSA_STATE_UPDATE" -w -n $NAMESPACE_PREFIX$asic logger -t $1 -p user.info "$log_msg" echo "$log_msg" fi else # If TSC is executed, invoke FRR script to check installed route-maps docker exec -i bgp$asic /usr/bin/$1 fi fi asic=$[$asic+1] done else if [[ -n "$TSA_STATE_UPDATE" ]]; then current_tsa_state="$(sonic-cfggen -d -v BGP_DEVICE_GLOBAL.STATE.tsa_enabled)" if [[ $current_tsa_state == $desired_tsa_state ]]; then echo "$err_msg" logger -t $1 -p user.info "$err_msg" else sonic-cfggen -a "$TSA_STATE_UPDATE" -w logger -t $1 -p user.info "$log_msg" echo "$log_msg" fi else # If TSC is executed, invoke FRR script to check installed route-maps docker exec -i bgp /usr/bin/$1 fi fi