Is_Chassis_flag=$1
ipClearFlag=$2
default_fid=$3
distname=$(/sbin/sin|grep -i "platform:"|/usr/bin/cut -d" " -f2|/usr/bin/cut -d "," -f 1)
swbdnum=$(/bin/echo $distname | /bin/awk -F"SWBD" '{print $2}')
active=0
standby=1
otherhost(){
HASHOW="$(hashow)"
that=${HASHOW#*Remote CP \(Slot}
that="${that%%,*}"
otherCpSlot=${that}
  case ${swbdnum} in
    '62' | '77')
	printf 127.1.1.$((1+$(otherCpSlot)))
	;;
    '42' | '21')
	printf 10.0.0.$(otherCpSlot)
	;;
    '141' | '142')
	printf 127.1.$((10+$(otherCpSlot))).$((10+$(otherCpSlot)))
	;;
    '165' | '166' | '179' | '180')
	ip=`echo "127.3.1."$otherCpSlot | /bin/awk -F ' ' '{print $1$2}'`
	printf $ip
	;;
    *)
	printf 0.0.0.0
	;;
    esac
}

# This file is created as marker that factoryreset is ran.
# fabos script is using this to delete vf conf files..
factoryreset_rm_vf_file="/var/log/.factoryresetrmVF"
/bin/touch $factoryreset_rm_vf_file;

if [ -f "$factoryreset_rm_vf_file" ]; then
	echo "created file $factoryreset_rm_vf_file" 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
else
	echo "Failed to create file $factoryreset_rm_vf_file" 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
fi

# echo "running in local cp"
sleep 1 2>>/var/log/factoryreset.log

####################################################################################################
################# Saving environment variables, reset to original after execution ##################
myROLE_ID=$ROLE_ID;
myLOGIN_ID=$LOGIN_ID;
myCURRENT_AD=$CURRENT_AD;
myCURRENT_VF=$CURRENT_VF;
myCHASSIS_ROLEID=$CHASSIS_ROLEID;
export ROLE_ID LOGIN_ID CURRENT_AD CURRENT_VF CHASSIS_ROLEID;
ROLE_ID=root;LOGIN_ID=root; CURRENT_AD=0; CURRENT_VF=$default_fid;  CHASSIS_ROLEID=0;
###################################################################################################

/fabos/cliexec/factory_reset_plugins_run 1
sleep 3 2>>/var/log/factoryreset.log

echo -e "Env after plugins script exec role-id=$ROLE_ID, LOGIN_ID=$LOGIN_ID, CURRENT_AD=$CURRENT_AD,
        CURRENT_VF=$CURRENT_VF, my_CHASSIS_ROLEID=$CHASSIS_ROLEID" 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log

if [ "$ipClearFlag" != "1" ]; then
    echo -e "Clearing management interface IP configurations....\c" | /usr/bin/tee -a /var/log/factoryreset.log
    echo "     Set host name to default CP0 and CP1" 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
    ipaddrset -ipv4 -add -cp 0 -host cp0 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
    ipaddrset -ipv4 -add -cp 1 -host cp1 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log

    /fabos/link_sbin/ipaddrset --force080588clear 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
    echo "done" | /usr/bin/tee -a /var/log/factoryreset.log
	echo -e "Deleting all dhcp configurations....\c" | /usr/bin/tee -a /var/log/factoryreset.log
	/bin/rm /etc/dhclientv*/dhclient* 2>>/var/log/factoryreset.log
	/bin/rm /mnt/etc/dhclientv*/dhclient* 2>>/var/log/factoryreset.log
	echo "done" |/usr/bin/tee -a /var/log/factoryreset.log
    echo "***ipaddrshow***" >> /var/log/factoryreset.log
    /fabos/link_bin/ipaddrshow 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
    echo "****************" >> /var/log/factoryreset.log
    echo "***wwnCardShow ipdata***" >> /var/log/factoryreset.log
    /fabos/factory/wwnCardShow ipdata 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
	if [ $swbdnum -eq 176 -o $swbdnum -eq 175 ]; then
		echo "***Enabling DHCP for Embedded platforms***" >> /var/log/factoryreset.log
		/fabos/link_sbin/ipaddrset -ipv4 -add -dhcp on 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
		/fabos/link_sbin/ipaddrset -ipv6 -dhcpv6 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
	fi
    echo "****************" >> /var/log/factoryreset.log
fi

echo -e "Resetting bootenv....\c" | /usr/bin/tee -a /var/log/factoryreset.log
/tftpboot/install reset 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
    echo "done" | /usr/bin/tee -a /var/log/factoryreset.log
sleep 2 2>>/var/log/factoryreset.log
/sbin/lsrestore 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
sleep 2;
# Below code is added to enable raslog messages.
/sbin/errlogutest -f -a 0 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log;
/bin/rm -f /sbin/errlogutest 2>>/var/log/factoryreset.log;

sleep 2 2>>/var/log/factoryreset.log


if [ "$Is_Chassis_flag" == "2" ]; then
    standby_addr="$(otherhost)"
    /usr/bin/rsh $standby_addr /bin/rm -f /mnt/var/log/factoryreset.log 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
    /usr/bin/rsh $standby_addr /bin/rm -f /var/log/factoryreset.log 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
    echo "Factoryreset starting on Standby CP...." |  /usr/bin/tee -a  /var/log/factoryreset.log
    if [ "$ipClearFlag" != "1" ]; then
	echo -e "Deleting all dhcp configurations in standby CP....\c" | /usr/bin/tee -a /var/log/factoryreset.log
	/usr/bin/rsh $standby_addr /bin/rm /etc/dhclientv*/dhclient* 2>>/var/log/factoryreset.log
	/usr/bin/rsh $standby_addr /bin/rm /mnt/etc/dhclientv*/dhclient* 2>>/var/log/factoryreset.log
	echo "done" |/usr/bin/tee -a /var/log/factoryreset.log
    fi
    echo "Stand-by address $standby_addr ...." >> /var/log/factoryreset.log
    /usr/bin/rsh $standby_addr /fabos/cliexec/factory_reset_plugins_run "0"
    sleep 2 2>>/var/log/factoryreset.log
    echo -e "Resetting standby bootenv....\c" | /usr/bin/tee -a /var/log/factoryreset.log
    /usr/bin/rsh $standby_addr /tftpboot/install reset 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
    echo "done" | /usr/bin/tee -a /var/log/factoryreset.log
	echo -e "lsrestore in Standby CP" 1>>/var/log/factoryreset.log
    /usr/bin/rsh $standby_addr "ROLE_ID=root;LOGIN_ID=root; CURRENT_AD=0; CURRENT_VF=$default_fid;  CHASSIS_ROLEID=0; /sbin/lsrestore 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log"

sleep 1 2>>/var/log/factoryreset.log
fi
	/bin/ls -l /etc/fabos/config/switch-conf.$swbdnum /mnt/etc/fabos/config/switch-conf.$swbdnum 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
	/bin/ls -l /etc/fabos/config/vf-conf.$swbdnum /mnt/etc/fabos/config/vf-conf.$swbdnum 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
	/bin/ls -l /etc/fabos/config/vf-conf-new.$swbdnum /mnt/etc/fabos/config/vf-conf-new.$swbdnum 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
	/bin/cat /etc/fabos/config/vf-conf-new.$swbdnum 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
	/bin/cat /mnt/etc/fabos/config/vf-conf-new.$swbdnum 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log
sleep 1 2>>/var/log/factoryreset.log
echo "Factoryreset operation is completed successfully." | /usr/bin/tee -a /var/log/factoryreset.log
/fabos/cliexec/errlogtest -i CONF-1033
sleep 1 2>>/var/log/factoryreset.log

#######################################################################################
########### Resetting environment variables to before factoryreset values #############
if [[ -z "${myROLE_ID}" ]]
then
	unset ROLE_ID;
else
	export ROLE_ID=${myROLE_ID};
fi
if [[ -z "${myLOGIN_ID}" ]]
then
	unset LOGIN_ID;
else
	export LOGIN_ID=${myLOGIN_ID};
fi
if [[ -z "${myCURRENT_AD}" ]]
then
	unset CURRENT_AD;
else
	export CURRENT_AD=${myCURRENT_AD};
fi
if [[ -z "${myCURRENT_VF}" ]]
then
	unset CURRENT_VF;
else
	export CURRENT_VF=${myCURRENT_VF};
fi
if [[ -z "${myCHASSIS_ROLEID}" ]]
then
	unset CHASSIS_ROLEID;
else
	export CHASSIS_ROLEID=${myCHASSIS_ROLEID};
fi
########################################################################################
sleep 1;
# Log file is getting deleted sometimes. Suspecting inconsistency/corruption while
# flushing data to file. So added below code.
/bin/rm -f /var/log/factoryreset1.log;
/bin/cp /var/log/factoryreset.log /var/log/factoryreset1.log
/bin/rm -f /var/log/factoryreset.log;
/bin/mv /var/log/factoryreset1.log /var/log/factoryreset.log;
sleep 1;
# Since many daemons are relying on below file to check factoryreset is going on.
# For debug purpose add below line to check permission of file.

/bin/ls -l /tmp/factoryreset_tmp 1>>/var/log/factoryreset.log 2>>/var/log/factoryreset.log


factoryreset_debug_file="/var/log/.factoryresetdebug"

if [ -f "$factoryreset_debug_file" ]; then
	:
else
	/bin/rm -f /var/log/factoryreset.log 1>>/dev/null 2>>/dev/null;
	/bin/rm -f /mnt/var/log/factoryreset.log 1>>/dev/null 2>>/dev/null;
	if [ "$Is_Chassis_flag" == "2" ]; then
		standby_addr="$(otherhost)"
		/usr/bin/rsh $standby_addr /bin/rm -f /var/log/factoryreset.log 1>>/dev/null 2>>/dev/null;
		/usr/bin/rsh $standby_addr /bin/rm -f /mnt/var/log/factoryreset.log 1>>/dev/null 2>>/dev/null;
	fi
fi

# Rebooting chassis/switch
if [ "$Is_Chassis_flag" == "2" ]; then
    /fabos/cliexec/chassisreboot -m -f
else
    /fabos/cliexec/reboot -s -c -r ChassisConfig
fi
