|
@@ -0,0 +1,175 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+DEFMODE=main
|
|
|
+
|
|
|
+MODE=${2:-$DEFMODE}
|
|
|
+
|
|
|
+IAPPASS=rotekucn
|
|
|
+LOGIN=admin
|
|
|
+PASS=12345
|
|
|
+
|
|
|
+DB_FW=""
|
|
|
+#MAIN_FW=./output/RTPS_05502xx.bin
|
|
|
+MAIN_FW=./output/IBP.bin
|
|
|
+SERVICE_FW=./output/SERVICE_05502xx.bin
|
|
|
+
|
|
|
+function usage {
|
|
|
+ echo -e "Usage: upload.sh {ip|mac} {full|main|db|service}\n\
|
|
|
+ \tmain - update main firmware\n\
|
|
|
+ \tdb - update doughter board firmware\n\
|
|
|
+ \service - upload service firmware\n\
|
|
|
+ \tfull - update both main and doughter boards firmware"
|
|
|
+}
|
|
|
+
|
|
|
+function wait_ip {
|
|
|
+ while ! ping -c1 -W1 $IP > /dev/null
|
|
|
+ do
|
|
|
+ echo "Waiting IP.."
|
|
|
+ sleep 1
|
|
|
+ ((i++))
|
|
|
+ if [ $i == 10 ]
|
|
|
+ then
|
|
|
+ echo -e "\r\nError. IP not found!"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+function need_login {
|
|
|
+ curl -s --compressed -b /tmp/cookies.txt -c /tmp/cookies.txt http://$IP/index.html | grep -q "Авторизация"
|
|
|
+}
|
|
|
+
|
|
|
+function need_iap {
|
|
|
+ curl -s --compressed -b /tmp/cookies.txt -c /tmp/cookies.txt http://$IP/index.html | grep -q "Параметры"
|
|
|
+}
|
|
|
+
|
|
|
+function log_out {
|
|
|
+ curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt http://$IP/logout.cgi > /dev/null
|
|
|
+}
|
|
|
+
|
|
|
+function log_in {
|
|
|
+ curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt -d "login=$LOGIN&password=$PASS" http://$IP/login.cgi > /dev/null
|
|
|
+}
|
|
|
+
|
|
|
+function boot_iap {
|
|
|
+ curl -s -X GET -b /tmp/cookies.txt -c /tmp/cookies.txt http://$IP/fw_update.cgi > /dev/null
|
|
|
+}
|
|
|
+
|
|
|
+function upload_db_fw {
|
|
|
+ echo $(curl --compressed http://$IP/upload.cgi -H 'Expect:' -F filedata=@$DB_FW --progress-bar)
|
|
|
+}
|
|
|
+
|
|
|
+function upload_main_fw {
|
|
|
+ echo $(curl --compressed http://$IP/upload.cgi -H 'Expect:' -F filedata=@$MAIN_FW --progress-bar)
|
|
|
+}
|
|
|
+
|
|
|
+function upload_service_fw {
|
|
|
+ TMP_FILE=$(mktemp -d /tmp/upload.XXXXX)/$(basename $MAIN_FW)
|
|
|
+ cp $SERVICE_FW $TMP_FILE
|
|
|
+ echo $(curl --compressed http://$IP/upload.cgi -H 'Expect:' -F filedata=@$TMP_FILE --progress-bar)
|
|
|
+}
|
|
|
+
|
|
|
+function goback {
|
|
|
+ curl -s http://$IP/goback.cgi
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+if [ $# -lt 1 ]
|
|
|
+then
|
|
|
+ echo "Error: Not enough parameters"
|
|
|
+ usage
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+#Check passed parameter
|
|
|
+if [[ "$1" =~ ^([a-fA-F0-9]{2}[:-]){5}[a-fA-F0-9]{2}$ ]]
|
|
|
+then
|
|
|
+ #Passed MAC
|
|
|
+ MAC=$(echo $1 | tr '[:upper:]' '[:lower:]' | tr '-' ':')
|
|
|
+ IP=$(sudo arp-scan -l | grep $MAC | cut -d$'\t' -f1)
|
|
|
+elif [[ "$1" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]
|
|
|
+then
|
|
|
+ #Passed IP
|
|
|
+ IP=$1
|
|
|
+else
|
|
|
+ echo "Error: Invalid parameter"
|
|
|
+ usage
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+ping -c1 -W1 $IP 2>/dev/null 1>/dev/null
|
|
|
+if [ "$?" = 0 ]
|
|
|
+then
|
|
|
+ echo "Host found ($IP)"
|
|
|
+else
|
|
|
+ echo "Error: Host not found ($IP)"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+
|
|
|
+if need_login
|
|
|
+then
|
|
|
+ echo "Logging in.."
|
|
|
+ log_in
|
|
|
+fi
|
|
|
+if need_iap
|
|
|
+then
|
|
|
+ echo "Reboot to IAP.."
|
|
|
+ boot_iap
|
|
|
+ sleep 10
|
|
|
+ wait_ip
|
|
|
+fi
|
|
|
+
|
|
|
+if [[ $MODE = "full" || $MODE = "db" ]]
|
|
|
+then
|
|
|
+ echo "Prog db firmware.."
|
|
|
+ db_res=$(upload_db_fw)
|
|
|
+ if [[ $db_res == "1" ]]
|
|
|
+ then
|
|
|
+ echo "OK"
|
|
|
+ else
|
|
|
+ echo "Error"
|
|
|
+ echo "Update failed!"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ sleep 1
|
|
|
+fi
|
|
|
+
|
|
|
+if [[ $MODE = "db" ]]
|
|
|
+then
|
|
|
+ goback
|
|
|
+ echo "Successfully updated"
|
|
|
+ exit 0
|
|
|
+fi
|
|
|
+
|
|
|
+if [[ $MODE = "full" || $MODE = "main" ]]
|
|
|
+then
|
|
|
+ echo "Prog main firmware.."
|
|
|
+ main_res=$(upload_main_fw)
|
|
|
+ if [[ $main_res == "1" ]]
|
|
|
+ then
|
|
|
+ echo "OK"
|
|
|
+ else
|
|
|
+ echo "Error"
|
|
|
+ echo "Update failed!"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+fi
|
|
|
+
|
|
|
+if [[ $MODE = "service" ]]
|
|
|
+then
|
|
|
+ echo "Prog service firmware.."
|
|
|
+ res=$(upload_service_fw)
|
|
|
+ if [[ $res == "1" ]]
|
|
|
+ then
|
|
|
+ echo "OK"
|
|
|
+ else
|
|
|
+ echo "Error"
|
|
|
+ echo "Update failed!"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ rm -rf $TMP_FILE
|
|
|
+fi
|
|
|
+
|
|
|
+echo "Successfully updated"
|
|
|
+exit 0
|